1. 背景介绍

hubble平台是陌陌内部的一个监控平台,hubble的前端项目采用Vue+Echarts+ElementUI编写,是典型的单页面应用。

随着项目的长期迭代导致项目体积愈来愈大,打开首屏速度缓慢,为了提升用户体验,了解用户的真实使用情况,引入了google推荐的页面性能指标测量sdk web-vitals, 并着重优化了LCP指标。

2. 什么是LCP?

根据W3C Web性能工作组的讨论和Google的研究,发现度量页面主要内容的可见时间有一种精准且简单的方法,就是查看 “绘制面积” 最大的元素何时开始渲染。所谓绘制面积可以理解为每个元素在屏幕上的 “占地面积”,如果元素延伸到屏幕外,或者元素被裁切了一部分,被裁切的部分不算入在内,只有真正显示在屏幕里的才算数。最大内容绘制 (LCP, Largest Contentful Paint) 指标会根据页面首次开始加载的时间点来报告可视区域内可见的最大图像或文本块完成渲染的相对时间。因此能更真实的反馈用户实际体验。

3. 哪些因素会影响LCP

根据google的研究可以得到影响LCP主要有以下三个因素:

  1. 服务器响应速度缓慢

  2. 资源加载时间

  3. JavaScript 和 CSS 渲染阻塞

因此根据上述几个因素,展开了LCP的优化

4. 优化过程

4.1 服务器响应速度缓慢

浏览器从服务器接收内容所需的时间越长,在屏幕上渲染任何内容所需的时间就越长。服务器响应速度变快就能直接提升LCP。

