不管我們對于小程序這種形態(tài)存在何種質疑,但不可否認已經(jīng)融入到我們生活的方方面面,出門打車、掃碼、點外賣甚至收能量等等操作都是以小程序進行承載。背后的緣由是小程序足夠輕量、便捷、跨平臺等特點,為用戶提供了豐富的功能和優(yōu)質的用戶體驗。
究其核心,小程序能夠擁有媲美原生體驗的重點在于快速渲染機制,其起到了至關重要的作用。這里就探究下快速渲染機制的實現(xiàn)流程,以及雙線程渲染技術和 WebView 在其中發(fā)揮的作用。
一、快速渲染實現(xiàn)流程
小程序的快速渲染主要經(jīng)歷以下四個階段:解析和編譯、預加載、頁面渲染和繪制與顯示。
1、解析和編譯
當用戶打開小程序時,小程序框架首先對小程序的代碼進行解析和編譯。這一過程包括將小程序的代碼轉換成可執(zhí)行的指令,并生成對應的數(shù)據(jù)結構,如頁面樹和組件樹。解析和編譯過程需要消耗一定的時間,但在后續(xù)的頁面渲染中能夠大大提高效率。
2、預加載
在解析和編譯完成后,小程序框架進行預加載。預加載是指在用戶進入具體頁面之前,提前加載可能需要使用的資源,如圖片、樣式文件等。通過預加載,小程序能夠在用戶切換頁面時減少加載時間,提高渲染速度。
3、頁面渲染
當用戶進入具體頁面時,小程序框架將頁面樹和組件樹渲染到屏幕上。渲染過程包括計算每個組件的位置和尺寸、應用樣式和布局,并生成最終的繪制指令。
4、繪制與顯示
小程序框架將渲染得到的繪制指令交給底層的圖形系統(tǒng)進行繪制。圖形系統(tǒng)會將指令轉換成圖像,并顯示在屏幕上。
二、雙線程技術的優(yōu)勢
在小程序的快速渲染中,雙線程技術起到了關鍵的作用。傳統(tǒng)的 web 開發(fā)中,頁面渲染和 JavaScript 的執(zhí)行是在同一個線程中完成的,這就導致了渲染和 JavaScript 執(zhí)行互相影響的問題。而小程序引入了雙線程技術,將渲染和邏輯分離到不同的線程中,從而提高了渲染的速度和效率。
這里說到的雙線程技術包括渲染線程和邏輯線程。
1、渲染線程
渲染線程負責頁面的渲染和繪制工作,通過解析和編譯小程序的代碼,構建頁面樹和組件樹,并將其渲染到屏幕上。渲染線程與底層的圖形系統(tǒng)緊密配合,利用硬件加速等技術快速繪制頁面。通過將渲染任務分離到獨立的線程中,渲染線程可以專注于頁面的繪制,不受邏輯線程的影響,從而提高了渲染的效率。
界面渲染相關的任務全都在 WebView 線程里執(zhí)行,通過邏輯層代碼去控制渲染哪些界面。 一個小程序存在多個界面,所以渲染層存在多個 WebView 線程。
2、邏輯線程
邏輯線程負責處理小程序的邏輯和交互。它執(zhí)行小程序的 JavaScript 代碼,處理用戶的輸入和事件,并更新頁面的狀態(tài)。邏輯線程與渲染線程通過消息機制進行通信,當邏輯線程有新的指令或數(shù)據(jù)更新時,會將消息發(fā)送給渲染線程,觸發(fā)頁面的更新和重新渲染。通過將邏輯和渲染分離到不同的線程,邏輯線程能夠獨立執(zhí)行,不會阻塞頁面的渲染,保證了小程序的快速響應和流暢的交互體驗。

雙線程技術的應用使得小程序在渲染和邏輯處理上能夠并行進行,提高了整體的渲染效率和用戶體驗。同時,通過消息機制的通信,實現(xiàn)了渲染和邏輯的解耦,使得開發(fā)者可以更加靈活地處理和優(yōu)化小程序的渲染和邏輯代碼。
三、WebView 線程的作用
從雙線程技術我們可以看到存在 WebView 線程,但我們在寫小程序頁面視圖時,貌似并不關心 WebView,那 WebView 到底是個什么東西?View 視圖層小程序幫我們做了什么?

在小程序的快速渲染中,WebView 扮演了重要的角色。WebView 是一種在移動應用程序中嵌入網(wǎng)頁內容的組件,它提供了一個可以顯示網(wǎng)頁內容的容器。
1、顯示小程序頁面
小程序的頁面是通過 WebView 來顯示的。當用戶打開小程序或切換到不同的頁面時,小程序框架會將對應的頁面渲染到 WebView 中,使用戶可以看到頁面內容。WebView 提供了靈活的展示方式,可以支持小程序頁面的滾動、縮放等操作。
2、解析和執(zhí)行小程序代碼
WebView 可以解析和執(zhí)行小程序的代碼,將代碼轉換成可執(zhí)行的指令。它提供了 JavaScript 執(zhí)行環(huán)境,使得小程序可以運行和交互。通過 WebView,小程序可以實現(xiàn)動態(tài)的頁面更新和交互效果。
3、提供網(wǎng)絡訪問功能
WebView 具有網(wǎng)絡訪問的能力,可以加載小程序中的網(wǎng)絡資源,如 HTML、CSS、JavaScript 文件、圖片等。通過網(wǎng)絡訪問,小程序可以獲取遠程數(shù)據(jù),并將其展示在 WebView 中。WebView 的網(wǎng)絡訪問功能為小程序提供了與服務器交互和數(shù)據(jù)更新的能力。
4、支持小程序框架的功能
WebView 在底層實現(xiàn)了小程序框架的各種功能,如數(shù)據(jù)綁定、事件處理、組件渲染等。它能夠根據(jù)小程序的邏輯和交互規(guī)則,將頁面內容正確地顯示給用戶。WebView 提供了與小程序框架的交互接口,使得小程序能夠與 WebView 進行通信和交互,實現(xiàn)數(shù)據(jù)的雙向綁定、事件的監(jiān)聽和觸發(fā)等功能。

需要注意的是,由于 WebView 是一個嵌入式的組件,其性能和渲染能力也可能受到設備和瀏覽器的限制。因此,小程序框架通常會對 WebView 進行優(yōu)化,以提高渲染速度和用戶體驗。例如,我們通過對小程序代碼進行預編譯、增量更新和緩存機制等優(yōu)化措施,去減少 WebView 的解析和編譯時間,加快頁面的渲染速度。
小程序的快速渲染機制讓廣大的小程序開發(fā)者可以借助這些機制和技術,優(yōu)化小程序的渲染性能,提供更加流暢的用戶體驗。
為了提升用戶使用體驗,「原生+小程序」的開發(fā)模式也成為移動研發(fā)的另一選擇。
小程序容器技術幫助開發(fā)者讓自有的 App 具備小程序運行能力,只需要通過集成 FinClip SDK 即能快速具備小程序能力。極其輕量,支持微信小程序語法 WXML,也就是說微信小程序代碼可以直接復用,無需再二次開發(fā),體驗與微信端保持一致。
我們一直在關注移動應用研發(fā)效率提升的同時,用戶對于應用的使用體驗關注度越來越高,如何做好應用的體驗也值得開發(fā)者重視。