WKWebview 加载过程中的性能指标图解

背景 讨论 WKWebview 在加载 h5 页面时,Objective-C里的 WKNavigationDelegate、window.performance.timing、WKUserScriptInjectionTimeAtDocumentStart、WKUserScriptInjectionTimeAtDocumentEnd,以及和前端最常用的document.readystate\domContentLoaded\document.onload 事件等时间维度的关系,为native和前端在相互调用时,能够明确沟通的时机。 图解 普通的200请求,注意先看图例 本次数据采集的页面是 https://mp.weixin.qq.com/s/X_WDv1-vqdXYcg0eLpMAhA, ​ ​ 带有302跳转的页面 ​ ​ 本次数据采集的页面是 https://lq.163.com/platform/wap/entry?merchantCode=M32412338855&before_login=1 请求出错时的序列 本次数据采集的页面是 https://hite.me,出错原因是因为证书不正确。 ​ ​ 对比,结论 1. 首先注意几个等价事件。 didStartProvisionalNavigation = navigationStart didCommitNavigation = domLoading  =  WKUserScriptInjectionTimeAtDocumentStart,此时刚刚开始创建 DOM WKUserScriptInjectionTimeAtDocumentEnd = domContentLoade = document.readystate = interactive,此时 CSSOM 和 DOM 都已经构建完毕,等待图片资源等下载 didFinishNavigation = domComplete = […]

Read more

探索 messageHandler 的传输性能极限

本次测试的目标是 iOS 8+ 之后提供的 WKWebview 提供的 JS 和 Native 通讯机制之 messageHandler,比较浅显的探索下它各方面的极限。 测试 Demo ##主要的测试场景包括 1. messageHandler 可传输的数据类型有哪些? 2. 以字符串为例,messageHandler 最多可传输多少字节? 3. 承接 2,在不同量级下的传输效果(是否丢失、速度等)如何? 4. 如果是 native 向 WKWebview 传输数据,是否有类似的表现? 5. 探索使用 messageHandler 的最佳方法。 ##测试方法 1. 测试设备,iPhone XR 模拟器,Xcode 10.2 2. 硬件,MacBook Pro (13-inch, 2016),Mem 16 […]

Read more

objc 中最好的多行字符串声明方式

1. 问题 在 AppHost.framework【注1】(以下简称 AppHost) 的编码中,需要处理很多预先导入到 webview 里的 js 文件,有一些不关键功能是用 .js 的文件读到内存的,还有一些比较短小的 js 源码,如; (function(e){ e.setAttribute(‘src’,’%@’); document.getElementsByTagName(‘body’)[0].appendChild(e); })(document.createElement(‘script’)); 要写到代码里和 objc 代码一起。还有,在 AppHost 里,有个 ah_doc 模块,在编写注释时,需要输出完整的 js 代码,如 window.appHost.invoke(‘startNewPage’, { ‘url’: ‘http://you.163.com/’,’title’: ‘title’, ‘type’: “push”, ‘backPageParameter’: { ‘url’: ‘http://qian.163.com’, ‘title’: ‘title’, ‘type’: ‘push’ } }) 这个字符串里包含了大量的单引号、双引号,而且为了保持可读性、维护性,需要多行输出。 […]

Read more