微信小程序底層原理與運行機制類文章學習

參考文檔

小程序底層實現原理及一些思考

  • 爲了安全和管控, 雙線程執行
  • Web Worker執行用戶的代碼; UI線程執行大部分的功能.
  • 示例圖

微信小程序架構原理

  • 只經過mvvm模板語法動態改變頁面, 不支持BOM操做
  • 編譯過程:
    • wcc可執行程序編譯.xml文件生成js腳本, js腳本在傳入正確路徑, 獲得了一個virtual dom樹.
  • WAWebview.js
    • wx下注冊是api, 最終都會調用WeixinJSBrige方法.
    • wxparser對象, 提供dom到wx element之間的映射, 元素操做管理, 事件功能管理
    • 部分組件使用原生代碼實現, 例如:wx-video, wx-canvas, wx-map, wx-textarea
    • native組件懸浮在webview之上, 大部分組件使用前端實現.
  • WeixinJSBridge
    • wx.request實際調用WeixinJSBridge, 區分瀏覽器環境調用.
  • WAService.js
    • wx API; APP(), Page(); 頁面具備做用域, 提供模塊化; 數據綁定; 事件分發; 生命週期; 路由;
  • 具體架構由兩個webview組成: UI層, Logic層
    • UI層運行在第一個webview中, 執行DOM操做和交互事件響應, 裏面是WAWebview代碼和編譯後內容
    • Logic層運行在獨立的JS引擎: ios: JavaScriptCore, android: x5, 開發工具: nwjs chrome內核
    • 邏輯層包括WAService.js代碼和業務
    • 兩層之間經過WeixinJSBridge, => ? (native) 之間進行交互
  • 示例圖

微信小程序架構分析 (上)

  • 一個程序有多個view, 也就是多個webview
  • 一個小程序只有一個service進程, 也是一個webview, 在程序生命週期內在後臺運行
  • 二者都經過WeixinJSBridge和後臺通訊
  • view模塊和service模塊均使用postMessage進行通訊
  • contentScript.js的代碼提供了message消息到chrome.runtime通訊接口的轉換

淺談小程序運行機制

  • 使用客戶端提供的JavaScript引擎, 沙箱只是單純的提供JavaScript解釋環境, 沒有瀏覽器任何接口
  • 小程序的基礎庫分別注入到視圖層和邏輯層運行
    • 視圖層: 提供各種組件來組建界面
    • 邏輯層: 提供各類API來處理邏輯
    • 處理數據綁定, 組件系統, 事件系統, 通訊系統等一系列框架
    • 基礎庫不會打包到某個小程序代碼, 會提早內置在微信客戶端
  • 基於shadow dom模型
  • 啓動機制
    • 熱啓動: 打開太小程序, 在必定時間內再次打開
    • 冷啓動: 首次打開或者被微信銷燬後打開
    • 沒有重啓概念
    • 進入後臺後, 維持一段時間的運行後被銷燬, 目前是五分鐘.
    • 短期(5s), 連續收到兩次系統內存告警, 會進行小程序銷燬.
  • 更新機制
    • 冷加載讀取緩存/檢查更新
    • 熱加載直接後臺切前臺
    • 冷啓動時發現有新版本, 會異步下載新版本的代碼包, 並同時用客戶端本地的包進行啓動
    • 即新版小程序發佈後, 須要經歷兩次冷啓動, 纔會應用
    • 若是須要新版本, 可使用指定API進行更新
  • 啓動與更新機制
  • setData
    • webview和jsCore是單獨模塊
    • 兩邊都經過evaluateJavaScript實現, 即用戶傳輸的數據.
    • 須要將其轉換成一份JS腳本, 經過執行腳本進行執行

小程序更新機制

  • 未啓動時更新
    • 微信客戶端有若干個時機檢查本地緩存的小程序有沒有新版本, 有靜默升級
    • 發佈新版本後, 沒法同步全部的用戶, 24小時, 同步全部新版本信息到用戶手機
    • 下次進行冷啓動時, 先更新最新版本再打開.
  • 啓動時更新
    • 每次冷啓動都會檢查更新, 異步下載最新的版本的代碼包, 但會用本地的包進行啓動
    • 新版本在下一次冷啓動時, 應用.

疑問

  • 爲何微信小程序兩個webview, 其中有給logic線程, 是跑在webview中, 怎麼沒有window對象?
  • 如何在某個操做系統寫引入JS解釋環境呢?
  • shadowdom是什麼?
相關文章
相關標籤/搜索