92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

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://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
免费观看久久久久| 国产精品27p| 网曝91综合精品门事件在线| 高跟丝袜欧美一区| 91在线播放网站| 伦理一区二区三区| 欧美激情图片区| 99精品在线观看视频| 国产精品久久久久一区二区| 亚洲欧美激情另类校园| 精品在线视频一区二区| 成人av蜜桃| 久久久久久久久久久网站| 亚洲开心激情网| 成人黄色网免费| 欧美在线激情视频| 亚洲色图色老头| 日韩欧美国产一区在线观看| 中文字幕成人精品久久不卡| ww亚洲ww在线观看国产| 国产美女精彩久久| 在线手机中文字幕| 日本精品一级二级| 亚洲美女视频在线观看| 国产厕所精品在线观看| 亚洲成av人片一区二区梦乃| 日韩精品免费看| 成人午夜在线免费| 麻豆国产精品官网| 精品中文字幕一区二区| 免费观看在线色综合| 在线不卡免费av| 欧美色区777第一页| 色在人av网站天堂精品| 亚洲美女黄色片| 成人性色av| 日本道精品一区二区三区| 亚洲香肠在线观看| 国产精品久久久久影院亚瑟| 中文视频一区| 欧美激情www| 成人免费视频网址| 牛牛精品一区二区| 欧美激情无毛| 污污在线观看| 色综合天天综合网国产成人网| 欧美日韩国产丝袜另类| 美女视频在线免费| 在线日韩av片| 一本色道久久综合亚洲精品不| 国产福利在线观看| 日韩欧美三级一区二区| 国产亚洲欧美另类一区二区三区| av影片在线看| av在线电影免费观看| 亚洲成人黄色影院| 色偷偷偷在线视频播放| 欧美大片欧美激情性色a∨久久| 五月天综合网| 一区二区三区在线观看网站| 亚洲人成网站精品片在线观看| 国产精品久久综合| 国产欧美1区2区3区| 欧洲在线一区| 成人综合久久| 久久久久久久久免费| 久久人人爽人人爽爽久久| 极品美鲍一区| 午夜不卡在线视频| 欧美高清激情视频| 久久男女视频| 台湾佬中文娱乐久久久| 国产麻豆精品| 欧美一区二区三区啪啪| 亚洲精品国产拍免费91在线| 日韩性感在线| 亚洲视频在线免费观看| 亚洲婷婷免费| 欧美 亚欧 日韩视频在线| 日韩毛片视频| 国产精品第13页| 欧美二区在线播放| 91一区在线| 亚洲综合五月| 成人免费在线视频观看| 18性欧美xxxⅹ性满足| 一区二区三区在线视频免费观看| 五月综合激情婷婷六月色窝| 国产精品一区二区久激情瑜伽| 成人黄色短视频在线观看| 日韩国产欧美在线播放| 中文字幕精品一区| 久久国产色av| 91福利在线看| 欧美精品黑人性xxxx| 国产精品一区久久| 欧美久久久久久久久中文字幕| 成人精品影院| 欧美激情精品久久久久久久变态| 蜜桃精品视频| 欧美wwwsss9999| heyzo一本久久综合| 亚洲视频国产视频| 一区二区三区精品99久久| 久久深夜福利免费观看| 在线天堂中文资源最新版| 成人av网站在线观看免费| 亚洲精品日韩丝袜精品| 麻豆精品传媒视频| 久久久噜噜噜久久中文字幕色伊伊| 欧美搞黄网站| av在线不卡一区| 婷婷精品在线观看| 小小影院久久| 三级一区在线视频先锋| 欧美精品一区视频| 最近2019中文字幕一页二页| 一区二区三区国产豹纹内裤在线| 日韩av网站在线| 偷偷www综合久久久久久久| 欧美猛少妇色xxxxx| 亚洲欧美日韩一区在线观看| 欧美日韩va| 亚洲制服欧美另类| 日韩天天综合| 欧美xxxx在线观看| 国产亚洲成av人片在线观黄桃| 在线观看av不卡| 88在线观看91蜜桃国自产| 国产亚洲欧美日韩日本| 亚洲人成久久| 欧美精品少妇一区二区三区| 成人aa视频在线观看| 日韩av电影手机在线观看| 另类一区二区三区| 在线观看欧美日韩国产| 国产激情999| 亚洲欧美日韩爽爽影院| 欧美国产日韩一区二区三区| 国产精品久久久久久久7电影| 国产精品二区三区| 久久91亚洲精品中文字幕奶水| 影音先锋中文字幕一区二区| 成人看片黄a免费看在线| 丰满的护士2在线观看高清| 国产成人综合精品三级| 国产精品亚洲综合色区韩国| 精品亚洲成a人| 久久精品视频一区二区| 色黄网站在线观看| 日韩免费av一区二区三区| 色综合久久久久综合99| 亚瑟国产精品| 欧美一区精品| 国产精品免费观看在线| 蜜臀久久99精品久久久久久宅男| 男女男精品视频| 日韩精彩视频| 日本电影亚洲天堂一区| 欧美高清自拍一区| 亚洲精品自在在线观看| 视频在线观看国产精品| 女同久久另类99精品国产| 大片免费在线看视频|