我的手機(jī)里常駐瀏覽器是海豚,最近在使用的時(shí)候發(fā)現(xiàn)出現(xiàn)卡頓現(xiàn)象,讓使用體驗(yàn)變得非常不爽,大過年的閑來(lái)無(wú)聊就做了點(diǎn)測(cè)試。
癥狀:當(dāng)一個(gè)WebView在重復(fù)打開達(dá)數(shù)十次甚至上百次時(shí)整個(gè)頁(yè)面在滑動(dòng)時(shí)會(huì)出現(xiàn)非常明顯的卡頓現(xiàn)象。
解決方法:將WebView銷毀,重新創(chuàng)建一個(gè)即可消除卡頓,除此之外刷新WebView亦或是其他方法都無(wú)法消除卡頓。
為了了解其實(shí)際情況,我制作了一個(gè)簡(jiǎn)單的Demo,通過Xcode相關(guān)工具實(shí)際檢驗(yàn)來(lái)確定卡頓緣由。

我簡(jiǎn)單地創(chuàng)建了一個(gè)對(duì)照組,分別是UIWebView以及WKWebView制作的簡(jiǎn)易瀏覽器。
最開始我的想法是大量加載界面造成的卡頓可能是Safari內(nèi)核的問題,UIWebView及WKWebView在大量重復(fù)加載后可能都會(huì)出現(xiàn)卡頓現(xiàn)象,總不可能海豚瀏覽器還是在使用UIWebViewd吧哈哈哈……哈哈……哈……
在實(shí)驗(yàn)結(jié)束后我開始不確定是我的檢驗(yàn)手法出現(xiàn)問題還是海豚V9.3.0版本是使用UIWebView搭建的,本來(lái)我惡意地猜測(cè)是Safari內(nèi)核有問題或者在WebView內(nèi)部做了某些限制,在WebView大量重復(fù)使用后會(huì)限制什么東西,結(jié)果沒想到最大的可能居然只是UIWebView的問題,真是索然無(wú)味。
注:因?yàn)槭褂昧?xí)慣,我沒有太積極的升級(jí)版本的意愿,所以所有實(shí)驗(yàn)結(jié)論只限于海豚瀏覽器V9.3.0版本及以下,不過此次測(cè)試結(jié)論是與UIWeb與WKWeb相關(guān),基本算是無(wú)傷大雅……是嗎?
兩個(gè)對(duì)照組使用同樣的樣本進(jìn)行測(cè)試,測(cè)試設(shè)備為iPhone5S,版本為9.3.2,測(cè)試樣本為一本網(wǎng)絡(luò)小說的前200章。
通用的網(wǎng)絡(luò)小說的網(wǎng)頁(yè)模板可以高效率地進(jìn)行重復(fù)測(cè)試。左上按鈕是定制功能,在我獲取到準(zhǔn)備好的小說網(wǎng)站后根據(jù)網(wǎng)址規(guī)律自動(dòng)加載之后的網(wǎng)頁(yè),減少手動(dòng)工作,我以每10章節(jié)做一次記錄來(lái)對(duì)比資源占用率。
初始狀態(tài):


以上兩張分別是UIWebView在初始狀態(tài)下默認(rèn)加載小說首頁(yè)時(shí)靜止?fàn)顟B(tài)與滑動(dòng)狀態(tài)下的資源利用率,可以發(fā)現(xiàn)CPU占用不高,此時(shí)界面也屬于流暢狀態(tài)。


以上兩張分別是WKWebView的靜止?fàn)顟B(tài)及滑動(dòng)狀態(tài)的資源占有率,不得不說蘋果對(duì)WKKit的優(yōu)化做足了心,內(nèi)存占有根本不是一個(gè)級(jí)別的。
我們?cè)赪K的滑動(dòng)圖可以看出,此時(shí)兩者在滑動(dòng)狀態(tài)下的CPU使用率是相近的,而實(shí)際上兩者在初始狀態(tài)下滑動(dòng)手感也并無(wú)差別。
五十章節(jié)后:


可以看到,UIWebView的內(nèi)存占用減少了,這是因?yàn)檫M(jìn)入章節(jié)界面后圖片的減少,之后的數(shù)據(jù)中內(nèi)存占用大多保持在這一程度左右。而CPU在滑動(dòng)狀態(tài)下的占用率則是大大提升,并且峰值可以達(dá)到40%左右。


而相對(duì)的,WKWebView的占用率并沒有明顯提升。
此時(shí),UIWebView的網(wǎng)頁(yè)已經(jīng)可以感覺到少許的卡頓。
一百章節(jié)后:


UIWebView的界面已造成明顯卡頓現(xiàn)象,同時(shí),CPU的占用率在滑動(dòng)狀態(tài)下也達(dá)到50%以上(測(cè)試下峰值曾達(dá)到80%以上)


WK淡定地表示再來(lái)一百章。
兩百章后:


UIWebView因?yàn)榀偪窨D導(dǎo)致Demo 頁(yè)面長(zhǎng)時(shí)間凝滯,無(wú)法測(cè)試。
而此時(shí)WK依舊淡定。
結(jié)論:Just Fuck UIWebView.出現(xiàn)的卡頓現(xiàn)象只是UIWebView自身缺陷導(dǎo)致的CPU使用量暴增從而造成的卡頓,在不清楚蘋果在當(dāng)初設(shè)計(jì)UIWebView的時(shí)候做了什么而在WKKit中又修改了什么東西彌補(bǔ)了這部分缺陷的情況下這只是又一次老生常談,告訴大家拋棄UIWebView投向WKKit的懷抱。