今天我使用YSlow检查了我网站的效果统计信息。我收到了警告(或可能是错误),如下所示
Add Expires headers
There are 15 static components without a far-future expiration date.
* (no expires) http://www.example.com/video/css/global.css
* (no expires) http://www.example.com/video/js/global.js
* (no expires) http://www.example.com/video/images/main-bg.png
这意味着什么以及如何在PHP和ASP.NET中实现这一点。我在共享托管服务器上,所以请告诉我一些使用代码执行此操作的方法,因为我无法在服务器端进行任何修改。
如果我的标题过期,那么如果我在CSS中进行更改,那么用户将无法立即获取它们,因为css和其他文件被缓存一段时间限制(1个月,一周) )。是吗?
使用过期标题是否有任何缺点?
答案 0 :(得分:5)
PHP
$time = time() + 3 * 24 * 60 * 60; // 3 days
header('expires: ' . gmdate('D, d M Y H:i:s \G\M\T', $time);
但我建议您使用Apache模块mod_expires
[1]。然后你可以把这样的东西放在.htaccess文件中
<FilesMatch "\.(jpg|gif|png|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 3 days"
</FilesMatch>
这将匹配所有图片,CSS和JavaScript文件,并设置Expires
标头3天
答案 1 :(得分:2)
显然,expire标头的缺点就是您已经说过的,如果您进行了更改,那么用户将在到期之前不会收到新版本。
另一个选项是发送一个修改日期的标题,这样下次用户访问浏览器时会询问文件是否从那时起发生了变化...如果不是,它只会加载缓存版本。不确定哪些浏览器实际上遵循此标准。
这些选项仍然只适用于动态页面,要使用样式表或图像等静态内容,您需要更多访问服务器。 (您也可以使用.htaccess文件实现其中一些结果)
在这里,我用谷歌搜索了你的进一步阅读。
PHP资源: http://www.sitepoint.com/article/caching-php-performance/
ASP.NET资源: http://ondotnet.com/pub/a/dotnet/2002/12/30/cachingaspnet.html
.htaccess资源: http://www.askapache.com/htaccess/speed-up-sites-with-htaccess-caching.html