這篇文章給大家分享的是有關(guān)WebView加載優(yōu)化的方式的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
興賓網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),興賓網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為興賓上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的興賓做網(wǎng)站的公司定做!
WebView加載優(yōu)化
當(dāng)WebView的使用頻率變得頻繁的時(shí)候,對(duì)于其各方面的優(yōu)化就變得逐漸重要了起來(lái)。可以知道的是,我們每加載一個(gè) H5頁(yè)面,都會(huì)有很多的請(qǐng)求。除了HTML主URL自身的請(qǐng)求外,HTML外部引用的 JS、CSS、字體文件、圖片都是一個(gè)個(gè)獨(dú)立的HTTP 請(qǐng)求,雖然請(qǐng)求是并發(fā)的,但當(dāng)網(wǎng)頁(yè)整體數(shù)量達(dá)到一定程度的時(shí)候,再加上瀏覽器解析、渲染的時(shí)間,Web整體的加載時(shí)間變得很長(zhǎng)。同時(shí)請(qǐng)求文件越多,消耗的流量也會(huì)越多。那么對(duì)于加載的優(yōu)化就變得非常重要,這方面的經(jīng)驗(yàn)我也沒(méi)有什么別的,大概三個(gè)方面:
一個(gè),就是資源本地化的問(wèn)題
首先可以明確的是,以目前的網(wǎng)絡(luò)條件,通過(guò)網(wǎng)絡(luò)去服務(wù)器獲取資源的速度是遠(yuǎn)遠(yuǎn)比不上從本地讀取的。談?wù)摳鞣N優(yōu)化策略其實(shí)恰恰忽略了“需要加載”才是阻擋速度提升的最大絆腳石。所以我們的思路一,就是將一些較重的資源比如js、css、圖片甚至HTML本身進(jìn)行本地化處理,在每次加載到這些資源的時(shí)候,從本地讀取進(jìn)行加載,可以簡(jiǎn)單記憶為“存·取·更”。
1.“存”——將上述重量級(jí)資源打包進(jìn)apk文件,每次加載相應(yīng)文件時(shí)時(shí)從本地取即可。也可不打包,在第一次加載時(shí)以及接下來(lái)的若干間隔時(shí)間里動(dòng)態(tài)下載存儲(chǔ),將所有的資源文件都存在Android的asset目錄下;
2.“取”——重寫WebViewClient的WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)方法,通過(guò)一定的判別方法(例如正則表達(dá)式)攔截相應(yīng)的請(qǐng)求,從本地讀取相應(yīng)資源并返回;
3.“更”——建立起Cache Control機(jī)制,定期或使用API通知的形式控制本地資源的更新,保證本地資源是最新和可用的。
第二個(gè),就是緩存的問(wèn)題
倘若你不采用或不完全采用第一條資源本地化的思路,那么你的WebView緩存是必須要開啟的(雖然這一思路和第一條有重合的地方)。
WebSettings settings = webView.getSettings(); settings.setAppCacheEnabled(true); settings.setDatabaseEnabled(true); settings.setDomStorageEnabled(true);//開啟DOM緩存 settings.setCacheMode(WebSettings.LOAD_DEFAULT);
在網(wǎng)絡(luò)正常時(shí),采用默認(rèn)緩存策略,在緩存可獲取并且沒(méi)有過(guò)期的情況下加載緩存,否則通過(guò)網(wǎng)絡(luò)獲取資源以減少頁(yè)面的網(wǎng)絡(luò)請(qǐng)求次數(shù)。
這里值得提起的是,我們經(jīng)常在app里用WebView展示頁(yè)面時(shí),并不想讓用戶覺(jué)得他是在訪問(wèn)一個(gè)網(wǎng)頁(yè)。因?yàn)樘热粑覀兊腶pp里網(wǎng)頁(yè)非常多,而我們給用戶的感覺(jué)又都像在訪問(wèn)網(wǎng)頁(yè)的話,我們的app便失去了意義。(我的意思是為什么用戶不直接使用瀏覽器呢?)
所以這時(shí),離線緩存的問(wèn)題就值得我們注意。我們需要讓用戶在沒(méi)有網(wǎng)的時(shí)候,依然能夠操作我們的app,而不是面對(duì)一個(gè)和瀏覽器里的網(wǎng)絡(luò)錯(cuò)誤一樣的頁(yè)面,哪怕他能進(jìn)行的操作十分有限。
這里我的思路是,在開啟緩存的前提下,WebView在加載頁(yè)面時(shí)檢測(cè)網(wǎng)絡(luò)變化,倘若在加載頁(yè)面時(shí)用戶的網(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ò)正常時(shí)使用默認(rèn)緩存策略 } else { settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);//網(wǎng)絡(luò)不可用時(shí)只使用緩存 }
既然有緩存,就要有緩存控制,與一相似的是我們也要建立緩存控制機(jī)制,定期或接受服務(wù)器通知來(lái)進(jìn)行緩存的清空或更新。
第三個(gè),就是延遲加載和執(zhí)行js
在WebView中,onPageFinished()的回調(diào)意味著頁(yè)面加載的完成。但該方法會(huì)在JavScript腳本執(zhí)行完成后才會(huì)觸發(fā),倘若我們要加載的頁(yè)面使用了JQuery,會(huì)在處理完DOM對(duì)象,執(zhí)行完$(document).ready(function() {})后才會(huì)渲染并顯示頁(yè)面。這是不可接受的,所以我們需要對(duì)Js進(jìn)行延遲加載,當(dāng)然這部分是Web前端的工作。
感謝各位的閱讀!關(guān)于WebView加載優(yōu)化的方式就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
當(dāng)前題目:WebView加載優(yōu)化的方式
本文網(wǎng)址:http://www.rwnh.cn/article40/ihjgeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站收錄、外貿(mào)建站、網(wǎng)站改版、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)