欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

iOS WKWebview 白屏检测实现的示例

程序员文章站 2022-06-26 14:15:34
前言 自ios8推出wkwebview以来,极大改善了网页加载速度及内存泄漏问题,逐渐全面取代笨重的uiwebview。尽管高性能、高刷新的wkwebview在混合开发中大放异彩表现优异,但加载网页过...

前言

    自ios8推出wkwebview以来,极大改善了网页加载速度及内存泄漏问题,逐渐全面取代笨重的uiwebview。尽管高性能、高刷新的wkwebview在混合开发中大放异彩表现优异,但加载网页过程中出现异常白屏的现象却仍然屡见不鲜,且现有的api协议处理捕捉不到这种异常case,造成用户无用等待体验很差。
    针对业务场景需求,实现加载白屏检测。考虑采用字节跳动团队提出的webview优化技术方案。在合适的加载时机对当前webview可视区域截图,并对此快照进行像素点遍历,如果非白屏颜色的像素点超过一定的阈值,认定其为非白屏,反之重新加载请求。

获取快照

    ios官方提供了简易的获取webview快照接口,通过异步回调拿到当前可视区域的屏幕截图。

其中snapshotconfiguration 参数可用于配置快照大小范围,默认截取当前客户端整个屏幕区域。由于可能出现导航栏成功加载而内容页却空白的特殊情况,导致非白屏像素点数增加对最终判定结果造成影响,考虑将其剔除。

缩放快照

为了提升检测性能,考虑将快照缩放至1/5,减少像素点总数,从而加快遍历速度。

缩小前后性能对比(实验环境:iphone11同一页面下):

缩放前白屏检测:

iOS WKWebview 白屏检测实现的示例

iOS WKWebview 白屏检测实现的示例

耗时20ms

缩放后白屏检测:

iOS WKWebview 白屏检测实现的示例

iOS WKWebview 白屏检测实现的示例

耗时13ms

     注意这里有个小坑。由于缩略图的尺寸在 原图宽高*缩放系数后可能不是整数,在布置画布重绘时默认向上取整,这就造成画布比实际缩略图大(混蛋啊 摔!)。在遍历缩略图像素时,会将图外画布上的像素纳入考虑范围,导致实际白屏页 像素占比并非100% 如图所示。因此使用floor将其尺寸大小向下取整。

遍历快照

    遍历快照缩略图像素点,对白色像素(r:255 g: 255 b: 255)占比大于95%的页面,认定其为白屏。

总结

仅需在合适的view生命周期内回调使用该函数方法即可检测出页面状态是否白屏,且性能损耗可忽略不计。

声明

作者:bbtime
链接:

以上就是ios wkwebview 白屏检测实现的示例的详细内容,更多关于ios wkwebview 白屏检测的资料请关注其它相关文章!