站長資訊網
最全最豐富的資訊網站

Angular學習之淺析Ivy編譯器中的增量DOM

本篇文章進行來學習Angular框架,帶大家了解一下Ivy編譯器中的增量DOM,希望對大家有所幫助!

Angular學習之淺析Ivy編譯器中的增量DOM

作為“為大型前端項目”而設計的前端框架,Angular 其實有許多值得參考和學習的設計,本系列主要用于研究這些設計和功能的實現原理。本文圍繞 Angular 的核心功能 Ivy 編譯器,介紹其中的增量 DOM 設計。【相關教程推薦:《angular教程》】

在介紹前端框架的時候,我常常會介紹到模板引擎。對于模板引擎的渲染過程,像 Vue/React 這樣的框架里,使用了虛擬 DOM 這樣的設計。

在 Angular Ivy 編譯器中,并沒有使用虛擬 DOM,而且使用了增量 DOM。

增量 DOM

在 Ivy 編譯器里,模板編譯后的產物與 View Engine 不一樣了,這是為了支持單獨編譯、增量編譯等能力。

比如,<span>My name is {{name}}</span>這句模板代碼,在 Ivy 編譯器中編譯后的代碼大概長這個樣子:

// create mode if (rf & RenderFlags.Create) {   elementStart(0, "span");   text(1);   elementEnd(); } // update mode if (rf & RenderFlags.Update) {   textBinding(1, interpolation1("My name is", ctx.name)); }

可以看到,相比于 View Engine 中的elementDef(0,null,null,1,'span',...),elementStart()elementEnd()這些 API 顯得更加清爽,它們使用的便是增量 DOM 的設計。

增量 DOM vs 虛擬 DOM

虛擬 DOM 想必大家都已經有所了解,它的核心計算過程包括:

  • 用 JavaScript 對象模擬 DOM 樹,得到一棵虛擬 DOM 樹。

  • 當頁面數據變更時,生成新的虛擬 DOM 樹,比較新舊兩棵虛擬 DOM 樹的差異。

  • 把差異應用到真正的 DOM 樹上。

雖然虛擬 DOM 解決了頁面被頻繁更新和渲染帶來的性能問題,但傳統虛擬 DOM 依然有以下性能瓶頸:

  • 在單個組件內部依然需要遍歷該組件的整個虛擬 DOM 樹
  • 在一些組件整個模版內只有少量動態節點的情況下,這些遍歷都是性能的浪費
  • 遞歸遍歷和更新邏輯容易導致 UI 渲染被阻塞,用戶體驗下降

針對這些情況,React 和 Vue 等框架也有

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国内精品久久久久影院日本| 2021国产精品露脸在线| 精品国产自在现线久久| 久久99久久99精品免观看| 亚洲人成国产精品无码| 日韩毛片高清在线看| 四虎精品视频在线永久免费观看 | 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲精品国产高清在线观看| 国产精品尹人在线观看| 日韩免费视频观看| 亚洲日韩国产精品乱| 国产精品无码一区二区三区毛片| 国产精品免费网站| 日本中文字幕在线精品| 久久九九亚洲精品| 国产精品无码无在线观看| 久久精品无码av| 久久99精品久久久久久9蜜桃| 亚洲日韩欧洲无码av夜夜摸| 国产99精品在线观看| 国产伦精品一区二区三区无广告| 精品国产乱码久久久久软件 | 亚洲国产精品18久久久久久 | 日韩欧美一区二区三区免费观看 | 亚洲精品白浆高清久久久久久 | 精品日韩亚洲AV无码一区二区三区| 99精品国产高清一区二区三区 | 12345国产精品高清在线| 99久久99久久久99精品齐| 无码国产精品一区二区免费模式| 国产探花在线精品一区二区| 最新在线精品国自av| 99精品国产高清一区二区三区 | 亚洲国产福利精品一区二区| 精品无码国产污污污免费网站 | 老色鬼在线精品视频| 亚洲国产精品成人午夜在线观看| 久草热8精品视频在线观看| 亚洲国产午夜精品理论片在线播放| 精品国产yw在线观看|