| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 如何优化前端页面的LCP? -> 正文阅读 |
|
[JavaScript知识库]如何优化前端页面的LCP? |
1. 背景介绍hubble平台是陌陌内部的一个监控平台,hubble的前端项目采用Vue+Echarts+ElementUI编写,是典型的单页面应用。 随着项目的长期迭代导致项目体积愈来愈大,打开首屏速度缓慢,为了提升用户体验,了解用户的真实使用情况,引入了google推荐的页面性能指标测量sdk web-vitals, 并着重优化了LCP指标。 2. 什么是LCP?根据W3C Web性能工作组的讨论和Google的研究,发现度量页面主要内容的可见时间有一种精准且简单的方法,就是查看 “绘制面积” 最大的元素何时开始渲染。所谓绘制面积可以理解为每个元素在屏幕上的 “占地面积”,如果元素延伸到屏幕外,或者元素被裁切了一部分,被裁切的部分不算入在内,只有真正显示在屏幕里的才算数。最大内容绘制 (LCP, Largest Contentful Paint) 指标会根据页面首次开始加载的时间点来报告可视区域内可见的最大图像或文本块完成渲染的相对时间。因此能更真实的反馈用户实际体验。 ? 3. 哪些因素会影响LCP根据google的研究可以得到影响LCP主要有以下三个因素:
因此根据上述几个因素,展开了LCP的优化 4. 优化过程4.1 服务器响应速度缓慢浏览器从服务器接收内容所需的时间越长,在屏幕上渲染任何内容所需的时间就越长。服务器响应速度变快就能直接提升LCP。 于是我做了如下优化:
4.2 资源加载时间对于大部分网站的最大元素都是图片、视频等资源,如果能加速这些图片的加载,能有效改善LCP。但是对于hubble来说这部分资源几乎没有,因此也就无需做相关优化。 4.3 JavaScript 和 CSS 渲染阻塞在浏览器渲染任何内容之前,需要解析html,并生成dom树。html解析器会被任何同步脚本<script src="main.js"> 阻塞并暂停解析。因此阻塞渲染的时间也就成为优化的重点,具体工作分为如下两个方面:
4.3.1 延迟加载未使用的js文件 优化前hubble的项目打包分为两个文件hubble.js(包含业务逻辑)4.3M大小、vendor.js(包含外部依赖如 Echarts(绘制曲线)、ElementUI(提供表格等常用组件)等)2.8M大小,浏览器需要等待这两个js都下载好进行下一步渲染,所以这部分耗时取决于最大的js包的大小,找到了这部分优化的重点就开始着手优化,通过vue的路由懒加载机制,将hubble.js按照使用频次、功能模块拆分成多个较小的js文件,然后当路由被访问的时候才加载对应组件,这样就会更加高效。 4.3.2 最小化并压缩js文件 在优化好了hubble.js后发现,现在最大的js包是vendor.js,依旧采用拆分的逻辑把vendor.js拆成了echarts.js、vue.js、element.js等。随后发现原生的echarts.js包过于大,且很多绘图功能对于hubble看说是没有必要的,使用echarts官方的在线定制功能,仅选择了hubble需要的功能,最终构建出的依赖包从原始的1.7M降低至689KB提升明显,最后在启用gzip压缩,能将文件在传输过程中进一步压缩,至此完成优化。 5. 最终效果最终hubble的首次加载所需的最大js包由4.3M(gzip压缩后1.7M)缩小到现在的1.5M(gzip压缩后365kb),首次加载该js包耗时由1.82s降低至403ms(在办公网下测试,此结果受网络因素影响),LCP的P90指标从3.5s降低至1.78s,hubble首屏加载速度得到明显提升。 参考资料 [1] web-vitals一种用于衡量页面性能的工具 https://web.dev/learn-web-vitals/ [2] Largest Contentful Paint 最大内容绘制 (LCP) https://web.dev/lcp/ [3] HTTP/2简介 https://developers.google.com/web/fundamentals/performance/http2?hl=zh-cn [4] vue路由懒加载 https://router.vuejs.org/zh/guide/advanced/lazy-loading.html [5] Echarts 在线构建 https://echarts.apache.org/zh/builder.html ? |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:39:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |