97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

Vue源碼剖析(三)patch和Diff算法

2019-10-30    seo達人

Patch和Diff算法

網上看了好多的博客和源碼教程,感覺很多仔細的地方沒有說清,而且在一些復雜的部分加了好多的描述,所以就想自己也寫下心得, 方便自己, 方便他人,有興趣的同學可以關注我的github里面有我之前一些博文 github/193Eric



我們知道的,在數據更改后,會觸發getter,然后通過dep.notify()來通知watcher觸發update進而更新視圖,最終是通過Diff算法來對比新老Vnode的差異,并把差異更新到Dom視圖上



Diff

我們知道的,Virtual DOM是一顆樹,而diff算法主要把兩顆樹進行對比,找出之間的差異,來渲染頁面



diff 算法是通過同層的樹節點進行比較而非對樹進行逐層搜索遍歷的方式,所以時間復雜度只有 O(n),是一種相當的算法



1.調用patch函數比較Vnode和OldVnode,如果不一樣直接return Vnode即將Vnode真實化后替換掉DOM中的節點



2.如果OldVnode和Vnode值得進一步比較則調用patchVnode方法進行進一步比較,分為以下幾種情況:



Vnode有子節點,但是OldVnode沒有,則將Vnode的子節點真實化后添加到真實DOM上



Vnode沒有子節點,但是OldVnode上有,則將真實DOM上相應位置的節點刪除掉



Vnode和OldVnode都有文本節點但是內容不一樣,則將真實DOM上的文本節點替換為Vnode上的文本節點



Vnode和OldVnode上都有子節點,需要調用updateChildren函數進一步比較



updateChildren比較規則



提取出Vnode和OldVnode中的子節點分別為vCh和OldCh,并且提出各自的起始和結尾變量標記為 oldS oldE newS newE



如果是oldS和newE匹配上了,那么真實dom中的第一個節點會移到最后



如果是oldE和newS匹配上了,那么真實dom中的最后一個節點會移到最前,匹配上的兩個指針向中間移動



如果都沒有,在沒有key的情況下直接在DOM的oldS位置的前面添加newS,同時newS+1。在有key的情況下會將newS和Oldch上的所有節點對比,如果有相同的則移動DOM并且將舊節點中這個位置置為null且newS+1。如果還沒有則直接在DOM的oldS位置的前面添加newS且newS+1

直到出現任意一方的start>end,則有一方遍歷結束,整個比較也結束



updateChildren例子:



假設:



真實dom為 A、B、C

oldDom為 A1、B1、C1

newDom為 A2、D2、C2、B2



先確定oldS = A1 ; oldE = C1; newS = A2; newE = B2



先對比oldS和newS,oldE和newE,發現oldS = newS 所以真實dom的A固定不動。排序為 A、B、C

然后oldS = B1 ; oldE = C1; newS = D2; newE = B2



對比發現 oldS = newE , 所以真實dom,B要插入到后面去



真實dom排序為:A、C、B



然后oldS = C1; oldE = C1; newS = D2; newE = B2



對比發現兩兩都不對等,所以走第三步。

假設有key存在,所以newS直接和oldDom里面的所有節點對比,發現沒有存在,然后插入到oldS前面,且newS+1

真實dom排序為:A、D、C、B

然后重新開始,oldS++ > oldE-- ,結束了。



這就是updateChildren,之后就是一直遍歷,運行updateChildren直到沒有


日歷

鏈接

個人資料

藍藍設計的小編 http://www.0391cbd.com

存檔

主站蜘蛛池模板: 制服丝袜国产精品| 国产福利免费视频| 无码一区二区三区视频在线播放| 伊人久久大香线蕉影院| 亚洲天堂777| 欧美精品影院| 在线高清亚洲精品二区| 亚洲欧美成人| 性激烈欧美三级在线播放| 一本久道久综合久久鬼色| 亚洲欧洲日韩久久狠狠爱| 99re免费视频| 91精品日韩人妻无码久久| 人人91人人澡人人妻人人爽| 日韩精品免费一线在线观看| 国产成人一区在线播放| 四虎国产成人免费观看| 亚洲另类国产欧美一区二区| 国产97区一区二区三区无码| 最新国产精品第1页| 亚洲精品麻豆| 日本高清在线看免费观看| P尤物久久99国产综合精品| 国产精品国产主播在线观看| 欧美精品导航| 91国内在线观看| 欧美激情视频一区二区三区免费| 亚洲国产亚综合在线区| 蜜芽国产尤物av尤物在线看| 一本大道香蕉久中文在线播放| 91丨九色丨首页在线播放| 青青草国产在线视频| 国产小视频a在线观看| 青青青国产视频手机| 青青操视频免费观看| 久久久亚洲国产美女国产盗摄| a亚洲视频| 国产在线拍偷自揄拍精品| 欧美成人第一页| 98超碰在线观看| 午夜精品福利影院| 韩国自拍偷自拍亚洲精品| 乱人伦99久久| 区国产精品搜索视频| 婷婷五月在线视频| 2020极品精品国产| 中文字幕佐山爱一区二区免费| 成年网址网站在线观看| 22sihu国产精品视频影视资讯| 国产网站免费| 国产一区二区三区夜色| 亚洲日本中文字幕天堂网| 无码精品福利一区二区三区| 婷婷色在线视频| 国产成人亚洲无吗淙合青草| 国产又爽又黄无遮挡免费观看| 精品视频免费在线| 久久黄色小视频| 亚洲综合中文字幕国产精品欧美 | 欧美一级视频免费| 日本在线欧美在线| 欧美午夜在线视频| 国产丝袜一区二区三区视频免下载 | 香蕉久人久人青草青草| 亚洲欧美另类视频| 一级毛片在线播放免费观看| 日本高清视频在线www色| 成年A级毛片| 四虎亚洲国产成人久久精品| 91麻豆国产视频| 国产黄色片在线看| 欧美视频二区| 美女被操91视频| 毛片大全免费观看| 亚洲第一视频网| 中文字幕调教一区二区视频| 亚洲精品爱草草视频在线| 国产网友愉拍精品| 无码网站免费观看| 日韩国产一区二区三区无码| 91精品国产91久无码网站| 色婷婷成人|