• <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <small id="ggggg"></small> <sup id="ggggg"></sup>
    <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <tfoot id="ggggg"></tfoot>
  • <nav id="ggggg"><cite id="ggggg"></cite></nav>
    <nav id="ggggg"></nav>
    成人黃色A片免费看三更小说,精品人妻av区波多野结衣,亚洲第一极品精品无码,欧美综合区自拍亚洲综合,久久99青青精品免费观看,中文字幕在线中字日韩 ,亚洲国产精品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.lzhte.cn

    存檔

    主站蜘蛛池模板: 五月激情综合网| 国产精品 日韩精品| 中文字幕人成人乱码亚洲电影 | 97夜夜澡人人双人人人喊| 天天躁夜夜躁狠狠躁图片| 人妻少妇精品视频专区| 宾馆人妻4P互换视频| 精品国产自在现线看久久| 亚洲国产欧美在线人成人| 伊人久久大香线蕉综合影视| 亚洲综合色在线观看| 啪啪啪啪啪网站| 日韩一区二区三区北条麻妃| 中文字幕亚洲综久久2021| 蒲江县| 在线不卡日本v二区707| 国产精品欧美视频另类专区| 午夜亚洲精品不卡在线观看| 蜜桃伦理一区二区三区| 巨大欧美黑人xxxxbbbb| 97久久久亚洲综合久久| www.色色色.com| 欧美性交网站| 国产午夜亚洲精品国产成人| 日本熟妇一区二区三区| 麻豆国产巨作AV剧情老师| 无码人妻精品一区二区三区久久| 国产精品欧美日韩| 亚洲色欲色欲WWW成人网| 黄色三级片网站| 国内精品久久人妻互换| 中文字幕乱码亚洲美女精品| 国产一区二区日韩经典| a级老女人毛片免费完整视频 | 亚洲中文字幕有码视频| 亚洲人成网站在线播放2019| 亚洲中文字幕第二十页| 国产caonila在线观看| 国内精品久久久久久影院中文字幕 | 国产精品毛片99久久久久| 国产香蕉尹人在线观看视频|