国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

WebView加載優化

missonce / 2539人閱讀

摘要:加載優化當的使用頻率變得頻繁的時候,對于其各方面的優化就變得逐漸重要了起來。第三個,就是延遲加載和執行在中,的回調意味著頁面加載的完成。這是不可接受的,所以我們需要對進行延遲加載,當然這部分是前端的工作。

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前端的工作。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73833.html

相關文章

  • 騰訊祭出大招VasSonic,讓你的H5頁面首屏秒開

    摘要:經過一系列優化后,在平臺上,點擊到頁面首屏展示的耗時從平均多降低為,優化以上。而現在頁面為了更好地為用戶推薦喜歡的內容,我們后臺引入機器學習和隨機算法來做智能個性化推薦。另外還有部分的內容是隨機算法推薦的。 VasSonic成長歷程 前言 2017.8.8 14時,SNG增值產品部Vas團隊研發的輕量級高性能Hybrid框架VasSonic通過了公司最終審核,作為騰訊開源組件分享給大...

    xzavier 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<