本文來自網易雲社區html
做者:孫嬌ios
UIWebView是蘋果繼承於UIView封裝的一個加載web內容的類,它能夠加載任何遠端的web數據展現在你的頁面上,你能夠像瀏覽器同樣前進後退刷新等操做。不過蘋果在iOS8之後推出了WKWebView來加載Web。UIWebView自iOS2就有,WKWebView從iOS8纔有,毫無疑問WKWebView是將會逐步取代笨重的UIWebView。且UIWebView存在佔用過多內存,js執行效率低等問題。而WKWebView網頁加載速度大有提高,佔用更少內存。web
WKWebView相比於UIWebView瀏覽器
WKWebView的內存遠遠沒有UIWebView的開銷大,沒有緩存緩存
擁有高達60FPS滾動刷新率及內置手勢cookie
支持了更多的HTML5特性網絡
高效的app和web信息交換通道app
容許JavaScript的Nitro庫加載並使用,UIWebView中限制了性能
提供加載網頁進度的屬性(estimatedProgress)測試
將UIWebViewDelegate與UIWebView拆分紅了14類與3個協議(之前不少不方便實現的功能得以實現:官方文檔說明)
基於以上種種優點,嚴選APP在年後的第一個版本里實現了UIwebview到wkwebview的大步跨越,做爲一名客戶端的測試人員,我更加關注的主要是wkwebview的各大特性背後帶來的測試點,如下就從測試的視角分析一下替換wkwebview以後,測試中遇到比較多的問題:
一、首先就是cookie的問題
之前UIWebView會自動去NSHTTPCookieStorage中讀取cookie,可是WKWebView並不會去讀取,所以致使cookie丟失以及一系列問題,在測試的過程當中咱們發如今一個活動頁面觸發了登陸以後,返回該頁面並無同步到登陸態的信息
從上圖能夠看出,在app進行登陸後,福利社的webview並無同步獲取相應的登陸態,究其緣由,主要緣由是:WKWebView Cookie 問題在於 WKWebView 發起的請求不會自動帶上存儲於 NSHTTPCookieStorage 容器中的 Cookie(固然是開發解釋給我聽的),找到問題所在修改以後的表現:
表現完美!
二、wkwebview的本地html頁面加載失敗
嚴選app內置了一份網絡解決方案,如若檢測到無網絡狀態能夠查看這個本地頁面進行網絡的配置(主要是iOS10系統剛推出的時候,須要用戶開啓app啓動網絡的權限才能使用的問題),可是替換了wkwebview以後,無網絡狀態下本地的html網頁沒法加載,結果:
開發大大排查以後發現是wkwebview中加載的方法變了(wkwebview不支持用loadRequest的方法加載本地的靜態HTML),要替換不一樣的方法來加載,修復以後的效果
三、wkwebview頁面樣式問題
在測試過程當中,替換wkwebview以後,不少APP內的H5頁面樣式出現了兼容的問題,尤爲是針對iPhone X的適配方面,對此咱們只能全局查看各類H5頁面,一一檢查頁面是否錯亂,大部分頁面的問題都是頁面底部或者導航欄異常。
在測試的過程當中咱們遇到最多的問題就是上述三個問題,若是各位還有遇到其餘的問題,歡迎補充。
除了測試中遇到的問題,測試完成以後,咱們對wkwebview的性能也作了簡單的統計,主要是爲了對比wkwebview相比較於UIwebview的優點在哪裏,咱們針對兩種不一樣的webview,在APP內進行一些正經常使用戶行爲的操做(瀏覽首頁及其餘頁面,查看商品詳情及評論圖片,瀏覽活動及專題頁面,登陸查看購物車及下單等等),對比統計了內存的消耗佔比。主要操做了三種機型(5s,7,6splus),三種操做系統(9,10,11)。
從上圖能夠明顯的看出來,wk在內存消耗方面仍是有顯著的提高的,尤爲是針對性能較差的機器,如ios9系統的5s。
最後,WKWebView相較於UIWebView在總體上有較大的提高,知足OS上面使用同一套控件的功能,同時對整個內存的開銷以及滾動刷新率和JS交互作了優化的處理。依據職責單一的原則,拆分紅了三個協議去實現WebView的響應,解耦了JS交互和加載進度的響應處理。可是他有一個最致命的缺陷,就是WKWebView的請求不能被NSURLProtocol截獲。而UIwebview可讓app對於H5容器使用NSURLProtocol技術將H5進行離線包的處理,H5的圖片和Native的圖片公用一套緩存,所以WKWebView是沒有作緩存處理的,對網頁須要緩存的加載性能要求沒那麼高的仍是能夠考慮UIWebView。
最最後,感謝開發大大的耐心指導及細心講解webview背後的故事。
網易雲免費體驗館,0成本體驗20+款雲產品!
更多網易研發、產品、運營經驗分享請訪問網易雲社區。
相關文章:
【推薦】 SpringBoot入門(二)——起步依賴