亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WebView加載優化的方式

發布時間:2020-10-27 10:30:51 來源:億速云 閱讀:140 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關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前端的工作。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

恩平市| 忻州市| 钟山县| 武川县| 兰坪| 塔城市| 手游| 油尖旺区| 阿巴嘎旗| 桓仁| 通江县| 枝江市| 青阳县| 长治县| 蓬溪县| 铜鼓县| 两当县| 锡林浩特市| 西乌| 克东县| 凤凰县| 顺义区| 固镇县| 丹寨县| 和平区| 巴林左旗| 金溪县| 昌乐县| 仁寿县| 大足县| 浦县| 太湖县| 仙游县| 和龙市| 怀仁县| 朔州市| 湟中县| 襄樊市| 丹东市| 玛曲县| 吉安市|