网易严选的wkwebview测试之路

本文来自网易云社区

作者:孙娇


UIWebView是苹果继承于UIView封装的一个加载web内容的类,它可以加载任何远端的web数据展示在你的页面上,你可以像浏览器一样前进后退刷新等操作。不过苹果在iOS8以后推出了WKWebView来加载Web。UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView是将会逐步取代笨重的UIWebView。且UIWebView存在占用过多内存,js执行效率低等问题。而WKWebView网页加载速度大有提升,占用更少内存。


WKWebView相比于UIWebView

  • WKWebView的内存远远没有UIWebView的开销大,没有缓存

  • 拥有高达60FPS滚动刷新率及内置手势

  • 支持了更多的HTML5特性

  • 高效的app和web信息交换通道

  • 允许JavaScript的Nitro库加载并使用,UIWebView中限制了

  • 提供加载网页进度的属性(estimatedProgress)

  • 将UIWebViewDelegate与UIWebView拆分成了14类与3个协议(以前很多不方便实现的功能得以实现:官方文档说明)

基于以上种种优势,严选APP在年后的第一个版本里实现了UIwebview到wkwebview的大步跨越,作为一名客户端的测试人员,我更加关注的主要是wkwebview的各大特性背后带来的测试点,以下就从测试的视角分析一下替换wkwebview之后,测试中遇到比较多的问题:


1、首先就是cookie的问题

以前UIWebView会自动去NSHTTPCookieStorage中读取cookie,但是WKWebView并不会去读取,因此导致cookie丢失以及一系列问题,在测试的过程中我们发现在一个活动页面触发了登录之后,返回该页面并没有同步到登录态的信息

c3f6fba2-cc08-4d29-88e8-b5349d575004

从上图可以看出,在app进行登录后,福利社的webview并没有同步获取相应的登录态,究其原因,主要原因是:WKWebView Cookie 问题在于 WKWebView 发起的请求不会自动带上存储于 NSHTTPCookieStorage 容器中的 Cookie(当然是开发解释给我听的),找到问题所在修改之后的表现:

9bb98cb1-5026-4a24-b0dd-82716380f62f

表现完美!


2、wkwebview的本地html页面加载失败

严选app内置了一份网络解决方案,如若检测到无网络状态可以查看这个本地页面进行网络的配置(主要是iOS10系统刚推出的时候,需要用户开启app启动网络的权限才能使用的问题),但是替换了wkwebview之后,无网络状态下本地的html网页无法加载,结果:

c70e5ea6-b8ac-4f26-9681-d450de8ffb3c

开发大大排查之后发现是wkwebview中加载的方法变了(wkwebview不支持用loadRequest的方法加载本地的静态HTML),要替换不同的方法来加载,修复之后的效果


3、wkwebview页面样式问题

在测试过程中,替换wkwebview之后,很多APP内的H5页面样式出现了兼容的问题,尤其是针对iPhone X的适配方面,对此我们只能全局查看各种H5页面,一一检查页面是否错乱,大部分页面的问题都是页面底部或者导航栏异常。

23ea46d3-896c-4723-9b6f-85dcaadca465?imageView&thumbnail=980x0

在测试的过程中我们遇到最多的问题就是上述三个问题,如果各位还有遇到其他的问题,欢迎补充。

除了测试中遇到的问题,测试完成之后,我们对wkwebview的性能也做了简单的统计,主要是为了对比wkwebview相比较于UIwebview的优势在哪里,我们针对两种不同的webview,在APP内进行一些正常用户行为的操作(浏览首页及其他页面,查看商品详情及评论图片,浏览活动及专题页面,登录查看购物车及下单等等),对比统计了内存的消耗占比。主要操作了三种机型(5s,7,6splus),三种操作系统(9,10,11)。

cec232cd-73b6-4b03-ba5c-b9289343a46c?imageView&thumbnail=980x0

从上图可以明显的看出来,wk在内存消耗方面还是有显著的提升的,尤其是针对性能较差的机器,如ios9系统的5s。

最后,WKWebView相较于UIWebView在整体上有较大的提升,满足OS上面使用同一套控件的功能,同时对整个内存的开销以及滚动刷新率和JS交互做了优化的处理。依据职责单一的原则,拆分成了三个协议去实现WebView的响应,解耦了JS交互和加载进度的响应处理。但是他有一个最致命的缺陷,就是WKWebView的请求不能被NSURLProtocol截获。而UIwebview可以让app对于H5容器使用NSURLProtocol技术将H5进行离线包的处理,H5的图片和Native的图片公用一套缓存,因此WKWebView是没有做缓存处理的,对网页需要缓存的加载性能要求没那么高的还是可以考虑UIWebView。

最最后,感谢开发大大的耐心指导及细心讲解webview背后的故事。


网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区


相关文章:
【推荐】 abtest-system后台系统设计与搭建

发布了651 篇原创文章 · 获赞 281 · 访问量 55万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览