你的网站加载慢,八成卡在图片和 JS 上了
打开网页,内容明明都写好了,服务器也没崩,可就是等半天才出来——你肯定被这事儿气过。切到开发者工具一看:几十个 CSS、JS、图片排着队等下载,全挤在 www.yourdomain.com 这一个入口。这不是堵车,是修路只修了一条车道。
为什么要考虑用子域名加载静态资源?
浏览器对同一个域名,最多同时开 6 个 HTTP 连接。
哪怕你服务器再快,它也得守这个规矩。
HTML、CSS、JS、图标、商品图……全塞在一个域名下,后头的资源只能干等。
换成 static.yourdomain.com 或 img.yourdomain.com 就不一样了。
浏览器把它当全新站点,立刻多开 6 个连接通道。
资源不用排队,页面自然“唰”一下就出来了。
有个做母婴电商的朋友试过:把详情页所有产品图挪到 img.yourdomain.com,没换服务器,没改代码逻辑,就调了 DNS 和 Nginx 配置。结果用户反馈“翻页不卡了”,客服那边关于“图片转圈”的投诉直接少了一半。
使用子域名能带来哪些具体好处?
缓存更干净
首页 HTML 每天都在变,但 jQuery、通用图标、字体文件可能半年都不动。放在独立子域名下,你可以放心设 Cache-Control: public, max-age=31536000,用户第二次访问,这些文件根本不用走网络。
不传没用的 Cookie
主站登录态要靠 Cookie 维持,但一张 20KB 的 PNG 图片,每次请求都硬扛着几 KB 的 Cookie 头跑一趟?浪费带宽,还拖慢速度。子域名配置里关掉 Cookie,这部分流量就省下来了。
CDN 和监控更好下手
你想给图片单独配 Cloudflare,给 JS 单独压 Gzip 级别,或者想看“今天 CDN 缓存命中率跌了没”?一个域名混着管,全是糊的;拆开之后,每块资源的水位、延迟、错误率,一眼就看得清。
这种做法有没有潜在的风险和缺点?
有,而且三个坑都挺实在。
第一次访问多一次 DNS 查询
用户头回点进你网站,浏览器得额外查一次 static.yourdomain.com 的 IP。如果 DNS 响应慢,确实会多等几十毫秒。好在这事只发生一次,后面几天都会走本地缓存。
HTTPS 握手多花点时间
新子域名首次建 HTTPS 连接,要走完整 TLS 握手。不过现在主流 CDN 和 Nginx 都默认开 TLS 1.3 + OCSP Stapling,这个延迟已经压得很低了。
路径一错,满屏 404
你改了域名,但模板里还写着 /css/app.css,或者 CMS 后台上传图片自动拼的是 https://www.yourdomain.com/uploads/xxx.jpg——那就等着白屏吧。必须统一替换所有引用,还得留好重定向兜底。
如何正确设置静态资源子域名?
别怕,三步就能跑通:
第一步:加 DNS 记录
进你用的域名服务商后台(阿里云、腾讯云、Cloudflare 都行),给 static 或 img 加一条 CNAME 记录,指向你的 CDN 地址(比如 your-bucket.fra1.cdn.digitaloceanspaces.com),或者直接 A 记录指向服务器 IP。
第二步:配 Nginx(或你用的 Web 服务器)
新建一个 server block,监听 static.yourdomain.com。重点就两条:
- 所有请求只走
location ~* \.(js|css|png|jpg|gif|webp|woff2)$这类静态规则; - 加上
add_header Set-Cookie "" always;和expires 1y;,彻底关 Cookie、开长缓存。
第三步:批量换链接
别手动改 HTML。如果你用的是 WordPress,装插件「Velvet Blues Update URLs」一键替换;用 Vue/React 的项目,搜 public/ 和 src/assets/ 下所有 https://www. 开头的地址;Nginx 层也可以加 sub_filter 做运行时替换(适合过渡期)。
除了子域名,还有更优的现代方案吗?
HTTP/2 真的改变了游戏规则。
它支持多路复用,一个 TCP 连接里能塞十几二十个请求,不再靠“开多个域名”来骗并发数。
如果你的用户基本都用 Chrome/Firefox/Edge(也就是绝大多数人),且服务器已启用 HTTP/2,那强行拆子域名反而可能因多一次 DNS + TLS 握手,拖慢首屏。
另一个更省心的选择:把大文件直接扔到对象存储里。
比如用腾讯云 COS 或阿里云 OSS,上传图片/视频后绑定 cdn.yourdomain.com,再在网站里把 <img src="/uploads/..."> 全替成 https://cdn.yourdomain.com/uploads/...。
不用管服务器扩缩容,CDN 自动全球分发,连 HTTPS 证书都帮你托管好了。
选哪个?看你团队能不能随时升级 Nginx、有没有运维精力盯 TLS 配置。如果就想快点见效,子域名仍是今天最稳的那张牌。
今天下班前,你就可以做这个检查
打开你的网站,右键 → 「检查」→ 切到「Network」标签页 → 刷新页面。
然后做两件事:
- 在过滤框里输入
www.,看看列表里是不是密密麻麻全是www.yourdomain.com开头的请求; - 拉到最后列,找「Timing」下的「Queued」状态——只要看到好几个并排标着「Queued」,就说明它们正在门口排队等进场。
这个动作 2 分钟搞定。
如果真看到一堆排队,今晚回家路上就想好:先挪哪一类资源?图片?还是 CSS?
明天早上打开你常用的服务器控制台(宝塔、cPanel、或者 SSH),把 static.yourdomain.com 的 DNS 和 Nginx 配好,再挑一个图片目录试试水。
优化从来不是等架构升级完才开始的——是从你看见「Queued」那一刻,就已经开始了。