国产69囗曝吞精在线视频,肥臀浪妇太爽了快点再快点,亚洲欧洲成人a∨在线观看,狠狠色丁香久久综合 ,国精一二二产品无人区免费应用,亚洲精品久久久久中文字幕,四虎一区二区成人免费影院网址 ,无码三级中文字幕在线观看

      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.izc.net.cn

      存檔

      主站蜘蛛池模板: 在线观看三级视频| 激情第一区仑乱| 久久青草精品38国产| 91成人动漫| 欧美亚色| 高清一区二区三区日本久| 欧美肥胖老太vidio在线视频| av中文字幕一区| 精品日韩人妻中文字幕| 亚洲精品国产一区二区图片| 中文字幕无码毛片免费看| 污视频网站免费在线观看| 2019久久久高清日本道| 亚洲五月色丁香婷婷婷| 亚洲第一成人网站| 青青青草视频在线| 国产99久久亚洲综合精品西瓜tv | 欧美乱妇狂野欧美视频| 长腿校花无力呻吟娇喘| 久久综合综合久久av在钱| 亚洲第一av网站| a天堂资源在线| 五月开心播播网| 国产成人92精品午夜福利| 国产精品亲子伦对白| 免费在线不卡视频| 亚洲va久久久噜噜噜久久男同| 日本熟妇浓密毛毛多| 成人在线视频网址| 欧美日韩一区二区三区电影| 日日av拍夜夜添久久免费 | 性欧美一区二区三区| 国产乱人伦真实精品视频 | 国产精品美女久久久久av超清| 亚洲老女人区一区二视频| 好大好猛好爽好深视频免费| 亚洲一区二区三区中文字幕在线 | 玖玖资源站亚洲最大成人网站| 中文字幕免费高清| 日韩av无码中文字幕| 91精品国产自产91精品|