网站加载速度慢时,很多人首先想到“压缩代码”。把HTML、CSS和JavaScript压缩成更小的文件确实有帮助,但真正影响页面速度的,往往还包括无用代码、过大的公共资源、图片、第三方脚本和缓存策略。

网站加载慢怎么优化代码?CSS、JS与HTTP压缩指南

页面优化可以先分成三件事:

代码精简
→ 删除不需要的内容

Minify
→ 删除空格、注释和冗余字符

Brotli / Gzip
→ 减少服务器传输的数据量

三者作用不同,可以同时使用。

先清理无用代码

相比把500KB代码压缩成400KB,更有效的方法往往是发现其中有200KB根本没有使用。

长期运行的网站容易积累:

  • 旧版CSS和JavaScript;

  • 已经下线功能的代码;

  • 重复加载的组件库;

  • 没有继续使用的统计和营销脚本;

  • 所有页面统一加载的大型公共文件。

因此,压缩之前应先检查哪些代码真正需要保留。

HTML、CSS和JS做Minify

Minify主要删除不影响程序运行的空格、换行、注释和部分冗余写法。

例如CSS:

.article {
    color: #333333;
    margin: 0px 0px 20px 0px;
}

压缩后可以变成:

.article{color:#333;margin:0 0 20px}

HTML和JavaScript也可以使用类似方式压缩。

开发阶段仍建议保留清晰的源码格式,在构建或部署时自动生成压缩版本,而不是人工维护一整行代码。

大型资源要按需拆分

有些网站为了减少文件数量,把全部CSS和JavaScript打进一个大型文件。

例如:

style.css  800KB
app.js     2MB

即使当前页面只需要其中很少一部分,浏览器仍然要完整下载。

可以根据页面或功能拆分:

common.css
article.css
product.css

main.js
search.js
editor.js

用户打开文章页时,只加载文章页真正需要的代码;需要编辑器时,再加载编辑器相关模块。

这种按需加载通常比单纯压缩一个巨大文件更有效。

减少JavaScript阻塞

JavaScript除了需要下载,还需要浏览器解析和执行。脚本过多时,可能影响首屏显示和页面响应。

对于非关键脚本,可以根据实际情况使用:

<script src="app.js" defer></script>

或者:

<script src="analytics.js" async></script>

defer适合等待HTML解析完成后再执行的脚本;async更适合彼此独立的脚本。

不能简单给所有脚本统一添加async,否则存在依赖关系的代码可能发生执行顺序问题。

开启Brotli或Gzip

Minify完成后,还可以在服务器或CDN上启用HTTP传输压缩。

适合压缩的资源主要包括:

  • HTML;

  • CSS;

  • JavaScript;

  • JSON;

  • SVG。

现代网站通常可以优先使用Brotli,并保留Gzip作为兼容方案。

例如一个JavaScript文件:

原始文件:500KB
Minify后:320KB
再经过Brotli传输
→ 实际网络下载量进一步减少

JPEG、WebP、AVIF、MP4和ZIP等本身已经压缩的格式,再进行通用压缩通常收益有限。

图片往往比代码更占空间

很多页面最大的资源并不是HTML或JavaScript,而是图片。

常见优化方式包括:

  • 不要上传远大于实际显示尺寸的图片;

  • 合理使用WebP、AVIF、JPEG等格式;

  • 控制图片压缩质量;

  • 非首屏图片使用延迟加载;

  • 根据设备提供合适尺寸的图片。

如果页面中有几MB图片,只节省几十KB代码,对整体速度改善不会太明显。

静态资源做好缓存

长期不变的CSS、JavaScript、图片和字体,不需要用户每次访问都重新下载。

构建后的资源可以使用文件指纹:

app.a3f84c.js
style.97bc21.css

再设置较长缓存时间。

代码修改后生成新的文件名,浏览器就会重新下载新版本,而未变化的资源可以直接使用本地缓存。

HTML通常需要采用更灵活的缓存策略,不能简单与静态JS、CSS使用完全相同的长期强缓存。

第三方脚本也要定期清理

网站运行时间越长,越容易积累广告、统计、客服、热图、分享和A/B测试等第三方代码。

可以定期检查:

  • 这个脚本是否还在使用;

  • 是否每个页面都需要加载;

  • 是否存在重复统计代码;

  • 能否延迟到用户需要时再加载。

删除一个已经不用的大型第三方脚本,有时比继续压缩自己的CSS更有效。

不要只追求文件越少越好

过去经常把所有CSS和JavaScript合并成一个文件,以减少HTTP请求。

在HTTP/2和HTTP/3环境下,文件数量已经不是唯一问题。如果把全站代码都打成一个3MB文件,用户打开任何页面都要下载全部代码,同样不合理。

更重要的是:

让用户尽快获得当前页面真正需要的资源。

文件大小、代码拆分、缓存复用和加载顺序需要综合考虑。

一个实用优化顺序

  1. 找出体积最大的CSS、JavaScript、图片和第三方资源;

  2. 删除已经不用的代码和脚本;

  3. 大型CSS和JS按页面或功能拆分;

  4. 非关键资源按需或延迟加载;

  5. 生产环境压缩HTML、CSS和JavaScript;

  6. 服务器或CDN开启Brotli和Gzip;

  7. 优化图片尺寸、格式和延迟加载;

  8. 为静态资源配置合理缓存;

  9. 优化完成后重新测试页面加载情况。

页面代码优化不能只理解成“把源码压成一行”。Minify只是基础,更重要的是减少真正不需要的资源,让CSS和JavaScript按需加载,再配合HTTP压缩、缓存和图片优化。

最终目标不是代码看起来有多短,而是让浏览器为了打开一个页面,少下载、少解析、少执行不必要的内容。

参考资料

  1. MDN JavaScript性能优化指南

  2. MDN HTTP压缩说明

  3. web.dev资源加载优化指南

  4. web.dev JavaScript代码拆分指南

  5. MDN Cache-Control缓存说明