WebView加載優(yōu)化的方式-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)WebView加載優(yōu)化的方式的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)公司專注于彰武企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站定制開發(fā)。彰武網(wǎng)站建設(shè)公司,為彰武等地區(qū)提供建站服務(wù)。全流程專業(yè)公司,專業(yè)設(shè)計,全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

WebView加載優(yōu)化

當(dāng)WebView的使用頻率變得頻繁的時候,對于其各方面的優(yōu)化就變得逐漸重要了起來??梢灾赖氖?,我們每加載一個 H5頁面,都會有很多的請求。除了HTML主URL自身的請求外,HTML外部引用的 JS、CSS、字體文件、圖片都是一個個獨(dú)立的HTTP 請求,雖然請求是并發(fā)的,但當(dāng)網(wǎng)頁整體數(shù)量達(dá)到一定程度的時候,再加上瀏覽器解析、渲染的時間,Web整體的加載時間變得很長。同時請求文件越多,消耗的流量也會越多。那么對于加載的優(yōu)化就變得非常重要,這方面的經(jīng)驗(yàn)我也沒有什么別的,大概三個方面:
一個,就是資源本地化的問題
首先可以明確的是,以目前的網(wǎng)絡(luò)條件,通過網(wǎng)絡(luò)去服務(wù)器獲取資源的速度是遠(yuǎn)遠(yuǎn)比不上從本地讀取的。談?wù)摳鞣N優(yōu)化策略其實(shí)恰恰忽略了“需要加載”才是阻擋速度提升的大絆腳石。所以我們的思路一,就是將一些較重的資源比如js、css、圖片甚至HTML本身進(jìn)行本地化處理,在每次加載到這些資源的時候,從本地讀取進(jìn)行加載,可以簡單記憶為“存·取·更”。
1.“存”——將上述重量級資源打包進(jìn)apk文件,每次加載相應(yīng)文件時時從本地取即可。也可不打包,在第一次加載時以及接下來的若干間隔時間里動態(tài)下載存儲,將所有的資源文件都存在Android的asset目錄下;
2.“取”——重寫WebViewClient的WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)方法,通過一定的判別方法(例如正則表達(dá)式)攔截相應(yīng)的請求,從本地讀取相應(yīng)資源并返回;
3.“更”——建立起Cache Control機(jī)制,定期或使用API通知的形式控制本地資源的更新,保證本地資源是最新和可用的。
第二個,就是緩存的問題
倘若你不采用或不完全采用第一條資源本地化的思路,那么你的WebView緩存是必須要開啟的(雖然這一思路和第一條有重合的地方)。

WebSettings settings = webView.getSettings(); 
settings.setAppCacheEnabled(true); 
settings.setDatabaseEnabled(true); 
settings.setDomStorageEnabled(true);//開啟DOM緩存 
settings.setCacheMode(WebSettings.LOAD_DEFAULT);

在網(wǎng)絡(luò)正常時,采用默認(rèn)緩存策略,在緩存可獲取并且沒有過期的情況下加載緩存,否則通過網(wǎng)絡(luò)獲取資源以減少頁面的網(wǎng)絡(luò)請求次數(shù)。
這里值得提起的是,我們經(jīng)常在app里用WebView展示頁面時,并不想讓用戶覺得他是在訪問一個網(wǎng)頁。因?yàn)樘热粑覀兊腶pp里網(wǎng)頁非常多,而我們給用戶的感覺又都像在訪問網(wǎng)頁的話,我們的app便失去了意義。(我的意思是為什么用戶不直接使用瀏覽器呢?)
所以這時,離線緩存的問題就值得我們注意。我們需要讓用戶在沒有網(wǎng)的時候,依然能夠操作我們的app,而不是面對一個和瀏覽器里的網(wǎng)絡(luò)錯誤一樣的頁面,哪怕他能進(jìn)行的操作十分有限。
這里我的思路是,在開啟緩存的前提下,WebView在加載頁面時檢測網(wǎng)絡(luò)變化,倘若在加載頁面時用戶的網(wǎng)絡(luò)突然斷掉,我們應(yīng)當(dāng)更改WebView的緩存策略。

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
if(networkInfo.isAvailable()) { 
settings.setCacheMode(WebSettings.LOAD_DEFAULT);//網(wǎng)絡(luò)正常時使用默認(rèn)緩存策略 
} else { 
settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);//網(wǎng)絡(luò)不可用時只使用緩存 
}

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

感謝各位的閱讀!關(guān)于WebView加載優(yōu)化的方式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享標(biāo)題:WebView加載優(yōu)化的方式-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://muchs.cn/article34/dhiope.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、建站公司、電子商務(wù)、網(wǎng)站收錄、虛擬主機(jī)移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)