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

页面优化可以先分成三件事:
代码精简 → 删除不需要的内容 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文件,用户打开任何页面都要下载全部代码,同样不合理。
更重要的是:
让用户尽快获得当前页面真正需要的资源。
文件大小、代码拆分、缓存复用和加载顺序需要综合考虑。
一个实用优化顺序
找出体积最大的CSS、JavaScript、图片和第三方资源;
删除已经不用的代码和脚本;
大型CSS和JS按页面或功能拆分;
非关键资源按需或延迟加载;
生产环境压缩HTML、CSS和JavaScript;
服务器或CDN开启Brotli和Gzip;
优化图片尺寸、格式和延迟加载;
为静态资源配置合理缓存;
优化完成后重新测试页面加载情况。
页面代码优化不能只理解成“把源码压成一行”。Minify只是基础,更重要的是减少真正不需要的资源,让CSS和JavaScript按需加载,再配合HTTP压缩、缓存和图片优化。
最终目标不是代码看起来有多短,而是让浏览器为了打开一个页面,少下载、少解析、少执行不必要的内容。
poxiaoxi博客
精彩评论