欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

NextTick的作用有哪些

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)NextTick的作用有哪些,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

電白ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!

在vue中每次監(jiān)聽(tīng)到數(shù)據(jù)變化的時(shí)候,都會(huì)去調(diào)用notify通知依賴(lài)更新,觸發(fā)watcher中的update方法。

update () {    /* istanbul ignore else */    if (this.lazy) {         } else if (this.sync) {       } else {      this.get()      //queueWatcher(this)    }  }

如果通過(guò)watcher中的get方法去重新渲染組件,那么在渲染的過(guò)程中假如多次更新數(shù)據(jù)會(huì)導(dǎo)致同一個(gè)watcher被觸發(fā)多次,這樣會(huì)導(dǎo)致重復(fù)的數(shù)據(jù)計(jì)算和DOM的操作。如下圖所示,修改3次message之后DOM被操作了3次。

NextTick的作用有哪些

為了解決上述問(wèn)題,不去直接調(diào)用get方法而是將每次調(diào)用update方法后需要批處理的wather暫存到一個(gè)隊(duì)列當(dāng)中,如果同一個(gè) watcher  被多次觸發(fā),通過(guò)wacther 的id屬性對(duì)其去重,只會(huì)被推入到隊(duì)列中一次。然后,等待所有的同步代碼執(zhí)行完畢之后在下一個(gè)的事件循環(huán)中,Vue 刷新隊(duì)列并執(zhí)行實(shí)際  (已去重的) 工作。

let has: { [key: number]: ?true } = {} let waiting = false export function queueWatcher (watcher: Watcher) {   const id = watcher.id  //對(duì)watcher去重   if (has[id] == null) {     has[id] = true     queue.push(watcher);     if (!waiting) {  //節(jié)流       waiting = true       nextTick(flushSchedulerQueue)     } }

調(diào)用watcher的run方法異步更新DOM

let has: { [key: number]: ?true } = {} function flushSchedulerQueue () {   let watcher, id   queue.sort((a, b) => a.id - b.id)    for (index = 0; index < queue.length; index++) {     watcher = queue[index]     if (watcher.before) {       watcher.before()     }     id = watcher.id     has[id] = null  //清空id     watcher.run()   //更新值   }      resetSchedulerState()   //清空watcher隊(duì)列 }  function resetSchedulerState () {   index = queue.length  = 0   has = {}   waiting =  false }

在vue內(nèi)部調(diào)用nextTick(flushSchedulerQueue),vm.$nextTick方法調(diào)用的也是nextTick()方法

Vue.prototype.$nextTick = function (cb) {    nextTick(cb,this);  };

那么多次調(diào)用nextTick方法是怎么處理的呢?

const callbacks = [] let pending = false  export function nextTick (cb?: Function, ctx?: Object) {   callbacks.push(() => {     if (cb) {       try {         cb.call(ctx)       } catch (e) {         handleError(e, ctx, 'nextTick')       }     }   })   if (!pending) {     pending = true     timerFunc()   } }

nextTick將所有的回調(diào)函數(shù)暫存到了一個(gè)隊(duì)列中,然后通過(guò)異步調(diào)用更新去依次執(zhí)行隊(duì)列中的回調(diào)函數(shù)。

function flushCallbacks () {   pending = false   const copies = callbacks.slice(0)   callbacks.length = 0   for (let i = 0; i < copies.length; i++) {     copies[i]()   } }

 NextTick的作用有哪些

nextTick函數(shù)中異步更新對(duì)兼容性做了處理,使用原生的 Promise.then、MutationObserver 和  setImmediate,如果執(zhí)行環(huán)境不支持,則會(huì)采用 setTimeout(fn, 0) 代替。

Promise

if (typeof Promise !== 'undefined' && isNative(Promise)) {   const p = Promise.resolve()   timerFunc = () => {     p.then(flushCallbacks)   } }

 NextTick的作用有哪些

MutationObserver

MutationObserver  它會(huì)在指定的DOM發(fā)生變化時(shí)被調(diào)用。創(chuàng)建了一個(gè)文本DOM,通過(guò)監(jiān)聽(tīng)字符值的變化,當(dāng)文本字符發(fā)生變化的時(shí)候調(diào)用回調(diào)函數(shù)。

if (!isIE && typeof MutationObserver !== 'undefined' && (   isNative(MutationObserver) ||   MutationObserver.toString() === '[object MutationObserverConstructor]' )) {   let counter = 1   const observer = new MutationObserver(flushCallbacks)   const textNode = document.createTextNode(String(counter))   observer.observe(textNode, {     characterData: true   })   timerFunc = () => {     counter = (counter + 1) % 2     textNode.data = String(counter)   } }

 NextTick的作用有哪些

setImmediate

setImmediate該方法用作把一些需要持續(xù)運(yùn)行的操作放在一個(gè)其他函數(shù)里,在瀏覽器完成后面的其他語(yǔ)句后,就立即執(zhí)行此替換函數(shù)。

if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {   timerFunc = () => {     setImmediate(flushCallbacks)   } }else{   timerFunc = () => {     setTimeout(flushCallbacks, 0)   } }

 NextTick的作用有哪些

總結(jié)

vue渲染DOM的時(shí)候觸發(fā)set方法中的去依賴(lài)更新,在更新的過(guò)程中watcher不是每次都去執(zhí)行去觸發(fā)DOM的更新,而是通過(guò)對(duì)wather的去重之后,通過(guò)nextTick異步調(diào)用觸發(fā)DOM更新。

nextTick()就是一個(gè)異步函數(shù),在異步函數(shù)中通過(guò)隊(duì)列批處理nextTick傳入的回調(diào)函數(shù)cb,但是隊(duì)列彼此不是同時(shí)進(jìn)行的,通過(guò)節(jié)流的方式依次執(zhí)行。

上述就是小編為大家分享的NextTick的作用有哪些了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章題目:NextTick的作用有哪些
本文網(wǎng)址:http://chinadenli.net/article48/iejoep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司外貿(mào)建站、面包屑導(dǎo)航、動(dòng)態(tài)網(wǎng)站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
日韩欧美高清国内精品| 福利新区一区二区人口| 黄片在线免费观看全集| 国产亚洲欧美日韩精品一区| 年轻女房东2中文字幕| 福利视频一区二区在线| 亚洲欧美黑人一区二区| 精品视频一区二区不卡| 九九视频通过这里有精品| 日本黄色录像韩国黄色录像| 久久精品国产亚洲av麻豆| 中文字幕一二区在线观看| 中文字幕中文字幕在线十八区| 欧美国产日韩变态另类在线看| 国产中文字幕一区二区| 好吊色欧美一区二区三区顽频| 欧美黑人黄色一区二区| 日本一二三区不卡免费| 国产精品欧美一区二区三区不卡| 国产福利一区二区三区四区| 亚洲国产精品av在线观看| 亚洲av专区在线观看| 欧美激情一区=区三区| 国产精品一区二区香蕉视频 | 人妻乱近亲奸中文字幕| 99热九九在线中文字幕| 欧美乱妇日本乱码特黄大片| 91亚洲精品亚洲国产| 久草精品视频精品视频精品| 亚洲一区二区欧美激情| 国产日韩欧美国产欧美日韩| 亚洲av成人一区二区三区在线| 欧美大胆美女a级视频| 99久久婷婷国产亚洲综合精品| 亚洲精品熟女国产多毛 | 亚洲最新的黄色录像在线| 亚洲国产精品久久琪琪| 中文字幕不卡欧美在线| 自拍偷拍一区二区三区| 色婷婷国产精品视频一区二区保健 | 婷婷色香五月综合激激情|