UIWebView和WKWebView使用(一)

Copyright © 2017年ZaneWangWang. All rights reserved.


一.UIWebView和WKWebView介绍

       UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并不像内存那样提升那么多。

1.自测加载阿里巴巴网页能存占有对比如下图:

UIWebView和WKWebView使用(一)_第1张图片
使用WKWebView加载阿里巴巴网页前


UIWebView和WKWebView使用(一)_第2张图片
使用WKWebView加载阿里巴巴网页后
UIWebView和WKWebView使用(一)_第3张图片
使用WKWebView加载阿里巴巴网页返回后

使用WKWebView加载网页后内存变化不大,使用WKWebView加载网页返回后内存变化也不大

UIWebView和WKWebView使用(一)_第4张图片
使用UIWebView加载阿里巴巴网页前
UIWebView和WKWebView使用(一)_第5张图片
使用UIWebView加载阿里巴巴网页后
UIWebView和WKWebView使用(一)_第6张图片
使用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);

}

你可能感兴趣的:(UIWebView和WKWebView使用(一))