Copyright © 2017年ZaneWangWang. All rights reserved.
一.UIWebView和WKWebView介绍
UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并不像内存那样提升那么多。
1.自测加载阿里巴巴网页能存占有对比如下图:
使用WKWebView加载阿里巴巴网页前 使用WKWebView加载阿里巴巴网页后 使用WKWebView加载阿里巴巴网页返回后使用WKWebView加载网页后内存变化不大,使用WKWebView加载网页返回后内存变化也不大
使用UIWebView加载阿里巴巴网页前 使用UIWebView加载阿里巴巴网页后 使用UIWebView加载阿里巴巴网页返回后可以看出到这里使用UIWebView加载阿里巴巴网页导致内存飙升,返回后内存并没有很有效的♻️。
2.WKWebView相比UIWebView的其他优势如下几点:
a>.更多的支持HTML5的特性
b>.官方宣称滚动屏率高达60fps
c>.内置手势
d>.和系统Safari相同的JS引擎
e>.增加加载进度属性:estimatedProgress(比较常用)
f>.将UIWebViewDelegate和UIWebView进行拆分细化,了解更多查看官方文档
二.UIWebView和WKWebView使用
1.创建对比
UIWebView的创建
UIWebView *webView = [[UIWebView alloc] init];//直接创建,js交互基本也不需要设置什么
WKWebView的创建
WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuretion]; //需要传一个WKWebViewConfiguration的对象
注意:要给configuretion进行如下设置要不然js交互不能进行
configuretion.preferences.javaScriptCanOpenWindowsAutomatically = YES;
2.加载方法对比
a>.加载网页都是调用loadRequest:方法,没有什么不同,但是性能上边也说过,当然还是WKWebView性能要好
b>.加载h5字符串都是调用loadHTMLString:baseURL:方法
这里需要注意如果后台返回的h5字符串没有head,加载出来是没有适配的,显示不完全需要自己给h5字符串添加如下操作:
NSString *htmls = [NSString stringWithFormat:@" \n" " \n" "" ""
"window.onload = function(){\n"
"var $img = document.getElementsByTagName('img');\n"
"for(var p in $img){\n"
" $img[p].style.width = '100%%';\n"
"$img[p].style.height ='auto'\n"
"}\n"
"}"
"%@" "" "",h5Str];
在加载完成的代理方法中做一个如下的高度适配
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
webView.contentSize = CGSizeMake(webView.frame.size.width,height);
}
网友评论