關於 WebView 的一些筆記

来源:http://www.cnblogs.com/iocool/archive/2017/06/14/7002835.html
-Advertisement-
Play Games

什麼是 WebView 是手機中內置了一款高性能 內核瀏覽器,在 中封裝的一個組件。沒有提供地址欄和導航欄, 只是單純的展示一個網頁界面。在開發中經常都會用到。 ps: 關於 WebView 的介紹,可以看這裡 "《談談 WebView 的使用》" 雖說 WebView 是安卓開發中設計的東西,但是 ...


什麼是 WebView

WebView 是手機中內置了一款高性能 webkit 內核瀏覽器,在 SDK 中封裝的一個組件。沒有提供地址欄和導航欄, WebView 只是單純的展示一個網頁界面。在開發中經常都會用到。

ps: 關於 WebView 的介紹,可以看這裡 《談談 WebView 的使用》

雖說 WebView 是安卓開發中設計的東西,但是作為一個前端開發人員,關註一些相關的東西還是有必要的.

性能的問題

WebView 是原生 APP 開發中的底層 SDK ,必然有性能上的問題,最直觀的感受是比原生的要慢.

APP 在打開一個頁面時,有以下的階段.

  1. WebView 初始化 ( 頁面無反應 )
  2. 建立連接,接收數據,數據初始化 ( 頁面無反應 -- 空白 )
  3. 頁面渲染,頁面 loading 中 ( 頁面 loading )
  4. 顯示頁面 ( 頁面展示 )

如圖:

WebView 初始化

APP 載入網頁與瀏覽器載入是有區別的,瀏覽器第一次打開,啟動的是瀏覽器內核,而 APP 首次載入網頁,首先是創建 WebView 實例.

分析

APPWebView 初始化期間,大致會分成以下的過程

首次初始化: 客戶端冷啟動後,第一次打開 WebView ,從開始創建 WebView 到開始建立網路連接.

二次初始化: 在打開過 WebView 後,退出 WebView ,再重新打開.

結論

作為前端開發工程師,統計頁面的打開時間,是以網路連接開始作為起點的.但是

WebView 中用戶感受到的打開時間會多 70~700ms.

之所以會有這樣的結果,原因在於:

  1. 在瀏覽器中,我們輸入地址時(甚至在之前),瀏覽器就可以開始載入頁面。
  2. 而在客戶端中,客戶端需要先花費時間初始化 WebView 完成後,才開始載入。

而這段時間,由於 WebView 還不存在,所有後續的過程是完全阻塞的。

優化

由於這段過程發生在 native 的代碼中,單純靠前端代碼是無法優化的;大部分的方案都是前端和客戶端協作完成,以下是幾個業界採用過的方案。

全局 WebView

方法:

在客戶端剛啟動時,就初始化一個全局的 WebView 待用,並隱藏;

當用戶訪問了 WebView 時,直接使用這個 WebView 載入對應網頁,並展示。

這種方法可以比較有效的減少 WebViewApp 中的首次打開時間。當用戶訪問頁面時,不需要初始化 WebView 的時間。

當然這也帶來了一些問題,包括:
  • 額外的記憶體消耗。
  • 頁面間跳轉需要清空上一個頁面的痕跡,更容易記憶體泄露。

【參考東軟專利 - 載入網頁的方法及裝置 CN106250434A

客戶端代理數據請求

方法:
  • 在客戶端初始化 WebView 的同時,直接由 native 開始網路請求數據;
  • 當頁面初始化完成後,向 native 獲取其代理請求的數據。

此方法雖然不能減小 WebView 初始化時間,但數據請求和 WebView 初始化可以並行進行,總體的頁面載入時間就縮短了;縮短總體的頁面載入時間:

【參考騰訊分享:70%以上業務由H5開發,手機QQ Hybrid 的架構如何優化演進?

還有其他各種優化的方式,不再一一列舉,總結起來都是圍繞兩點:

  1. 在使用前預先初始化好 WebView ,從而減小耗時。
  2. 在初始化的同時,通過 Native 來完成一些網路請求等過程,使得 WebView 初始化不是完全的阻塞後續過程。

WebView 性能優化總結

一個載入網頁的過程中,native 、網路、後端處理、CPU都會參與,各自都有必要的工作和依賴關係;讓他們相互並行處理而不是相互阻塞才可以讓網頁載入更快:

  • WebView 初始化慢,可以在初始化同時先請求數據,讓後端和網路不要閑著。
  • 後端處理慢,可以讓伺服器分 trunk 輸出,在後端計算的同時前端也載入網路靜態資源。
  • 腳本執行慢,就讓腳本在最後運行,不阻塞頁面解析。
  • 同時,合理的預載入、預緩存可以讓載入速度的瓶頸更小。
  • WebView 初始化慢,就隨時初始化好一個 WebView 待用。
  • DNS 和鏈接慢,想辦法復用客戶端使用的功能變數名稱和鏈接。
  • 腳本執行慢,可以把框架代碼拆分出來,在請求頁面之前就執行好。

前端開發中需要瞭解的關於 WebView 的內容不需要太多,以上基本瞭解大致的一個過程我個人覺得就足夠了,當然關於 WebView 內容不止這些.

文章轉載自: 美團點評技術團隊 WebView性能、體驗分析與優化


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ExtJs2.0好像不支持單選框組,因此用兩個name相同單選框來實現單選框組 var radio1 = new Ext.form.Radio({boxLabel:'男',name:'sex',id:'yes',inputValue:'0',width : 150, height : 20}); v ...
  • Java就是用來做項目的!Java的主要應用領域就是企業級的項目開發!要想從事企業級的項目開發,你必須掌握如下要點: 1、掌握項目開發的基本步驟 2、具備極強的面向對象的分析與設計技巧 3、掌握用例驅動、以架構為核心的主流開發方法 沒有人願意自己一輩子就滿足於掌握了一些代碼實現的技巧,別人告訴你要實 ...
  • 設計此種編碼是為了使二進位數據可以通過非純 8-bit 的傳輸層傳輸,例如電子郵件的內容就是通過base64轉碼後傳輸的。Base64-encoded後, 數據要比原始數據多占用 33% 左右的空間。 利用base64加密文件: 解密base64加密後的文件: 其實上面的操作還算不上加密,只要懂解碼 ...
  • 從現在開始,分享我讀過的技術文章。 ...
  • 一、擴展的功能 1、初始化時,會自動創建一個select標簽; 2、當改變select值時,日期也會自動改變,並且會調用apply按鈕的click事件 3、點擊此處進行預覽 4、github地址:https://github.com/lanleiming/daterangepicker-extend ...
  • [1]crypto [2]MD5 [3]Hmac [4]AES [5]Diffie-Hellman ...
  • 轉自:http://www.cnblogs.com/guohu/archive/2013/05/22/3092383.html /* * 預設轉換實現函數,如果需要其他功能,需自行擴展* 參數:* tableID : HTML中Table對象id屬性值* 詳細用法參見以下 TableToExcel ...
  • function getUrlParameter(strParame){ var args = new Object( ); var query = location.search.substring(1); var pairs = query.split("&"); for(var i = 0; ... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...