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

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

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

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

        作為“為大型前端項目”而設計的前端框架,Angular 其實有許多值得參考和學習的設計,本系列主要用于研究這些設計和功能的實現原理。本文圍繞 Angular 的核心功能 Ivy 編譯器,介紹其中的增量 DOM 設計?!鞠嚓P教程推薦:《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號
        主站蜘蛛池模板: 人妻偷人精品成人AV| 久久99久久99精品免视看动漫| 亚洲午夜精品一级在线播放放 | 老司机午夜精品视频资源| 91大神精品全国在线观看| 精品无码久久久久久尤物| 一本之道av不卡精品| 国产三级精品三级在专区| 国产成人精品高清在线观看99| 亚洲国产精品成人精品无码区| 九九热这里只有国产精品| 四虎4hu永久免费国产精品| 国产欧美亚洲精品A| 无码精品A∨在线观看| 麻豆精品| 久久精品国产精品亚洲艾草网美妙 | 久久久久久无码国产精品中文字幕| 亚洲综合国产精品| 成人国内精品久久久久影院| 日韩精品久久无码中文字幕| 日韩精品欧美激情国产一区| 精品久久久久久无码国产| 自怕偷自怕亚洲精品| 国产亚洲欧洲精品| 999久久久无码国产精品 | 亚洲国产人成精品| 麻豆国内精品久久久久久| 国产精品自产拍高潮在线观看 | 2021国产成人精品久久| 久久国产精品成人免费| 国产成人精品免费视频大| 3D动漫精品一区二区三区| 久久99精品久久久久婷婷| 久久精品国产亚洲AV电影 | 自拍偷在线精品自拍偷无码专区 | 久久久国产乱子伦精品作者 | 无码精品蜜桃一区二区三区WW| 精品福利一区二区三区| 国产精品小黄鸭一区二区三区| 国产AⅤ精品一区二区三区久久| 99久re热视频这里只有精品6|