最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React DOM diff 對比Vue DOM diff 區(qū)別詳解

 更新時間:2022年09月01日 14:51:47   作者:隔壁老網(wǎng)  
這篇文章主要為大家介紹了React DOM diff 對比Vue DOM diff 區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

React DOM diff 和 Vue DOM diff 的區(qū)別

React 是從左向右遍歷對比,Vue 是雙端交叉對比。

React 需要維護(hù)三個變量(我看源碼發(fā)現(xiàn)是五個變量),Vue 則需要維護(hù)四個變量。

  • Vue 整體效率比 React 更高,舉例說明:假設(shè)有 N 個子節(jié)點(diǎn),我們只是把最后子節(jié)點(diǎn)移到第一個,那么
  • React 需要進(jìn)行借助 Map 進(jìn)行 key 搜索找到匹配項,然后復(fù)用節(jié)點(diǎn)
  • Vue 會發(fā)現(xiàn)移動,直接復(fù)用節(jié)點(diǎn)

React DOM diff 代碼查看流程

  • 運(yùn)行 git clone https://github.com/facebook/react.git
  • 運(yùn)行 cd react; git switch 17.0.2
  • 用 VSCode 或 WebStorm 打開 react 目錄
  • 打開 packages/react-reconciler/src/ReactChildFiber.old.js 第 1274 行查看舊版代碼,或打開 packages/react-reconciler/src/ReactChildFiber.new.js 第 1267 行查看新代碼(實(shí)際上一樣) 發(fā)現(xiàn)react的源碼很多的new和old文件,而且new和old代碼幾乎一模一樣
發(fā)現(xiàn)比較經(jīng)典的注釋
// This algorithm can't optimize by searching from both ends since we
    該算法不能通過雙端搜索來優(yōu)化,因?yàn)槲覀?
// don't have backpointers on fibers. I'm trying to see how far we can get
    不要在fibers上有反向指針。 我想看看我們能走多遠(yuǎn)
// with that model. If it ends up not being worth the tradeoffs, we can
    xxx 如果最終需要為此付出代價,我們可以
// add it later.
    以后添加它
// Even with a two ended optimization, we'd want to optimize for the case
    即使是雙端優(yōu)化,我們也要針對這種情況進(jìn)行優(yōu)化
// where there are few changes and brute force the comparison instead of
    哪里有一些變化和暴力比較而不是
// going for the Map. It'd like to explore hitting that path first in
    去拿Map。 它想要先探索這條路徑
// forward-only mode and only go for the Map once we notice that we need
    僅向前模式,只有當(dāng)我們注意到我們需要的時候才去找Map
// lots of look ahead. This doesn't handle reversal as well as two ended
    要向前看。 這并不能像處理兩個端點(diǎn)那樣處理反轉(zhuǎn)
// search but that's unusual. Besides, for the two ended optimization to
    搜索,但這是不尋常的。 此外,對兩端進(jìn)行了優(yōu)化
// work on Iterables, we'd need to copy the whole set.
    對于可迭代對象,我們需要復(fù)制整個集合。
// In this first iteration, we'll just live with hitting the bad case
    在第一次迭代中,我們將只處理這種糟糕的情況
// (adding everything to a Map) in for every insert/move.
    (添加一切到一個Map中)在每次插入/移動。
// If you change this code, also update reconcileChildrenIterator() which
    如果您更改了這段代碼,還需要更新reconcileChildrenIterator() 方法
// uses the same algorithm.
    使用相同的算法。

總結(jié)

任性,這個算法不到萬得以的情況不能像Vue一樣使用雙端優(yōu)化,實(shí)在要優(yōu)化的情況下,還要記得改一下別的方法哦,(我補(bǔ)充一句,改了new文件里面的,也要記得改old文件里面的哦)

忽略所有警告和報錯,因?yàn)?React JS 代碼中有不是 JS 的代碼

折疊所有代碼

根據(jù) React 文檔中給出的場景反復(fù)在大腦中運(yùn)行代碼

  • 場景0:單個節(jié)點(diǎn),會運(yùn)行到 reconcileSingleElement。接下來看多個節(jié)點(diǎn)的情況。
  • 場景1:沒 key,標(biāo)簽名變了,最終會走到 createFiberFromElement(存疑)
  • 場景2:沒 key,標(biāo)簽名沒變,但是屬性變了,最終走到 updateElement 里的 useFiber
  • 場景3:有 key,key 的順序沒變,最終走到 updateElement
  • 場景4:有 key,key 的順序變了,updateSlot 返回 null,最終走到 mapRemainingChildren、updateFromMap 和 updateElement(matchedFiber),整個過程較長,效率較低

