关于使用子域强制缓存的问题

Question about using subdomains to force caching

提问人:Andrew G. Johnson 提问时间:2/5/2009 更新时间:10/22/2009 访问量:1246

问:

我没有很好的机会来研究这个主题,但我想我会问这个问题,看看我们是否可以在这里创建一个关于这个主题的知识库。

1)使用子域将强制客户端缓存,这是默认的还是客户端有简单的方法来禁用它?更好奇我应该期望影响什么样的用户百分比。

2) 将缓存哪些内容?图像?样式表?闪存 SWF?Javascript?万事?

3) 我记得读到您必须在 URL 中使用子域或 www 才能正常工作,这是正确的吗?(这是否意味着 SO 不允许这样做?

我计划最终将其集成到我的所有网站上,但首先我将尝试为Flash游戏网站网络执行此操作,因此我认为网站 www.example.com 将保持不变,但我不会使用 www.example.com/images,www.example.com/stylesheets,www.example.com/javascript 和 www.example.com/swfs 我将只创建指向它们的子域(img.example.com, css.example.com、js.example.com 和 swf.example.com)——这是最好的行动方案吗?

缓存

评论


答:

5赞 Paul Dixon 2/5/2009 #1

对内容元素使用子域与其说是为了强制缓存,不如说是为了诱骗浏览器打开比其他方式更多的连接。这可以加快页面加载时间。

这些元素的缓存完全取决于与该内容一起提供的 HTTP 标头。

对于CSS、JS等静态文件,服务器通常会在文件被修改时告诉客户端,这允许浏览器要求文件“If-Modified-Since”该时间戳。如何通过添加一些额外的缓存标头来改进这一点的具体细节将取决于您使用的 Web 服务器。例如,在 Apache 中,可以使用 mod_expires 模块设置 Expires 标头,或使用 Header 指令输出其他类型的缓存控制标头。

例如,如果你有一个包含 css 文件的子目录,并且想要确保它们缓存至少一个小时,你可以在该目录中放置一个包含这些内容的 .htaccess

ExpiresActive On
ExpiresDefault "access plus 1 hours"

评论

0赞 Andrew G. Johnson 2/5/2009
我将如何编辑我的图像、js、css 和 swf 的 HTTP 标头以确保缓存发生?
0赞 Peter Rowell 2/5/2009 #2

查看 YSlow 的文档。YSlow 是 Firebug 的插件,Firebug 是一款了不起的 Firefox Web 开发插件。有很多关于加快页面加载速度的好方法,其中之一是使用一个或多个子域来鼓励浏览器执行更多并行对象加载。

我在两个 Django 站点上做的一件事是使用自定义模板标签来创建图像、css 等的伪路径。该路径包含作为伪目录的时间上次修改。此路径组件由 Apache .htaccess mod_rewrite 规则剥离。然后,该对象将获得 10 年的生存时间(ExpiresDefault “现在加 10 年”),因此浏览器将只加载一次。如果对象发生更改,伪路径也会发生变化,浏览器将获取更新后的对象。