簡體   English   中英

Glimmer VM與虛擬dom有何不同?

[英]How is Glimmer VM different from a virtual dom?

所以我最近開始研究ember js,特別是它的微光渲染引擎,並試圖了解它是如何工作的。

所以我的理解是,Glimmer VM是一個虛擬機,可以模擬實際的DOM並執行函數來對其進行更新。 雖然vdom維護DOM狀態的內部表示,但是glimmer VM沒有這樣的狀態,而是執行兩組線性指令 - 一組用於模板的初始渲染,第二組用於更新元素。 這種方法的主要好處是,這種方式我們可以完全繞過JS的解析/編譯瓶頸,只需將二進制文件發送到客戶端,然后執行glimmer vm。 我說得對嗎?

如果只是將模板的語言從JS或文本更改為二進制字節碼,Glimmer不會繞過下載/解析/編譯,因此下載它的速度要小得多,下載速度要快得多,而且解析/編譯由Glimmer VM完成而不是具有簡單語法的JS VM,其解析和執行速度非常快,將來VM也可以移動到WebAssembly以使其更快。

Glimmer VM只是執行字節碼的VM,但是處理狀態的是Glimmer,所以當它想要渲染組件時,它需要該組件模板並在VM中執行模板字節碼。 渲染模板程序並生成更新程序字節碼,並將其存儲在與組件相關聯的位置,因此當組件需要重新渲染時,只在VM中執行更新程序。 在虛擬Dom環境中更新調用功能,修改虛擬dom,然后立即或當繪制系統滴答(批量更新)時,它將虛擬dom與前一個dom相區別並更新需要更新的節點。

虛擬DOM在反應中很有意義,因為它不使用模板,組件JSX被轉換為JS代碼,使用react api與DOM交互(檢查這一點 )。

Angular Ivy(Angular的新視圖引擎)似乎與Glimmer相似,因為它確實創建了某種常春藤代碼而不是完整的JS,但它並沒有像Glimmer那樣創建更新程序。 (不確定這是我從周圍發現的常春藤文章中得到的結果)。

Glimmer和Angular執行類似於Virtual DOM的操作,但在組件級別,它們控制更改並僅重新呈現已更改其數據的組件。 主要區別在於Glimmer已經知道繪制了什么並執行了以前生成的更新模板字節碼而不是拆卸和完整渲染。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM