冷門前端知識,介紹雙執行緒的小程式!

陝西優就業發表於2019-04-30

小程式的渲染層和邏輯層分別由2個執行緒理:渲染層的介面使用了WebView進行渲染,邏輯層採用JsCore執行緒執行JS指令碼。為什麼要這麼設計呢?跟 陝西優就業 小編一起看看吧!

管控和安全,為了解決這些問題,我們需要阻止開發者使用一些瀏覽器提供的,諸如跳轉頁面、操作 DOM、動態執行指令碼的開放性介面。

我們可以使用客戶端系統的JavaScript引擎,iOS下的JavaScriptCore 框架,安卓下騰訊x5核心提供的 JsCore環境。透過提供一個沙箱環境來執行開發者的JavaScript程式碼來解決。這個沙箱環境只提供純JavaScript的解釋執行環境,沒有任何瀏覽器相關介面。

這就是小程式雙執行緒模型的由來:

1.邏輯層:建立一個單獨的執行緒去執行JavaScript,在這個環境下執行的都是有關小程式業務邏輯的程式碼

2.渲染層:介面渲染相關的任務全都在WebView執行緒裡執行,透過邏輯層程式碼去控制渲染哪些介面。一個小程式存在多個介面,所以渲染層存在多個WebView執行緒

雙執行緒通訊:

把開發者的JS邏輯程式碼放到單獨的執行緒去執行,但在Webview執行緒裡,開發者就沒法直接操作DOM。那要怎麼去實現動態更改介面呢?

前面我們知道,邏輯層和渲染層的通訊會由 Native 做中轉,邏輯層傳送網路請求也經由Native轉發。這是不是意味著,我們可以把 DOM 的更新透過簡單的資料通訊來實現呢?

Virtual DOM 相信大家都已有了解,大概是這麼個過程:用 JS 物件模擬 DOM 樹 -> 比較兩棵虛擬 DOM 樹的差異 -> 把差異應用到真正的 DOM 樹上。

在渲染層把 WXML 轉化成對應的JS物件。

在邏輯層發生資料變更的時候,透過宿主環境提供的setData方法把資料從邏輯層傳遞到Native,再轉發到渲染層。

經過對比前後差異,把差異應用在原來的DOM樹上,更新介面。

我們透過把WXML轉化為資料,透過Native進行轉發,來實現邏輯層和渲染層的互動和通訊。而這樣完整的一套框架,基本上都是透過小程式的基礎庫來完成的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902581/viewspace-2642983/,如需轉載,請註明出處,否則將追究法律責任。

相關文章