一般来说,WebView 渲染需要经过下面几个步骤
而 loadFinish 实际上是在页面加载完毕阶段,而 DOM 构建完成时页面结构就已经基本渲染完成,所以从用户真实体验的角度出发,我们以 DOM 结构构建完成(即 domReady)的时间点作为页面加载完成时间点。
原先:
优化后:
还能不能更快一点呢?当然能!
为了提高页面的加载速度,客户端通过一定的策略去预加载新闻数据,这样在理想状态下用户进入页面时看到页面时就可以直接使用缓存的数据,用户在看新闻的时候可以实现完全离线化,避免受到网络的影响。
所以在详情页中,我们会将图片和视频等非文字内容通过原生组件的方式放在客户端进行渲染,既可以提高渲染效率,也可以减少不必要的流量消耗。
原生化渲染还有一个好处,图片越来越成为文章体验的重要部分,对于多图文章,我们在 Feed 页面也可以智能加载详情页需要的图片,增加用户的文章首屏体验。
而在 Android 中,我们采用的是自研内核 WebView,也会遇到一些奇奇怪怪的坑。
当然不管是 iOS 和 Android, WebView 加载的逻辑都比较复杂,有时候怎么重试也无法成功,这个时候我们会直接降级到加载线上的详情页,优先保证用户的体验。
限于篇幅原因,我们还做了很多其他事情,包括请求精简,push 文章预拉取,数据注入的方式优化等等,也做了很多其他的方向的探索,这里不做展开,希望有机会能再分享给大家。
最后总结一下我们在优化详情页打开速度之后的一些想法