在知乎上有一個(gè)問(wèn)題:“前端開(kāi)發(fā)中有什么經(jīng)典的輪子值得自己去實(shí)現(xiàn)一遍?”。問(wèn)題下有很多前端界大佬的回答。其中,尤大的回答中很簡(jiǎn)單:Virtual-DOM。本文就來(lái)看看 Virtual-DOM 是什么,并分享一些可參考的實(shí)現(xiàn)案例。
Virtual-DOM 即虛擬 DOM,它是對(duì)真實(shí) DOM 的一個(gè)內(nèi)存中的抽象表示。在前端開(kāi)發(fā)中,當(dāng)需要更新頁(yè)面時(shí),傳統(tǒng)的直接操作 DOM 的方式可能會(huì)非常低效,因?yàn)?DOM 操作本身就很昂貴。虛擬 DOM 的引入允許在一個(gè)輕量級(jí)的 JavaScript 對(duì)象(即虛擬 DOM)上進(jìn)行更改,然后通過(guò)一種高效的比較算法(如 React 的 Diff 算法)來(lái)確定哪些更改需要實(shí)際應(yīng)用到真實(shí)的 DOM 上。這樣可以大大減少不必要的 DOM 操作,從而顯著提高頁(yè)面渲染性能。
目前,很多主流前端框架都使用了虛擬 DOM 技術(shù),比如:React、Vue、Preact。
Million.js 是一個(gè)完整的并且經(jīng)過(guò)微調(diào)和優(yōu)化的虛擬 DOM 庫(kù),減少了 Diff 的開(kāi)銷,其宣稱可以使 React 的組件渲染速度提高 70%。這個(gè)項(xiàng)目在 Github 上已獲得 15.5看 Star,值的學(xué)習(xí)。
Github:https://github.com/aidenybai/million。
Snabbdom 是一個(gè)輕量級(jí)且高效的虛擬 DOM 庫(kù),它允許開(kāi)發(fā)者以函數(shù)的形式來(lái)表達(dá)程序視圖,同時(shí)提供了靈活且可拓展的模塊化結(jié)構(gòu)。Snabbdom 的核心代碼非常簡(jiǎn)潔,大約只有200行,理解起來(lái)比較簡(jiǎn)單。
Github:https://github.com/snabbdom/snabbdom。
這是虛擬 DOM 的一個(gè)很經(jīng)典的實(shí)現(xiàn),在 Github 上擁有 11.6k Star。
Github:https://github.com/Matt-Esch/virtual-dom。
blockdom 自稱是世界上最快的虛擬 DOM 庫(kù),它通過(guò)獨(dú)特的按塊而非按元素進(jìn)行差異計(jì)算的方法,顯著提升了渲染速度。這種設(shè)計(jì)使得 blockdom 能夠高效直接復(fù)制整塊內(nèi)容,從而極大地簡(jiǎn)化了 diff 過(guò)程,并因虛擬 DOM 樹(shù)的大幅精簡(jiǎn)而進(jìn)一步提升了性能。
Github:https://github.com/ged-odoo/blockdom。
Maquette 是一個(gè)純粹而簡(jiǎn)單的虛擬 DOM 庫(kù)。
Github:https://github.com/AFASSoftware/maquette。
簡(jiǎn)介:一個(gè)極簡(jiǎn)的虛擬 DOM 庫(kù)。
Github:https://github.com/yelouafi/petit-dom。
本文鏈接:http://www.tebozhan.com/showinfo-26-91686-0.html尤雨溪:這個(gè)前端經(jīng)典輪子值得去造!
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: C#開(kāi)源實(shí)用的工具類庫(kù),集成超過(guò)1000多種擴(kuò)展方法
下一篇: 開(kāi)放創(chuàng)新,生態(tài)共贏|第四屆網(wǎng)絡(luò)開(kāi)源技術(shù)生態(tài)大會(huì)盛大召開(kāi)!