不管我們對於小程序這種形態存在何種質疑,但不可否認已經融入到我們生活的方方面面,出門打車、掃碼、點外賣甚至收能量等等操作都是以小程序進行承載。背後的緣由是小程序足夠輕量、便捷、跨平臺等特點,為用戶提供瞭豐富的功能和優質的用戶體驗。
究其核心,小程序能夠擁有媲美原生體驗的重點在於快速渲染機制,其起到瞭至關重要的作用。這裡就探究下快速渲染機制的實現流程,以及雙線程渲染技術和 WebView 在其中發揮的作用。
小程序的快速渲染主要經歷以下四個階段:解析和編譯、預加載、頁面渲染和繪制與顯示。
當用戶打開小程序時,小程序框架首先對小程序的代碼進行解析和編譯。這一過程包括將小程序的代碼轉換成可執行的指令,並生成對應的數據結構,如頁面樹和組件樹。解析和編譯過程需要消耗一定的時間,但在後續的頁面渲染中能夠大大提高效率。
在解析和編譯完成後,小程序框架進行預加載。預加載是指在用戶進入具體頁面之前,提前加載可能需要使用的資源,如圖片、樣式文件等。通過預加載,小程序能夠在用戶切換頁面時減少加載時間,提高渲染速度。
當用戶進入具體頁面時,小程序框架將頁面樹和組件樹渲染到屏幕上。渲染過程包括計算每個組件的位置和尺寸、應用樣式和佈局,並生成最終的繪制指令。
小程序框架將渲染得到的繪制指令交給底層的圖形系統進行繪制。圖形系統會將指令轉換成圖像,並顯示在屏幕上。
在小程序的快速渲染中,雙線程技術起到瞭關鍵的作用。傳統的 web 開發中,頁面渲染和 JavaScript 的執行是在同一個線程中完成的,這就導致瞭渲染和 JavaScript 執行互相影響的問題。而小程序引入瞭雙線程技術,將渲染和邏輯分離到不同的線程中,從而提高瞭渲染的速度和效率。
這裡說到的雙線程技術包括渲染線程和邏輯線程。
渲染線程負責頁面的渲染和繪制工作,通過解析和編譯小程序的代碼,構建頁面樹和組件樹,並將其渲染到屏幕上。渲染線程與底層的圖形系統緊密配合,利用硬件加速等技術快速繪制頁面。通過將渲染任務分離到獨立的線程中,渲染線程可以專註於頁面的繪制,不受邏輯線程的影響,從而提高瞭渲染的效率。
界面渲染相關的任務全都在 WebView 線程裡執行,通過邏輯層代碼去控制渲染哪些界面。 一個小程序存在多個界面,所以渲染層存在多個 WebView 線程。
邏輯線程負責處理小程序的邏輯和交互。它執行小程序的 JavaScript 代碼,處理用戶的輸入和事件,並更新頁面的狀態。邏輯線程與渲染線程通過消息機制進行通信,當邏輯線程有新的指令或數據更新時,會將消息發送給渲染線程,觸發頁面的更新和重新渲染。通過將邏輯和渲染分離到不同的線程,邏輯線程能夠獨立執行,不會阻塞頁面的渲染,保證瞭小程序的快速響應和流暢的交互體驗。
雙線程技術的應用使得小程序在渲染和邏輯處理上能夠並行進行,提高瞭整體的渲染效率和用戶體驗。同時,通過消息機制的通信,實現瞭渲染和邏輯的解耦,使得開發者可以更加靈活地處理和優化小程序的渲染和邏輯代碼。
從雙線程技術我們可以看到存在 WebView 線程,但我們在寫小程序頁面視圖時,貌似並不關心 WebView,那 WebView 到底是個什麼東西?View 視圖層小程序幫我們做瞭什麼?
ef812cb7e5a99ae643b84cd91c31a37d
在小程序的快速渲染中,WebView 扮演瞭重要的角色。WebView 是一種在移動應用程序中嵌入網頁內容的組件,它提供瞭一個可以顯示網頁內容的容器。
小程序的頁面是通過 WebView 來顯示的。當用戶打開小程序或切換到不同的頁面時,小程序框架會將對應的頁面渲染到 WebView 中,使用戶可以看到頁面內容。WebView 提供瞭靈活的展示方式,可以支持小程序頁面的滾動、縮放等操作。
WebView 可以解析和執行小程序的代碼,將代碼轉換成可執行的指令。它提供瞭 JavaScript 執行環境,使得小程序可以運行和交互。通過 WebView,小程序可以實現動態的頁面更新和交互效果。
WebView 具有網絡訪問的能力,可以加載小程序中的網絡資源,如 HTML、CSS、JavaScript 文件、圖片等。通過網絡訪問,小程序可以獲取遠程數據,並將其展示在 WebView 中。WebView 的網絡訪問功能為小程序提供瞭與服務器交互和數據更新的能力。
WebView 在底層實現瞭小程序框架的各種功能,如數據綁定、事件處理、組件渲染等。它能夠根據小程序的邏輯和交互規則,將頁面內容正確地顯示給用戶。WebView 提供瞭與小程序框架的交互接口,使得小程序能夠與 WebView 進行通信和交互,實現數據的雙向綁定、事件的監聽和觸發等功能。
需要註意的是,由於 WebView 是一個嵌入式的組件,其性能和渲染能力也可能受到設備和瀏覽器的限制。因此,小程序框架通常會對 WebView 進行優化,以提高渲染速度和用戶體驗。例如,我們通過對小程序代碼進行預編譯、增量更新和緩存機制等優化措施,去減少 WebView 的解析和編譯時間,加快頁面的渲染速度。
小程序的快速渲染機制讓廣大的小程序開發者可以借助這些機制和技術,優化小程序的渲染性能,提供更加流暢的用戶體驗。
移動研發中越來越多產品格外重視用戶體驗的大背景下,小程序也成為重要業務承載利器。除瞭在微信、支付寶等平臺上架我們自有開發的小程序外,「原生+小程序」的開發模式也成為移動研發的另一選擇。可以讓自身的 App 像微信、支付寶一樣運行自有的小程序。
小程序容器技術能夠幫助企業或個人開發者讓自有的 App 具備小程序運行能力,隻需要通過集成 SDK 即能快速具備小程序能力。例如 FinClip SDK 極其輕量,支持微信小程序語法 WXML,也就是說微信小程序代碼可以直接在 FinClip中 復用,無需再二次開發,體驗與微信端保持一致。
我們一直在關註移動應用研發效率提升的同時,用戶對於應用的使用體驗關註度越來越高,如何做好應用的體驗也值得開發者重視。