首先diff演算法肯定是要對於虛擬dom進行操作的,如果不了解虛擬dom,可以去搜一搜理解理解,虛擬dom生成真實dom的流程。
要知道渲染真實dom的開銷是很大的,比如有時候我們修改了某個資料,如果直接渲染到真實dom上會引起整個dom樹的重繪和重排,有沒有可能我們只更新我們修改的那一小塊dom而不要更新整個dom呢?diff演算法能夠幫助我們。
我們先根據真實dom生成一顆 virtual dom ,當 virtual dom 某個節點的資料改變後會生成乙個新的 vnode ,然後 vnode 和 oldvnode 作對比,發現有不一樣的地方就直接修改在真實的dom上,然後使 oldvnode 的值為 vnode 。
diff的過程就是呼叫名為 patch 的函式,比較新舊節點,一邊比較一邊給 真實的dom 打補丁。
在前端的框架和document文件的dom操作不難看出,前端很多的體系架構都是以樹形的架構進行搭建的,包括元件化也是生成乙個元件樹,到最後在轉化為真是的dom樹,追本溯源,了解原因以後不難看出,元件中的結構也是樹形的結構,如下圖
因此在操作虛擬dom的時候才會出現diff演算法和優化diff演算法的問題,如何去判斷需要改變的樹枝以及如何操作它才是diff演算法所需要優化的地方
了解了概念詳細的請看
虛擬DOM和diff演算法的分析理解
一 dom和虛擬dom 我是文字 p div var vnode 二 虛擬dom的設計思想 虛擬dom的核心思想是 對複雜的文件dom結構,提供一種方便的工具,進行最小化地dom操作。提供一種方便的工具,使得開發效率得到保證 保證最小化的dom操作,使得執行效率得到保證 根據虛擬dom樹最初渲染成真...
vue的diff演算法理解
diff演算法作用 用來修改dom的一小段,不會引起dom樹的重繪diff演算法實現的原理 diff演算法將virtual dom的某個節點資料改變後生成的新的vnode與舊節點進行比較,並替換為新的節點,具體過程就是呼叫patch方法,比較新舊節點,一邊比較一邊給真實的dom打補丁進行替換func...
對於KMP演算法的理解
資料結構課,講至kmp演算法,由於是下午,昏昏欲睡,故,聽得如雲如霧,煙水迷濛。咀嚼書本,思路似乎捋直,卻又不甚清晰,於是細細寫下此文,欲以自明。先來看一下bf 演算法的匹配過程 從上圖不難看出,bf就是 窮舉 窮舉固然沒有錯漏,但論及效率,實在不是我們的首選演算法。那麼kmp呢?他對bf演算法的改...