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

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
久久精品国产亚洲一区二区| 在线观看欧美日韩| 成人免费自拍视频| www.99久久热国产日韩欧美.com| 国产精品狠色婷| 成人黄色激情网| 成人中文字幕在线观看| 亚洲专区国产精品| 福利一区福利二区微拍刺激| 国产精品专区一| 国产盗摄xxxx视频xxx69| 国产精品久久久久免费a∨大胸| 精品无码久久久久久国产| 最新69国产成人精品视频免费| 亚洲高清久久久久久| 精品国产老师黑色丝袜高跟鞋| 欧美成aaa人片免费看| 亚洲第一视频网站| 亚洲直播在线一区| 国产精品久久久久久影视| 国产精品扒开腿做爽爽爽视频| 北条麻妃一区二区三区中文字幕| 92国产精品视频| 久久久久久香蕉网| 亚洲一区二区三区sesese| 北条麻妃在线一区二区| 欧美专区中文字幕| 日韩电影中文字幕在线| 日本免费在线精品| 亚洲精品福利资源站| 亚洲伊人久久大香线蕉av| 992tv成人免费视频| 91精品视频一区| 国产精品视频免费观看www| 久久香蕉国产线看观看av| 美女黄色丝袜一区| 91av在线免费观看| 久久999免费视频| 欧美激情一区二区三区在线视频观看| 97免费视频在线| 久久免费在线观看| 性欧美xxxx视频在线观看| 黄色成人在线免费| 欧美在线视频网| 国产精品丝袜高跟| 日韩电影中文字幕av| 精品国产一区二区三区久久| 国产日韩欧美中文在线播放| 国产成人亚洲综合91精品| 久久久久久尹人网香蕉| 国产情人节一区| 国产精品视频在线播放| 有码中文亚洲精品| 精品国产一区av| 亚洲精品成人久久久| 国产欧美日韩精品在线观看| 色系列之999| 国产视频在线观看一区二区| 一本色道久久综合狠狠躁篇怎么玩| 欧美大码xxxx| 精品偷拍一区二区三区在线看| 亚洲欧美一区二区激情| 亚洲无限乱码一二三四麻| 日韩av网址在线| 中文字幕亚洲在线| 国产日韩精品一区二区| 岛国av一区二区在线在线观看| 亚洲在线免费看| 91夜夜揉人人捏人人添红杏| 欧美日韩一区二区在线| 国产激情久久久| 插插插亚洲综合网| 综合欧美国产视频二区| 亚洲999一在线观看www| 97超级碰碰人国产在线观看| 久久99久久亚洲国产| 国产成人97精品免费看片| 国产精品久久久久久久久久久不卡| 欧美国产精品人人做人人爱| 午夜精品三级视频福利| 中文欧美日本在线资源| 亚洲精选一区二区| 色黄久久久久久| 4p变态网欧美系列| 超在线视频97| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲国产精品热久久| 98午夜经典影视| 午夜精品久久17c| 国产亚洲精品日韩| 色综合久久天天综线观看| 国产v综合ⅴ日韩v欧美大片| 欧美一级电影久久| 色先锋久久影院av| 日韩av在线免费| 成人乱人伦精品视频在线观看| 亚洲天堂网在线观看| 亚洲成人xxx| 国产精品视频xxx| 国产日韩精品入口| 亚洲美女av网站| 亚洲欧美三级在线| 91精品久久久久久久久青青| 国产婷婷色综合av蜜臀av| 丝袜亚洲欧美日韩综合| 日韩毛片在线观看| 91成人免费观看网站| 欧美一区二区三区精品电影| 亚洲一区二区三区777| 欧美黑人国产人伦爽爽爽| 欧美国产日韩视频| 欧美丝袜第一区| 91大神福利视频在线| 日韩在线欧美在线| 日韩中文字幕在线免费观看| 亚洲精品久久久一区二区三区| 国产成人综合精品| 亚洲第一视频网站| 国产精品中文字幕在线观看| 国产精品久久91| 欧美精品激情在线| 欧美巨大黑人极品精男| 欧美极品第一页| 国产视频精品一区二区三区| 欧美日韩亚洲天堂| 国产精品久久中文| 国语自产精品视频在线看| 岛国av一区二区三区| 日韩电影免费观看在线观看| 国自在线精品视频| 69久久夜色精品国产69| 亚洲美女久久久| 成人午夜两性视频| 高清欧美性猛交| 国产精品久久婷婷六月丁香| 亚洲精品国精品久久99热一| 久久这里有精品视频| 成人久久久久久| 亚洲最新av网址| 最近中文字幕2019免费| 成人写真视频福利网| 美女福利视频一区| 777国产偷窥盗摄精品视频| 国产午夜精品久久久| 日韩经典中文字幕在线观看| 在线视频中文亚洲| 成人在线一区二区| 国产成人亚洲综合91精品| 亚洲一区二区中文字幕| 国产97在线|日韩| 亚洲91av视频| 亚洲美女av在线| 萌白酱国产一区二区| 久久久久久中文| 激情久久av一区av二区av三区| 久久影视电视剧凤归四时歌| www.亚洲一二| 色噜噜狠狠狠综合曰曰曰88av| 免费av在线一区| 欧美日韩激情视频8区| 精品无码久久久久久国产| 中文字幕综合一区| 欧美性猛交xxxx乱大交3| 日韩欧美大尺度|