代碼查看要點(diǎn)(忠告):

  • 聲明不看(用到再看)
  • if 先不看(但 if else 要看)
  • 函數(shù)調(diào)用必看

以上就是React DOM diff 對比Vue DOM diff 區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于React DOM diff區(qū)別Vue DOM diff 的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue+TailWindcss實(shí)現(xiàn)一個簡單的闖關(guān)小游戲

    Vue+TailWindcss實(shí)現(xiàn)一個簡單的闖關(guān)小游戲

    本文將利用Vue+TailWindcss實(shí)現(xiàn)一個簡單的闖關(guān)小游戲,玩家須躲避敵人與陷阱到達(dá)終點(diǎn)且擁有多個關(guān)卡,感興趣的小伙伴可以了解一下
    2022-04-04
  • vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能示例詳解

    vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能示例詳解

    這篇文章主要介紹了vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 老生常談vue3組件通信方式

    老生常談vue3組件通信方式

    這篇文章主要介紹了vue3組件通信方式,面試題經(jīng)常會問到vue3組件間的通信方式,今天就通過實(shí)例代碼給大家詳細(xì)介紹下,對vue3組件通信相關(guān)知識感興趣的朋友一起看看吧
    2022-08-08
  • vue el-select與el-tree實(shí)現(xiàn)支持可搜索樹型

    vue el-select與el-tree實(shí)現(xiàn)支持可搜索樹型

    本文主要介紹了vue el-select與el-tree實(shí)現(xiàn)支持可搜索樹型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 在Vue3中創(chuàng)建和使用全局組件的實(shí)現(xiàn)方式

    在Vue3中創(chuàng)建和使用全局組件的實(shí)現(xiàn)方式

    在前端開發(fā)中,Vue.js 是一個廣泛使用的框架,因其靈活性和強(qiáng)大的功能,得到許多開發(fā)者的喜愛,Vue 3 的發(fā)布為這一框架帶來了很多新的特性和改進(jìn),在本文中,我們將詳細(xì)討論如何在 Vue 3 中創(chuàng)建和使用全局組件,并通過示例代碼展示具體實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-07-07
  • Vue.js 踩坑記之雙向綁定

    Vue.js 踩坑記之雙向綁定

    這篇文章給大家?guī)砹薞ue.js 踩坑記之雙向綁定問題,非常不錯,具有參考借鑒價值,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Vue?Validate表單組件的封裝詳解

    Vue?Validate表單組件的封裝詳解

    這篇文章主要為大家詳細(xì)介紹了Vue?Validate表單組件的封裝的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下
    2023-09-09
  • vue2.0 實(shí)現(xiàn)導(dǎo)航守衛(wèi)(路由守衛(wèi))

    vue2.0 實(shí)現(xiàn)導(dǎo)航守衛(wèi)(路由守衛(wèi))

    vue-route 提供的 beforeRouteUpdate 可以方便地實(shí)現(xiàn)導(dǎo)航守衛(wèi)(navigation-guards)。這篇文章主要介紹了vue2.0 實(shí)現(xiàn)導(dǎo)航守衛(wèi)(路由守衛(wèi))的相關(guān)知識,需要的朋友可以參考下
    2018-05-05
  • vue中使用moment設(shè)置倒計時的方法

    vue中使用moment設(shè)置倒計時的方法

    這篇文章給大家介紹了vue中使用moment設(shè)置倒計時的方法,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Vue列表渲染v-for的使用案例詳解

    Vue列表渲染v-for的使用案例詳解

    這篇文章主要介紹了Vue列表渲染(v-for的使用),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論

长葛市| 搜索| 宁津县| 米泉市| 麟游县| 东光县| 平塘县| 甘洛县| 九江市| 交口县| 鲁甸县| 汶上县| 迁安市| 临澧县| 呼伦贝尔市| 康乐县| 阆中市| 汾阳市| 扶沟县| 台北市| 岳阳县| 洛扎县| 辰溪县| 堆龙德庆县| 汶川县| 香港 | 利津县| 南丰县| 穆棱市| 宜君县| 香河县| 四平市| 南丰县| 河南省| 东源县| 斗六市| 仙居县| 南溪县| 拉萨市| 漠河县| 五莲县|