微信小程序08 - 底層架構實現,啓用運行機制之MINA框架

目錄:

  1. 底層架構
  2. 小程序的運行機制

一、底層架構

小程序的開發框架稱爲MINA框架

在這裏插入圖片描述

View:視圖層 - 搭建視圖的結構和展現樣式
App Service:邏輯層 - 處理事務邏輯,數據交互的服務中心

  • Manager:邏輯處理部分的執行
  • API:底層提供的叫WAService.js文件來封裝各個api的接口,讓各個平臺的運行環境能通過API使用微信客戶端能力。

小程序只有一個app Service,並且整個生命週期常駐內存的,app Service 的線程加載App Service.

Native:系統層 - 裏面接入了微信客戶端的原生能力,小程序的視圖層和邏輯層是一個雙線程的通信,提供了數據傳輸和事件系統。

視圖層和邏輯層通過JSBridge進行通信,邏輯層將數據變化通知到視圖層,觸發視圖層的頁面更新,視圖層把觸發的事件通知給我們邏輯層然後邏輯層進行業務處理。

視圖層是怎麼將數據變化實時的展示出來呢?

首先WXML具有元素,屬性和文本的節點樹結構,在節點樹種每個節點都有個上下文的關係。所以在渲染WXML的時候,小程序的運行環境,會把WXML的節點樹轉化成js對象,(可以查下ast抽象語法樹的概念),在邏輯層發生數據變更的時候,需要通過app Service提供一個setData方法,把數據從邏輯層傳到視圖層,webView容器,在渲染節點內容的時候,會把我們傳過來的數據,進行一個前後的對比,差異,這個差異通過一個diff算法。然後把差異運用到原來的節點樹上,渲染出正確的ui界面。

WXS,WXML,WXSS 一起在UI線程中運行的。我們通常從服務器中請求下來數據會做一個轉換,或者做一個filter處理,我們把這些放到ui線程中做,就可以避免跨線程通信的消耗。

小程序的啓動運行機制
在這裏插入圖片描述

小程序啓動通過我們第一次打開會比較長,後續再次打開會比較快。

熱啓動:用戶打開過某個小程序,並且在一定時間內再次打開,不需要再次重新打開小程序,只是後臺切換到前臺

冷啓動:用戶第一次打開,或者小程序被微信主動銷燬後再次打開,此時小程序需要重新加載啓動。

什麼時候小程序被微信主動銷燬呢?

小程序進入後臺後,客戶端會幫我們在一定時間內維持小程序的一個狀態,超過這個時間, 就會被微信主動銷燬。這個時間目前是5分鐘

在短時間內2次收到系統告警微信會主動銷燬,- 5s

如果第一次打開,後面再打開,這個時候有版本更新,冷啓動如果發現有新版本會幫我們異步下載新版本的代碼包,並同時使用微信客戶端本地的包進行啓動,即新版本需要在下次才能打開使用。

二、小程序的運行機制

啓動流程圖

在這裏插入圖片描述
左側是啓動的時候,微信客戶端視圖層和邏輯層的交互邏輯和數據緩存的存取操作。

在小程序啓動的時候會像CDN請求最新的代碼包,第一次啓動的話,我們需要等到代碼包下載完畢,注入到webview容器內,執行後才能看到小程序的頁面,所以我們在網絡不好的情況,會感覺啓動時間會稍微長。

客戶端會幫我們把代碼包緩存到本地,當我們下次啓動的時候,會先從CDN上去請求是否有最新的版本的代碼包,這裏會有寫校驗邏輯, 由目前的代碼包會運行之前已經緩存好的代碼包,同時去異步下載最新的代碼包,讓我們在下次啓動的時候,使用這個最新的。

CDN:內容分發網絡,把請求的內容分發到最近的網絡節點服務器,提高用戶的訪問響應速度,以及成功率,解決一些帶寬,服務性所帶來的延遲問題。

小程序內,我們可以訪問第三方服務器,發起一個Ajax request ,服務器會返回一個JSON Data數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章