首頁  >  文章  >  Java  >  WebView載入最佳化的方法介紹

WebView載入最佳化的方法介紹

不言
不言轉載
2019-03-22 10:53:132789瀏覽

這篇文章帶給大家的內容是關於WebView載入優化的方法介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

WebView載入優化

當WebView的使用頻率變得頻繁的時候,對於其各方面的最佳化就變得逐漸重要了起來。可以知道的是,我們每載入一個 H5頁面,都會有很多的請求。除了HTML主URL本身的請求外,HTML外部引用的JS、CSS、字型檔案、圖片都是一個個獨立的HTTP 請求,雖然請求是並發的,但當網頁整體數量達到一定程度的時候,再加上瀏覽器解析、渲染的時間,Web整體的載入時間變得很長。同時請求文件越多,消耗的流量也會越多。那麼對於載入的最佳化就變得非常重要,這方面的經驗我也沒有什麼別的,大概三個面向:
一個,就是資源本地化的問題
首先可以明確的是,以目前的網路條件,透過網路去伺服器取得資源的速度是遠遠比不上從本機讀取的。談論各種優化策略其實恰恰忽略了「需要加載」才是阻擋速度提升的最大絆腳石。所以我們的思路一,就是將一些較重的資源比如js、css、圖片甚至HTML本身進行本地化處理,在每次加載到這些資源的時候,從本地讀取進行加載,可以簡單記憶為「存·取·更」。
1.「存」-將上述重量級資源打包進apk文件,每次載入對應文件時從本地取即可。也可不打包,在第一次載入時以及接下來的若干間隔時間裡動態下載存儲,將所有的資源檔案都存在Android的asset目錄下;
2.「取」-重寫WebViewClient的WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)方法,透過一定的判別方法(例如正規表示式)攔截對應的請求,從本機讀取對應資源並傳回;
3.「更」-建立起Cache Control機制,定期或使用API​​通知的形式控製本地資源的更新,保證本地資源是最新和可用的。
第二個,就是快取的問題
倘若你不採用或不完全採用第一條資源本地化的思路,那麼你的WebView快取是必須要開啟的(雖然這一思路和第一條有重合的地方)。

WebSettings settings = webView.getSettings(); 
settings.setAppCacheEnabled(true); 
settings.setDatabaseEnabled(true); 
settings.setDomStorageEnabled(true);//开启DOM缓存 
settings.setCacheMode(WebSettings.LOAD_DEFAULT);

在網路正常時,採用預設快取策略,在快取可取得且沒有過期的情況下載入緩存,否則透過網路取得資源以減少頁面的網路請求次數。
這裡值得提起的是,我們常在app裡用WebView展示頁面時,並不想讓使用者覺得他正在訪問一個網頁。因為倘若我們的app裡網頁非常多,而我們給用戶的感覺又都像在訪問網頁的話,我們的app便失去了意義。 (我的意思是為什麼使用者不直接使用瀏覽器呢?)
所以這時,離線快取的問題就值得我們注意。我們需要讓使用者在沒有網路的時候,依然能夠操作我們的app,而不是面對一個和瀏覽器裡的網路錯誤一樣的頁面,即使他能進行的操作十分有限。
這裡我的思路是,在開啟快取的前提下,WebView在載入頁面時偵測網路變化,倘若在載入頁面時使用者的網路突然斷掉,我們應當更改WebView的快取策略。

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
if(networkInfo.isAvailable()) { 
settings.setCacheMode(WebSettings.LOAD_DEFAULT);//网络正常时使用默认缓存策略 
} else { 
settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);//网络不可用时只使用缓存 
}

既然有緩存,就要有快取控制,與一相似的是我們也要建立快取控制機制,定期或接受伺服器通知來進行快取的清空或更新。
第三個,就是延遲載入和執行js
在WebView中,onPageFinished()的回呼意味著頁面載入的完成。但該方法會在JavScript腳本執行完成後才會觸發,倘若我們要載入的頁面使用了JQuery,會在處理完DOM對象,執行完$(document).ready(function() {})後才會渲染並顯示頁面。這是不可接受的,所以我們需要對Js進行延遲加載,當然這部分是Web前端的工作。

這篇文章到這裡就已經全部結束了,更多其他精彩內容可以關注PHP中文網的Java教學影片專欄!

以上是WebView載入最佳化的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除