于是我做了如下优化:

  1. 对于响应较慢的、使用频次较高的接口进行优化,主要是将变化较少的数据添加缓存、耗时较大的统计查询交由定时任务计算等。

  2. 配合SA升级http协议到HTTP2.0来提升响应速度,这部分的提升主要来源于协议升级带来的新特性:多路复用、标头压缩等 ( 扩展阅读:https://developers.google.com/web/fundamentals/performance/http2?hl=zh-cn )

4.2 资源加载时间

对于大部分网站的最大元素都是图片、视频等资源,如果能加速这些图片的加载,能有效改善LCP。但是对于hubble来说这部分资源几乎没有,因此也就无需做相关优化。

4.3 JavaScript 和 CSS 渲染阻塞

在浏览器渲染任何内容之前,需要解析html,并生成dom树。html解析器会被任何同步脚本<script src="main.js"> 阻塞并暂停解析。因此阻塞渲染的时间也就成为优化的重点,具体工作分为如下两个方面:

  1. 延迟加载未使用的js文件

  2. 最小化并压缩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


如何优化前端页面的LCP?相关推荐

  1. 前端页面的SEO(搜索引擎)优化小技巧

    今天就写点前端的东西吧.我们都知道,搜索引擎用一些网络爬虫,跟踪网页中的链接和内容,通过对抓取的文件的分析,写入数据库.用户输入关键字搜索时,就会通过与数据库的信息比较,来展示相应的网站.也就是说搜索 ...

  2. seo网站推广优化,网站页面的SEO优化怎么做

    很多人都会做网站优化,但这样的优化基本上都是集全网站的力量优化几个关键词.那么,如果说网站有很多关键词,想要让每一个页面都可以带有关键词,又该怎么样去操作呢?网络优化那点事儿今天就带大家去了解,如何从 ...

  3. 在前端页面的js中对string去空格

    想要在前端页面(jsp.html等)的javascript中对string去空格:使用正则表达式 假设str为要去除空格的字符串: <script >去除所有空格: str = str.r ...

  4. 前端页面的pdf导出(h2c,jsPDF)

    import jsPDF from 'jsPDF' import html2canvas from 'html2canvas' //需要引入这两个必要的依赖const exportPdf = () = ...

  5. php中seo优化怎么做,SEO技术:对于PHP页面的SEO优化

    PHP是一个快速的服务器端语言,通常用于创建MySQL的相关性和新鲜的名称和作出简单的修改,同时其相当多的脚本,使用PHP.网页的标题标记应反映在真正意义上的网页,该搜索引擎优化应该付出这个因素页上特 ...

  6. seo php,SEO技术:PHP页面的SEO优化

    SEO技术:PHP页面的SEO优化 加入时间:2018-08-21 19:42文章来源:朗创网络营销 PHP是一种快速的服务器端语言,通常用于创建MySQL依赖项和新鲜名称,并进行简单的更改,而其相当 ...

  7. php 网站 seo,SEO技术:PHP页面的SEO优化

    江苏金鼎网络科技 > 行业动态 > SEO技术:PHP页面的SEO优化 SEO技术:PHP页面的SEO优化 编辑 : 金鼎网络 时间 : 2019-07-11 10:50 浏览量 : 85 ...

  8. php编译html,将PHP模板文件编译为静态HTML页面的Ant任务

    我们当前的站点分解为各种易于使用的PHP包,它们使用这些漂亮的PHP模板库中的一个汇集到一起.将PHP模板文件编译为静态HTML页面的Ant任务 我们目前使用Ant构建来优化大多数关于连接,缩小和图像 ...

  9. [react] 什么是虚拟dom?虚拟dom比操作原生dom要快吗?虚拟dom是如何转变成真实dom并渲染到页面的?

    壹 ❀ 引 虚拟DOM(Virtual DOM)在前端领域也算是老生常谈的话题了,若你了解过vue或者react一定避不开这个话题,因此虚拟DOM也算是面试中常问的一个点,那么通过本文,你将了解到如下 ...

  10. Web页面或app等前端页面之Java Web的JSP、Servlet、Cookie、Session等技术小结

    Java Web学习,掌握JSP.Servlet.Cookie.Session等内容,使用JSTL进行数据展示完成实际应用. 2.3.1 XML基础 XML的用途.语法规则.语义约束.如何解析XML, ...

最新文章

  1. deb和rmp的安装
  2. ADAS实际已涵盖20多种功能
  3. 根据 中序遍历 和 后序遍历构造树(Presentation)(C++)
  4. Linxu 进程描述符task_struct
  5. DataTables选择多行
  6. 美团酒店Node全栈开发实践
  7. 人月神话贯彻执行_人月神话阅读笔记01
  8. 【Tools】CSDN-markdown编辑器使用说明
  9. layui登录页面写入数据_layui 页面保存数据
  10. Java访问静态常量_Java如何在Spring EL中访问静态方法或常量?
  11. TCP/IP及内核参数优化调优(转)
  12. javascript中构造StringBuffer实例
  13. Android程序对不同手机屏幕分辨率自适应的总结
  14. html 中电话号码的使用
  15. 澜沧江某水电站下坝址坝址初步设计
  16. COLOR_CODE
  17. 实战篇:Linux 安装 Oracle 11GR2 数据库保姆级教程
  18. 小记!华为 8.0系统切换APP内语言(中英文)无效(其他版本手机均有效)。
  19. 【xlwings api语言参考】Range.AutoFill 方法
  20. 加密、解密详解及CA的实现

热门文章

  1. 使用Power Automate (MS Flow) 发送审批邮件
  2. Mysql 的ANY_VALUE()函数和 ONLY_FULL_GROUP_BY 模式
  3. 使用Android studio 制作完app运行安装没问题,但是打开显示。。。keeps stopping
  4. 点赞 分数 20作者 陈越单位 浙江大学
  5. 当今排队方式方法_当今改善您的设计产品组合的5种方法
  6. 阿里云服务器是否限制流量?阿里云固定宽带和按使用流量计费2种方式解读
  7. Lucas-Kanade 算法原理以及应用
  8. Microsoft Visual Studio 2013/2015/2017 官方原版 ISO 镜像中文版下载
  9. 四级,六级报名网站很卡怎么办?
  10. 零代码工具推荐 八爪鱼采集器