首頁 Java java教程 WebView載入最佳化的方法介紹

WebView載入最佳化的方法介紹

Mar 22, 2019 am 10:53 AM
android java

這篇文章帶給大家的內容是關於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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

小米紅米 Note 14 Pro Plus 上市,成為首款配備 Light Hunter 800 相機的高通 Snapdragon 7s Gen 3 智慧型手機 小米紅米 Note 14 Pro Plus 上市,成為首款配備 Light Hunter 800 相機的高通 Snapdragon 7s Gen 3 智慧型手機 Sep 27, 2024 am 06:23 AM

Redmi Note 14 Pro Plus 現已正式成為去年 Redmi Note 13 Pro Plus 的直接後繼產品(亞馬遜售價 375 美元)。正如預期的那樣,Redmi Note 14 Pro Plus與Redmi Note 14和Redmi Note 14 Pro一起成為Redmi Note 14系列的主角。李

從早期圖片來看,Oppo Find X8 的設計看起來像是蘋果 iPhone 16 Pro 和 OnePlus Open 的結合體 從早期圖片來看,Oppo Find X8 的設計看起來像是蘋果 iPhone 16 Pro 和 OnePlus Open 的結合體 Sep 28, 2024 am 06:04 AM

從歷史上看,除了2018 年6 月發布的初代Find X 之外,Oppo 都會在冬末或初春更新其旗艦產品「Find X」系列。一點在此刻。 H

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

聯想公佈 2024 年 Legion Y700 遊戲平板電腦的新顏色選項 聯想公佈 2024 年 Legion Y700 遊戲平板電腦的新顏色選項 Sep 29, 2024 am 06:05 AM

聯想正準備在9月29日於中國推出2024款Legion Y700。這款新的 Android 遊戲平板電腦將與 RedMagic Nova 競爭,該公司已經確認了該設備的幾乎所有規格。現在,距離全面開賽還有幾個小時

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

三星 Galaxy Z Fold 特別版透露將於 10 月底登陸,但名稱出現衝突 三星 Galaxy Z Fold 特別版透露將於 10 月底登陸,但名稱出現衝突 Oct 01, 2024 am 06:21 AM

三星期待已久的「特別版」可折疊手機的推出又迎來了另一個轉折。最近幾週,有關所謂 Galaxy Z Fold 特別版的傳言相當安靜。相反,焦點已轉移到 Galaxy S25 系列,包括

如何在Spring Tool Suite中運行第一個春季啟動應用程序? 如何在Spring Tool Suite中運行第一個春季啟動應用程序? Feb 07, 2025 pm 12:11 PM

Spring Boot簡化了可靠,可擴展和生產就緒的Java應用的創建,從而徹底改變了Java開發。 它的“慣例慣例”方法(春季生態系統固有的慣例),最小化手動設置

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

See all articles