虛擬DOM爲何出現以及性能問題

傳統的前端編程方式是命令式編程,即直接操縱DOM,告訴瀏覽器該怎麼幹。這樣的問題就是,大量的代碼被用於操作DOM元素,且代碼可讀性差,可維護性低。

而React、Vue這些數據驅動的前端框架的出現,將命令式編程變爲了函數式編程,從而大幅提升代碼的可讀性、可維護性。

這些框架縱然摒棄了直接操作DOM,我們只要關心數據的變動,DOM的操作由框架完成。但是這樣做帶來了一些性能問題。

在最原始的情況下,框架一旦發現數據發生了變動就對整個頁面進行更新。這樣的做法效率低下,因爲數據的變動而導致的頁面變動很可能只是局部的,直接對整個頁面進行更新造成了不必要的性能消耗。

所以人們很自然的就會想到將因數據變動而新生成的DOM結構與已經顯示出來的DOM結構進行比較,找出兩者的不同處,再對這些不同進行重新渲染即可。有的放矢,從而提升性能。

而那個僅在內存中未顯示出來的DOM結構就是所謂的虛擬DOM,找出兩者不同的算法就是Diff算法

不過需要注意的是,虛擬DOM和Diff算法的出現是爲了解決由命令式編程轉變爲函數式編程、數據驅動後所帶來的性能問題的。換句話說,直接操作DOM的性能並不會低於虛擬DOM和Diff算法,甚至還會優於

這麼說的原因是因爲Diff算法的比較過程,比較是爲了找出不同從而有的放矢的更新頁面。但是比較也是要消耗性能的。而直接操作DOM就是有的放矢,我們知道該更新什麼不該更新什麼,所以不需要有比較的過程。所以直接操作DOM效率可能更高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章