色婷亚洲五月

  • <pre id="idayz"></pre>

  • <td id="idayz"><option id="idayz"></option></td><table id="idayz"><ruby id="idayz"></ruby></table>
    <pre id="idayz"></pre><pre id="idayz"></pre>

      微信小程序的工作原理和優化技巧
      作者:上海網站優化 日期:2020-07-23
      小程序的視圖層目前使用 WebView 作為渲染載體,而邏輯層是由獨立的 JavascriptCore 作為運行環境。在架構上,WebView 和 JavascriptCore 都是獨立的模塊,并不具備數據直接共享的通道。當前,視圖層和邏輯層的數據傳輸,實際上通過兩邊提供的 evaluateJavascript 所實現。即用戶傳輸的數據,需要將其轉換為字符串形式傳遞,同時把轉換后的數據內容拼接成一份 JS 腳本,再通過執行 JS 腳本的形式傳遞到兩邊獨立環境。
       
      而 evaluateJavascript 的執行會受很多方面的影響,數據到達視圖層并不是實時的。
       
      常見的 setData 操作錯誤
       
      1. 頻繁的去 setData
       
      在我們分析過的一些案例里,部分小程序會非常頻繁(毫秒級)的去setData,其導致了兩個后果:
       
      Android 下用戶在滑動時會感覺到卡頓,操作反饋延遲嚴重,因為 JS 線程一直在編譯執行渲染,未能及時將用戶操作事件傳遞到邏輯層,邏輯層亦無法及時將操作處理結果及時傳遞到視圖層;
      渲染有出現延時,由于 WebView 的 JS 線程一直處于忙碌狀態,邏輯層到頁面層的通信耗時上升,視圖層收到的數據消息時距離發出時間已經過去了幾百毫秒,渲染的結果并不實時;
      2. 每次 setData 都傳遞大量新數據
       
      由setData的底層實現可知,我們的數據傳輸實際是一次 evaluateJavascript 腳本過程,當數據量過大時會增加腳本的編譯執行時間,占用 WebView JS 線程,
       
      3. 后臺態頁面進行 setData
       
      當頁面進入后臺態(用戶不可見),不應該繼續去進行setData,后臺態頁面的渲染用戶是無法感受的,另外后臺態頁面去setData也會搶占前臺頁面的執行。
      色婷亚洲五月
    1. <pre id="idayz"></pre>

    2. <td id="idayz"><option id="idayz"></option></td><table id="idayz"><ruby id="idayz"></ruby></table>
      <pre id="idayz"></pre><pre id="idayz"></pre>