對於UIWebView與WKWebview的理解
iOS有UIWebview和WKWebview兩種webview。從iOS13開始蘋果將UIWebview列為過期API。2020年4月起App Store將不再接受使用UIWebView的新App上架、2020年12月起將不再接受使用UIWebView的App更新。
在進行5+app開發中,從HBuilderX 2.2.5起,iOS上預設均已經是WKWebview,除非開發者手動在程式碼中指定要用UIWebview,否則實際渲染的頁面都是在WKWebview裡渲染的。不過,雖然實際頁面是WKWebview渲染的,但App底層引擎原始碼裡仍然有UIWebview的可選引用。Appstore的機審會發現二進位制程式碼中包括對UIWebview的引用,從而引發告警。
現在下面就來講解一下UIwebview以及WKwebview以及他們的區別。
UIwebview
UIWebView用於在App中嵌入網頁內容,通常情況下是html格式的網頁,也支援pdf, word等文件。
控制元件優點
-
可跨平臺
開發一次可以部署iOS、Android等平臺。 -
釋出更新快
在伺服器端釋出,能夠實時更新終端展示,便於快速升級以及緊急修復bug。 -
排版佈局能力強
強大的HTML+CSS讓人膜拜
控制元件缺點
-
效能
Native與HTML5爭論時最喜歡說的一句話就是:“你效能不行”。Web App執行在瀏覽器裡,瀏覽器的開放能力難以支援HTML5與Native對抗。 -
資料通訊複雜
UIWebView與App之間進行資料通訊只能通過javascript或者UIWebViewDelegate來進行,客戶端想傳引數給UIWebView修改網頁或者從網頁中獲取資料都比較複雜。
使用場景
-
排版複雜的內容
-
需後臺靈活控制的介面
-
原網頁
WKWebview
隨著IOS開發的應用,對於網頁嵌入也越來越多了,在IOS 8之前我們使用UIWebView展示詳情頁,自從IOS 8之後就出現了WKWebView,相比UIWebView,WKWebView優化了較多的體驗。
WKWebView優點
WKWebView採用跨程序方案,Nitro JS解析器,高達60fps的重新整理率,理論上效能和Safari比肩,而且對H5也實現了高度支援。
1.WKWebView的記憶體開銷比UIWebView小很多
2.內建手勢
3.支援了更多的HTML5特性
4.有Safari相同的JavaScript引擎
5.提供常用的屬性,如載入網頁進度的estimatedProgress屬性
兩者區別
UIWebview自iOS2就有,WKWebView從iOS8才有,毫無疑問WKWebView將逐步取代笨重的UIWebview。通過官方效能測試可以發現UIWebview佔用過多記憶體,且記憶體峰值更是誇張。WKWebView網頁載入速度也有提升,但是並不像記憶體那樣提升那麼多。
WKWebView是蘋果在WWDC2014釋出會中釋出IOS8的時候公佈WebKit時候使用的新型的H5容器。它與UIWebView相比較,擁有更快的載入速度和效能,更低的記憶體佔用。將UIWebViewDelegate和UIWebView重構成了14個類,3個協議,可以讓開發者進行更加細緻的配置。
但是他有一個最致命的缺陷,就是WKWebView的請求不能被NSURLProtocol截獲。
如上圖分別是UIWebview與WKWebView的流程,WKWebView的流程粒度更加細緻,不但在請求的時候會詢問WKWebView是否請求資料,還會在返回資料之後詢問WKWebView是否載入資料。
更多關於UIwebview與WKwebview的使用方法請訪問教程連結。