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

时间:2009-02-04 18:47:50

标签: caching

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

1)使用子域将强制客户端缓存,这是默认情况下还是有一种简单的方法让客户端禁用它?对我应该期望影响的用户比例更加好奇。

2)什么都将被缓存?图片?样式表? Flash SWF? JavaScript的?一切?

3)我记得你读过你必须在你的网址中使用子域名或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) - 这是最好的课程行动?

2 个答案:

答案 0 :(得分:5)

使用subdomains for content elements并不是强制缓存,而是欺骗浏览器打开比其他方式更多的连接。这可以加快页面加载时间。

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

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

例如,如果您有一个包含css文件的子目录,并且希望确保它们被缓存至少一个小时,那么您可以在该目录中放置.htaccess及其中的这些内容

ExpiresActive On
ExpiresDefault "access plus 1 hours"

答案 1 :(得分:0)

查看YSlow的文档。 YSlow是Firebug的插件,Firebug是一个惊人的Firefox Web开发插件。关于加速页面加载的方法有很多很好的信息,其中一种方法是使用一个或多个子域来鼓励浏览器进行更多的并行对象加载。

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