我最近在Firebug上使用Pagespeed插件分析了我的网站。它建议我设置CSS,JS和图像文件的到期时间。

我想知道如何执行此操作?

#1 楼

更新您的Apache配置,以将以下指令作为核心配置的一部分:

# 
# associate .js with "text/javascript" type (if not present in mime.conf)
# 
AddType text/javascript .js

# 
# configure mod_expires
# 
# URL: http://httpd.apache.org/docs/2.2/mod/mod_expires.html
# 
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType image/x-icon "access plus 2692000 seconds"
    ExpiresByType image/jpeg "access plus 2692000 seconds"
    ExpiresByType image/png "access plus 2692000 seconds"
    ExpiresByType image/gif "access plus 2692000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2692000 seconds"
    ExpiresByType text/css "access plus 2692000 seconds"
    ExpiresByType text/javascript "access plus 2692000 seconds"
    ExpiresByType application/x-javascript "access plus 2692000 seconds"
    ExpiresByType text/html "access plus 600 seconds"
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>

# 
# configure mod_headers
# 
# URL: http://httpd.apache.org/docs/2.2/mod/mod_headers.html
# 
<IfModule mod_headers.c>
    <FilesMatch "\.(ico|jpe?g|png|gif|swf|css|js)$">
        Header set Cache-Control "max-age=2692000, public"
    </FilesMatch>
    <FilesMatch "\.(x?html?|php)$">
        Header set Cache-Control "max-age=600, private, must-revalidate"
    </FilesMatch>
    Header unset ETag
    Header unset Last-Modified
</IfModule>


评论


将其放在.htaccess文件中时出现500内部服务器错误

– KoolKabin
2010年11月11日,下午5:51

您的Apache设置可能不支持上面列出的所有选项。我将尽快更新此答案,以帮助解决此问题。

–John Conde♦
2010年11月11日,12:50

我的Drupal包含javascript / css参考,例如:www.example.com/misc/jquery.js?v=1.4.4或www.example.com/sites/all/modules/nice_menus/css/nice_menus.css?mtu293,似乎不适用于此类文件。从今天开始更新吗?

– AgA
2013年9月28日11:59



@JohnConde为什么同时到期和标头?另外,例如在更新图像或CSS时,是否需要重命名文件?或对于CSS文件,版本控制有效:test.css?123?

–反对
2014年1月14日14:01

#2 楼

您可以将其放在htaccess中:

<FilesMatch "(?i)^.*\.(ico|flv|jpg|jpeg|png|gif|js|css)$">
ExpiresActive On
ExpiresDefault A2592000
</FilesMatch>


它将以具有这些扩展名(ico,flv,jpg等)的文件为目标,并将Expires标头设置为可访问时间(A)加30天(2592000秒)。如果可以访问,也可以在服务器级别添加它。

#3 楼

这取决于主机和服务器处理这些事情的方式。
选项1)如果您控制服务器,请让apache在响应中添加到期标头
选项2)如果您不控制Web服务器,或者您托管图片/ js / css / etc,则可以从托管它们的脚本中设置这些标头

请记住,这些提示是可取的,但不是绝对的。它们不仅可以节省带宽,还可以加快网站访问速度。因此,如果您的网站访问量很少,则不必为此担心太多。

评论


我使用选项2。如何从脚本中设置这些标头。脚本是指php还是哪个?

– KoolKabin
2010年11月11日下午5:52

您可以检查stackoverflow.com/questions/2185449/…这是一个python示例,但是如果您熟悉编程,我想您会明白的。在php中,您将必须使用headers()。但是请记住,在这种情况下,必须通过脚本为所有“静态”文件提供服务,这会增加您的CPU配额。现在我想到了第三个选择。对这些文件使用CDN。

– Ilian Iliev
2010年11月11日在7:24

#4 楼

在Lightspeed Web Server中设置过期

登录到管理控制台,然后>服务器->常规->过期设置->按类型过期

添加以下内容:

text/css=A604800, text/javascript=A604800, application/javascript=A604800, application/x-javascript=A604800, application/x-shockwave-flash=A604800, image/gif=A604800, image/jpg=A604800, image/jpeg=A604800, image/png=A604800, image/ico=A604800, image/icon=A604800



ExpiresActive On


或者,如果您没有管理控制台访问权限,请尝试以下.htaccess文件:

  ExpiresByType image/png A604800
  ExpiresByType image/gif A604800
  ExpiresByType image/jpg A604800
  ExpiresByType image/jpeg A604800
  ExpiresByType text/javascript A604800
  ExpiresByType application/x-javascript A604800
  ExpiresByType text/css A604800