大家好,我是Ellen,好久沒寫博客了,最近項目中需要對WebView進行優化,因此這裏就總結一下筆者在WebView優化過程中遇到的問題以及解決思路,我相信你只要認真看完,一定會有許許多多的收穫。按照慣例我們先來上一張腦圖:
1.Android中WebView的加載過程
我們先來通過一張圖看看WebView的加載過程:
可以從圖中看到WebView在第一次啓動的時候是需要進行初始化的,然後經過和服務器溝通階段,此階段WebView一直白屏,接着纔會渲染出來,因此對於一個普通的用戶而言,經歷了以下幾個階段:
- 1.交互無反饋
- 2.到達新的頁面,頁面白屏
- 3.頁面基本框架出現,但是沒有數據;頁面處於loading狀態
- 4.出現所需的數據
爲什麼WebViw加載沒有原生那麼快界面顯示出來呢?經過反覆查看上方WebView的加載過程,你會發現,WebView主要耗時是在初始化和服務器進行數據請求,在通過這兩個過程之後WebView纔會將界面渲染出來,那麼我們如何進行優化呢?
WebView優化思路:
1.讓WebView的初始化過程提前準備。
2.資源不讓WebView進行請求,在WebVie進行預備工作時候請求html數據(並行思維)
接下來,我們來看看如何實現這兩個思路:
2.讓WebView的初始化過程提前準備
筆者這裏的思路就是當開啓應用進入到主界面時,就把WebView準備好,當其它界面需要用到時,就將這個準備好的WebView交給它,交給它的同時再去準備下一個,這樣預準備過程就悄無聲息的提前準備了,頁面就會加載的很快,但是隨即而來的是另外一個問題,那就是內存佔用問題,所以如果app裏面WebView的界面較多,建議採用複用思維(例如:使用複用池的思維進行復用)進行封裝。筆者這裏已經封裝了一套WebViewCachePool
感謝以下文章的指點:
WebView性能、體驗分析與優化(美團技術團隊)
有贊webview加速平臺探索與建設(三)——html加速(有贊技術團隊)