AI智能摘要
GPT
这篇文章记录了作者在使用Next.js和Cloudflare构建个人博客时的网页核心指标优化经验。内容涵盖了性能测试、问题分析及解决方案,包括提高图片加载优先级、懒加载CSS、去除不必要资源等,以提升LCP和CLS等核心指标。通过实际测试与数据分析,文章指出了优化的具体措施及其效果评估。
本文以优化网页核心指标为主题,记录了作者在构建基于 Next.js 并托管于 Cloudflare 的个人博客站过程中的实际优化经验。文章从性能测试、问题分析、解决方案实施以及优化效果评估等方面详细介绍了优化的过程和方法,包括通过提高图片加载优先级、减少不必要资源的加载、使用 Next.js 的 Image 组件等措施来提升网站的核心指标。
自用全专线,小贵但效果超好 Aifun 爱翻 - 机场测评
前言
本文以基于Next.js构建托管于Cloudflare的本博客站自己作为讲解分析对象,主要目的是记录本站的优化过程,具体更详细权威的优化还请参考
提供的具体解决方案有因框架/架构/网站/个人水平的局限性,敬请谅解,如有错误还请指正
优化要分大小
同样的工作量优化10ms和1000ms是完全不一样的,过度的优化反而会影响开发上的效率
是否遵循规范
有的规范你不遵守也没啥大影响,但有的就可能直接导致几秒的延迟
一切的优化,请基于实验和实际统计数据作为最终判断标准
问题分析
使用 PageSpeed Insights 进行性能测试并结合服务器统计数据进行分析问题

初始性能表现惨不忍睹,作为一个基本纯静态的网站,这样的速度并不合格
- 最大内容绘制 (LCP): 衡量加载性能。为了提供良好的用户体验,请努力让 LCP 发生在页面开始加载的前 2.5 秒 内。
- 与 Next Paint 交互 (INP): 衡量响应能力。为了提供良好的用户体验,努力做到INP 小于 200 毫秒 。
- 累积布局偏移 (CLS): 度量视觉稳定性。为了提供良好的用户体验,请努力使 CLS 分数小于 0.1 。
但就本站而言,没有多少交互性,所以INP不是很重要,重点就是LCP和CLS
最简单的方法:不是很重要的功能能关就关,除非占用很小
LCP图片优化
顶部选择LCP相关的审计进行查看,可以发现LCP元素是一张图片,而最大的耗时部分是加载延迟,可以看出是因为LCP元素被延迟加载了,主要原因就是这个图片在代码中是默认优先级或者低优先级的,而我们要做的也很简单就是高优先级进行加载

最简单做法就是使用 Next.js提供的Image组件,于此同时还能进行图片优化
Image 的 Priority 为 True 时,将在HTML中preload该资源,从而很好的解决了发现延迟和排队延迟的问题
更多其他部分优化请看:
进行优化后依旧存在问题
但优化过后数据还是不太好看,那问题出在哪呢?通过使用 WebPageTest 发现问题在于网站图标所用的 FontAwesome 的 CSS
- CSS本身较大,阻塞了主线程,导致加载速度变慢
- 后续请求大型字体,争用网络带宽,影响其他资源加载

FontAwesome的优化
FontAwesome的加载是为了使用图标,但是为了小图标的显示而付出这样的代价是不合适的,我宁愿付出CLS作为其他指标提升的代价,这就是取舍
解决方案:懒加载CSS
使用 useInsertionEffect – React Hook 进行加载
// 加载 font-awesome useInsertionEffect(() => { const link = document.createElement('link') link.rel = 'stylesheet' link.href = BLOG.FONT_AWESOME link.id = 'font-awesome' document.head.appendChild(link) // cleanup function return () => { const linkElm = document.getElementById('font-awesome') if (linkElm) { linkElm.remove() } } })
更多资源请参见:
去除非首屏和未被使用的资源
分析发现大量的无用资源被加载,占用了不必要的网络带宽

使用 覆盖率 工具进行具体定位
CSS部分
使用覆盖率检测发现,大部分CSS无法被优化,且占用不大,不过依旧可以考虑使用如下方法优化
JS部分
使用 bundle-analyzer 分析后发现大量组件为大型组件或按需导入组件需要延迟加载或按需加载
Cloudflare 部分常见优化误区
TTFB相关
使用 SaaS回源 等形式进行 Cloudflare CDN优选时, 可能会使得TTFB不降反升
正常架构图会多一次DNS过程,即CNAME DNS,如果 优选域名 本身又进行了 CNAME 或者其他操作,又会增加新的DNS网络成本 更多具体风险可见
请谨慎使用 Cloudflare CDN优选等手段,如要使用也最好进行检测,以确保是真的优化了
Cloudflare提供的额外功能相关
- Rocket Loader 并不一定是优化(一切的优化,请基于实验和实际统计数据作为最终判断标准)
- Zaraz 一般是优化,但可能会影响功能
最终优化效果
当然网页性能并不是一成不变的,会随着任何微小的变化而变化,如受众的设备性能/网络环境/网站架构/网站功能等。
所以需要始终对其进行监控,如 Cloudflare 网站分析 ,Chrome 网页核心指标
暂无
自用全专线,小贵但效果超好 Aifun 爱翻 - 机场测评
📎 参考文章
主要参考 暂无
还可以加入Telegram的七行的小仓库|互联网记忆|博客 和七行 技术交流群 找到更多小技巧哦🥰,还可以在聊天群探讨各种问题❓
欢迎在底部评论区分享您的想法和经验,让我们一起共同探讨,共同进步!
- 作者:Qi Xing
- 链接:https://blog.qixing1217.top/article/nextjs-cloudflare-web-core-metrics-optimization-guide
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。