企业官网最常见的抱怨是"首屏半天不出来"。排查完发现服务器不慢、代码也不复杂,慢就慢在浏览器要按顺序加载一大堆资源:CSS 卡住了渲染,字体阻塞了文字,首屏外的图片抢了带宽,第三方脚本又插在中间。官网优化不是"上 CDN 就完事",而是把资源的优先级排对:哪些先、哪些后、哪些压根不该现在加载。本文按资源类型拆解一套可直接落地的优先级方案。
打开浏览器 DevTools 的 Network 面板,按"起始时间"排序看瀑布流,常见三类问题:
慢的典型形态: 1. 一条超长的渲染阻塞链:HTML → 同步JS → 同步CSS → 又同步JS 2. 首屏大图挤占带宽,真正关键的 CSS/JS 排队等 3. 字体文件在文字渲染前阻塞,白屏期全是等待
正常的形态: HTML 一到就出骨架,CSS 尽快就位,JS 全部 defer, 字体用 font-display: swap,图片按视口懒加载
判断标准很简单:滚动条能滚之前,页面上"可见内容"用了多少毫秒。这个数字(首屏可交互前的时间)才是官网优化的目标,不是"整页 load 事件"。
<!-- 默认:defer 让脚本在 DOM 解析后执行,不阻塞渲染 -->
<script src="/js/app.js" defer></script>
<!-- 例外:首屏必需的极小块逻辑,内联进 head,避免一次请求 -->
<script>
// 例如:首屏主题色、骨架屏渲染、关键埋点初始化
document.documentElement.style.setProperty('--theme', '#0b5fff');
</script><script src>:它会阻塞 HTML 解析和渲染,官网首页几乎不存在"必须同步"的脚本。defer,必要时"空闲时再加载"(requestIdleCallback),别让第三方拖慢首屏。CSS 默认会阻塞渲染,所以原则是"首屏要用的快,首屏不用的后到":
策略 | 做法 | 收益 |
|---|---|---|
关键 CSS 内联 | 首屏布局/字体/颜色直接写进 | 首屏不依赖额外请求 |
非关键 CSS 延迟 |
| 不阻塞渲染 |
按路由拆分 | 首页、列表页、详情页各一份 CSS | 每页只加载用得到的 |
媒体查询拆分 | 打印、暗色模式独立文件 | 按需触发 |
字体是"看不见的阻塞者":文字要用字体渲染,字体没到文字就空白。两个关键动作:
@font-face {
font-family: 'Brand';
src: url('/fonts/brand.woff2') format('woff2');
font-display: swap; /* 先显示系统字体,字体就绪再替换 */
unicode-range: U+4E00-9FFF; /* 中文子集:只加载用得到的字符 */
}font-display: swap 避免字体加载期间整页白字/无字。首屏图用 fetchpriority="high",首屏外全部懒加载,格式优先 AVIF/WebP:
<!-- 首屏大图:高优先级 -->
<img src="/hero.webp" fetchpriority="high" width="1200" height="630" alt="产品主视觉">
<!-- 首屏外:懒加载,滚动到附近才加载 -->
<img loading="lazy" src="/feature.webp" width="800" height="500" alt="功能截图">loading="lazy" 只给视口外的。坑 | 现象 | 解法 |
|---|---|---|
同步 JS 堆在 head | 首屏白屏几秒 | 全部 defer/内联关键逻辑 |
4 个字重全量加载 | 首屏字体请求排队 | 首屏 1-2 个字重+子集化 |
字体默认阻塞 | 文字先空白后闪现 | font-display: swap |
首屏大图 lazy | 首屏关键图反而最晚到 | fetchpriority=high |
不写宽高 | 图片加载后页面跳动 | 写死 width/height |
第三方脚本插前面 | 第三方拖慢首屏 | 延后/空闲加载 |
CSS 全量不拆分 | 首屏被整站 CSS 拖住 | 关键 CSS 内联+按路由拆分 |
官网性能优化建议按"先看瀑布流、再逐类排序"推进:第一步用 DevTools 录一份首屏瀑布流,圈出前三长条;第二步把同步 JS 全部 defer、关键 CSS 内联(通常立竿见影);第三步处理字体(swap+子集)和图片(懒加载+格式+尺寸);最后再调第三方脚本时机。每一步改完用"首屏可交互时间"和移动端 3G 模拟验证一次,别只看桌面端。对大多数官网,做到"JS 全 defer + 关键 CSS 内联 + 字体 swap + 图片懒加载"四项,首屏就能快一个量级。
官网加载慢,九成不是服务器慢,而是资源优先级没排对。把 JS 放后面、CSS 关键的内联、字体别阻塞、图片按视口加载,这一套是每个前端都能落地、效果立竿见影的基础优化。先录瀑布流,再逐类排序,最后用弱网验证——官网首屏从"转圈"到"秒开"往往就差这几步。
以上为通用前端性能实践分享,仅作技术交流。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。