前端性能优化到底怎么做啊!平均 LCP 已经 1.7s 了

199 天前
 dashsoap97

领导坚持要看 95 分位数据 要 2.5s 以下 现在 3.2s 怎么办啊各位大佬

3293 次点击
所在节点    前端开发
29 条回复
Torpedo
198 天前
@dashsoap97 #5 如果初始 api 请求比较固定,可以考虑把初始请求单独放到 html 里请求,和 js 并行加载
dashsoap97
198 天前
@LASockpuppet #13 我理解主要是接口啊
@chaoschick #15 已经删无可删了
@murmur #16 怎么才能再压缩呢?
dashsoap97
198 天前
@kamilic #20 不固定的 依赖接口
dashsoap97
198 天前
@Torpedo #21
@jydeng #18 发现有很多 空的区域 就是什么事儿也没干的情况 不知道为啥
jydeng
198 天前
@dashsoap97 可能是在下载、解析,结合网络看一下。
xiaofeixiang
198 天前
先分析现状,再看达成目标。
LCP 我个人不是最主要的影响因素,最重要的是白屏时间和页面可操作时间,这两个时间短的话,页面的可访问性就有保障,我自己公司的项目做过一些这方面的优化,个人浅见分享一下。
最直观的就是做 SSR 或者 SSG ,vue2 也有 pre-render 相关的处理,可行的话也可以切换到 nuxtjs2 ,基本没有什么门槛。
资源加载方面该先检查服务器配置,gzip 或者 br ,http2 这些配置必须要有, 静态资源 cdn 加速也必不可少,资源根据需求做 cdn 缓存和预热,这个非常非常重要,服务器就是力大砖飞的东西,配置越好,网络越好,体验越好,在这个的基础上,你再去做优化,不然就是屎上雕花,毕竟巧妇难为无米之炊;
工程打包方面来讲,html 也可以预先做 dns 解析和资源缓存方面的优化,打包文件拆分这个很重要,一个资源 300k 我个人觉得有点太大了,我们所有的项目最大的公共包不会超过 150k ,不过在服务器和网络条件好的情况下,这个勉强能够接受,不要把不必要的插件和代码打包到公共文件里面去!举个例子 echart 和 lodash 这种一定是页面用到的地方才加载。不能拆出去的,能走 cdn 的尽量走 cdn ,尽量降低公共包里面无用的代码,ui 库和路由一定要做好按需加载,css 包可以用 purecss 这类的插件把没用到的资源去掉,当然这个得根据项目来调整。所有的 js 和 css 包括 html 都必须压缩!
从页面的方面来讲,所有的图片统一转换成最小的格式,可以通过 cdn 自带的格式转换,也可以通过工程化配置压缩文件体积,页面图片加载尽量做好懒加载。如果是 SSR ,一定要注意 async 和 await 的使用,多个非依赖的请求尽量并行请求。不追求 SEO 的话,能异步加载的模块都走客户端渲染,做好骨架屏能很大程度上提升体验,包括资源加载渲染的时候,可以参考有些项目运行热编译的时候页面有进度条提示。首屏没用到的元素也可以考虑做懒加载,举个我最近优化的 webview 嵌入的 H5 的例子, 我们业务有一个长列表的 collapse ,如果全量渲染,在正常的手机和 pc 上的速度是很正常的,在我们产品嵌入的低性能的安卓设备上页面 loading 时间会超过 10s ,这基本是不可接受的,优化加了列表和 collapse 内容的延迟加载,页面初始只渲染列表,页面 load 完之后会逐步加载 collapse 里面的内容,不影响页面的滚动和操作,优化后基本能保证在低性能设备上的访问速度和高性能设备差距不大。具体需求具体分析,各类框架的推荐写法一定要去看,保持良好的代码编写习惯,尽量不要往项目中堆屎和脑残逻辑
这些是针对首次访问用户的,其他的还有类似 pwa 和本地缓存的东西,可以针对多次访问的用户做优化,不过我感觉做好了资源缓存,这些配置可以根据需求选择性的去做,现在性能优化的文章和分享很多,都可以根据自己的项目需求去参考
dashsoap97
197 天前
@xiaofeixiang #26 非常感谢
@xiaofeixiang #26
NakanoAzure
143 天前
@xiaofeixiang 想请教一下公司内部有自建 CDN ,是不是把第三方依赖 React 、React-Dom 、antd 、echarts 这种全部改成 CDN 引入然后打包再全部 external 掉,首屏速度是不是会更快啊,我现在在犹豫是 CDN 引入再 external 还是直接分包😂
xiaofeixiang
143 天前
@NakanoAzure 并不是能够完全照搬,cdn 的主要目的是加快资源加载速度,如果加载无用资源也是一种浪费,实际上,你们项目打包的静态文件也可以上传 cdn 的。最终客户端加载的资源肯定是无用代码越少越好,加载资源大小越小越好。如果第三方资源有动态引入,类似 antd 和 echarts 这种,很多场景你并不需要全量加载整个包,可以考虑将这些包合并成一个固定的资源包,放到 cdn 上,而且有些可能只有部分页面需要用到,这个时候去 external 就并不合适,按实际的需求去做应对吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1113931

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX