在当今快节奏的数字世界中,网站性能至关重要。用户期望页面加载迅速、交互流畅,任何延迟都可能导致用户流失、转化率下降和糟糕的用户体验。Google 等搜索引擎也已将页面体验(包括核心 Web 指标)作为排名因素。因此,性能优化不再是“可有可无”的附加项,而是前端开发的核心职责。
本指南将系统性地带你深入前端性能优化的方方面面,从基础的资源加载到复杂的运行时性能,并提供实用的策略和代码示例。
在开始优化之前,我们必须知道要测量什么。核心 Web 指标(Core Web Vitals)是 Google 定义的一组关键用户体验指标:
其他重要指标还包括:First Contentful Paint (FCP), Time to Interactive (TTI) 等。
测量工具:
这是优化 LCP 和 FCP 的关键阶段。
.min.js
和 .min.css
文件。import()
语法实现路由级或组件级拆分。// 静态导入(会在初始包中)
// import { add } from './math';
// 动态导入(会拆分成单独的 chunk)
import('./math').then(math => {
console.log(math.add(16, 26));
});
使用 <link>
标签告知浏览器资源的优先级,从而优化加载顺序。
preload
: 用于强制提前加载当前导航的关键资源(如字体、关键 CSS)。<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
preconnect
/ dns-prefetch
: 提前与第三方源建立连接或进行 DNS 查询。<link rel="preconnect" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
prefetch
: 提示浏览器在空闲时加载未来可能需要的资源(如下一页的资源)。图像通常是最大量的资源。
srcset
和 sizes
属性,根据设备屏幕尺寸提供不同大小的图片。<img srcset="elva-fairy-320w.jpg 320w,
elva-fairy-480w.jpg 480w,
elva-fairy-800w.jpg 800w"
sizes="(max-width: 320px) 280px,
(max-width: 480px) 440px,
800px"
src="elva-fairy-800w.jpg" alt="Elva dressed as a fairy">
loading="lazy"
属性延迟加载视口外的图片和 iframe。<img src="image.jpg" alt="..." loading="lazy">
<iframe src="video-player.html" loading="lazy"></iframe>
这是优化 FID 和 CLS 的关键阶段。
<link>
标签替代 @import
,因为后者会阻止并行加载。<style>
标签中,减少渲染阻塞请求。resize
, scroll
, input
等高频事件的触发频率。<img>
和 <video>
设置 width
和 height
属性,以便浏览器在加载前预留正确空间。为静态资源设置合适的 Cache-Control
和 ETag
头部,让浏览器能够缓存它们,减少重复访问时的请求。
CDN 将你的静态资源分发到全球各地的边缘节点,使用户可以从地理上最近的服务器获取资源,显著降低网络延迟。
HTTP/2 的多路复用、服务器推送等特性可以显著改善加载性能。HTTP/3 基于 QUIC 协议,进一步优化了连接建立和丢包处理。
性能优化不是一次性的任务,而是一个持续的过程。
前端性能优化是一个涉及加载、渲染、网络、缓存等多方面的系统工程。成功的优化策略需要你:
记住,没有一劳永逸的银弹。不同的项目有不同的瓶颈,最好的优化策略永远是基于实际数据和持续迭代的。现在,就拿起工具,开始为你用户的体验加速吧!