H5页面秒开优化与实践

▼ 关注「之家前端共享」,获取更多技术干货 ▼

文章结尾有视频资料

1. 背景

3月份针对线上重点H5项目秒开进行治理,本文将逐步介绍如何通过H5页面的优化手段来提高 1.5 秒开率。

2. 为什么要优化

  • 从用户角度看,优化能够让页面加载得更快、对用户操作响应更及时,用户体验更良好,提升用户体验和降低用户流失率非常重要。其中 Global Web Performance Matters for ecommerce报告中也有具体说明优化的重要性。

  • 从企业角度看,优化能够减少页面请求数或者减小请求所占带宽,能够节省可观的资源成本,最终提高收益转化。

3. 优化目标

H5页面秒开优化与实践_第1张图片

从上图中可以看出,有些域名下可能低于90%,最高的也没达到96%,离既定98%的目标还有一定差距。

4. H5性能分析

  分析工具

    • Lighthouse

    • Chrome DevTools

    • gtmertrix 在线可视化分析工具 https://gtmetrix.com/

  Webview加载H5

通常情况分以下几个阶段

      1. Webview初始化。

      2. 到达新的页面,网络连接,从服务器下载html,css,js,页面白屏。

      3. 页面基本框架出现,js请求页面数据,页面处于loading状态。

      4. 出现所需的数据,完成整个页面的渲染,用户可交互。从图形直观看H5 启动过程:

      5. H5页面秒开优化与实践_第2张图片

如何缩短这些过程的时间,就成了优化 H5 性能的关键。接下来我们详细看一下各个阶段注意的优化点。

  优化方案

从以下几个方面入手:

    • 加载策略优化

    • 增加骨架屏

    • 资源请求优化(静态资源、图片以及 webp 、图片懒加载、组件按需加载)

    • 打包资源优化

    • CDN & 缓存

接下来就逐个分析

(1) 加载策略优化

先看一张图:

https://developers.google.com/web/fundamentals/primers/modules#module-vs-script

H5页面秒开优化与实践_第3张图片 从这张图里我们能看到什么,大致能总结为以下四点:

  • 默认情况:HTML解析,然后加载 JS,此时 HTML 解析中断,然后执行 JS,最后 JS执行完成并恢复 HTML解析。

  • defer情况下:HTML 和 JS 并驾齐驱,最后才执行 JS( js脚本在所有元素加载完成后执行,而且是按照js脚本声明的顺序执行,但要等到dom文档全部解析完才会被执行)。

  • async 情况下:HTML和 JS 并驾齐驱,JS 的执行可能在 HTML解析之前就已完成了 (js脚本是乱序执行的,不管你声明的顺序如何,只要某个js脚本加载完就立即执行)。

  • module情况下:与defer情况类似,只不过在提取的过程中会加载多个 JS 文件而已 (声明acript标签type="module"属性从而拥抱es6的模块导入导出语法, 加载也和defer差不多,只不过可以加载多个JS文件而已)

项目中实践示例:

e81456e6d99e4e53ace1f8f522169c30.png

H5页面秒开优化与实践_第4张图片

(2) 预加载

prefetch 和 preload

preload 是一个新的 Web 标准,在页面生命周期中提前加载你指定的资源,同时确保在浏览器的主要渲染机制启动之前。

具体使用如下:

 
   

                    
                    

你可能感兴趣的:(webview,android,java)