本文来自网易云社区

作者:孙娇

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丢失以及一系列问题,在测试的过程中我们发现在一个活动页面触发了登录之后,返回该页面并没有同步到登录态的信息

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

表现完美!

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

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

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

3、wkwebview页面样式问题

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

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

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

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

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

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

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

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

相关文章:
【推荐】 使用 Prometheus + Grafana 对 Kubernetes 进行性能监控的实践
【推荐】 Dubbo与HadoopRPC的区别
【推荐】 基于开源,强于开源,轻舟微服务解决方案深度解读

网易严选的wkwebview测试之路的更多相关文章

  1. app接入网易严选:webview注入js的几个坑

    消费贷款app"一刻千金"接入网易严选总结 主要任务列表 隐藏相关元素 商品列表页跳转事件绑定 获取商品信息(skuid比较复杂) 隐藏元素 这部分没什么好讲的,使用原生js的do ...

  2. 一步一步 copy163: 网易严选 ---- vue-cli

    面试点 组件间通信 生命周期函数 路由 - 参数 - 重定向 vuex 参考 网易严选商城小程序全栈开发,域名备案中近期上线(mpvue+koa2+mysql) 小程序服务端源码地址 小程序源码地址 ...

  3. Taro 多端开发的正确姿势:打造三端统一的网易严选(小程序、H5、React Native)

    笔者所在的趣店 FED 早在去年 10 月份就已全面使用 Taro 框架开发小程序(当时版本为 1.1.0-beta.4),至今也上线了 2 个微信小程序.2 个支付宝小程序. 之所以选用 Taro, ...

  4. 基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)

    界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+ThinkJS+MySQL 计划添加基于Vue.js的后台管 ...

  5. 【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)

    本文来自网易云社区 作者:孙娇 严选iOS客户端的现有打包方式是通过远程连接打包机执行脚本去打包,打完包会输出相应的ipa的二维码,扫一扫二维码可以安装,但是随着测试队伍的壮大,外包同学越来越多,在打 ...

  6. 妹纸对网易严选的Bra是什么评价?

    声明:这是一篇超级严肃的技术文章,请本着学习交流的态度阅读,谢谢! 一.网易商品评论爬取 1.评论分析 进入到网易严选官网,搜索“文胸”后,先随便点进一个商品. 在商品页面,打开 Chrome 的控制 ...

  7. 用 Python 分析网易严选 Bra 销售信息,告诉你她们真实的 Size

    今天通过爬虫数据进行分析,一起来看看网易严选商品评论的获取和分析. 声明:这是一篇超级严肃的技术文章,请本着学习交流的态度阅读,谢谢! !   ​ 网易商品评论爬取 分析网页 评论分析 进入到网易严选 ...

  8. DevOps 时代的高效测试之路

    10 月 22 日,2021 届 DevOps 国际峰会在北京顺利召开,来自国内外的顶级技术专家共同畅谈 DevOps 体系与方法.过程与实践.工具与技术.CODING 测试及研发流程管理产品总监程胜 ...

  9. 用 Python 爬取网易严选妹子内衣信息,探究妹纸们的偏好

    网易商品评论爬取 分析网页 评论分析 进入到网易精选官网,搜索“文胸”后,先随便点进一个商品. 在商品页面,打开 Chrome 的控制台,切换至 Network 页,再把商品页Python入门到精通学 ...

随机推荐

  1. rtmp聊天相关归总

    使用共享对象(SharedObject)来开发时时文字聊天其实是很简单的. SharedObject可以跟踪和广播消息,连接到SharedObject中的其中任何一个客户端改变了SharedObjec ...

  2. UNIX网络编程——客户/服务器心搏函数 (转)

    下面是关于回送客户和服务器程序开发一些简单的心搏函数.这些函数可以发现对端主机或到对端的通信路径的过早失效.         在给出这些函数之前我们必须提出一些警告.首先,有人会想到使用TCP的保持存 ...

  3. jq 遍历 each方法

    1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function  ...

  4. Spring 学习记录4 ResourceLoader

    ResourceLoader Spring的ApplicationContext继承了ResourceLoader接口.这个接口主要就是可以加载各种resource.. 接口还是比较简单的: /* * ...

  5. 找不到 org/springframework/dao/support/PersistenceExceptionTranslator

    如果用的spring2  则原因是缺少spring-dao.jar 如果用的是spring3(我就栽这儿了) 则原因是缺少org.springframework.transaction-3.0.4.R ...

  6. 动态添加一列到DataTable的第一列

    dt.Columns.Add("ROWNUM", typeof(Int64));dt.Columns["ROWNUM"].SetOrdinal(0);

  7. kubernetes 集群安全配置

    版本:v1.10.0-alpha.3 openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -subj & ...

  8. Spark 性能相关参数配置详解-Storage篇

    随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 本文试图通过阐述这其中部分参数的工作原理和配置思路, 和大家一起探讨一下如何根据实际场合对Spark进行配置优化. 由于篇 ...

  9. iOS单选和全选

    在日常开发中单选.多选.全选经常遇到,所以写一个demo放上来供大家参考, 先看效果图: Demo地址:https://github.com/domanc/SingleAndAllSelect.git

  10. TF录像存储专项测试

    测试环境 移动设备:小米4C 移动设备版本:Android 5.1 IPC版本号:0.1.4110_10.1.1.1.3948 安居小宝版本:Version:2.0.1 测试网络:IPC使用WIFI网 ...