0

今天我使用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 个月,一周)。是吗?

使用过期标头有什么缺点吗?

4

2 回答 2

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 文件并设置Expires3 天的标题

[1] http://httpd.apache.org/docs/2.0/mod/mod_expires.html

于 2009-07-21T06:59:25.440 回答
2

显然,过期标头的缺点是您已经说过,如果您进行更改,那么用户将在过期之前不会收到新版本。

另一种选择是发送日期修改标题,这样下次用户访问浏览器时会询问文件是否从那时起更改......如果没有,它只会加载缓存的版本。不确定哪些浏览器实际上遵循此标准。

这些选项仍然只适用于动态页面,要对样式表或图像等静态内容执行此操作,您将需要更多访问服务器的权限。(您也可以使用 .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

于 2009-07-21T07:01:46.467 回答