搜尋
首頁Javajava教程WebView載入最佳化的方法介紹

WebView載入最佳化的方法介紹

Mar 22, 2019 am 10:53 AM
androidjava

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

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用