加快网站正确完成

时间:2011-07-30 18:06:28

标签: performance apache .htaccess httpd.conf

我想加快我的网站速度。我想知道我已经正确地完成了语法。

<IfModule mod_expires.c>
  Header unset Pragma
  FileETag None
  Header unset ETag
  ExpiresActive On

ExpiresDefault "access plus 1 year" 

  ##### DYNAMIC PAGES
  <FilesMatch "\\.(ast|php)$">
   ExpiresDefault A7200
    Header set Cache-Control "public, max-age=3600, must-revalidate"
  </FilesMatch>

  ##### STATIC FILES
<FilesMatch "(?i)^.*\.(ico|png|gif|jpg)$">
Header unset Last-Modified
Header set Expires "Fri, 21 Dec 2012 00:00:00 GMT"
Header set Cache-Control "public, no-transform"
</FilesMatch>

  <FilesMatch "\\.(css|js|xml)$">
    Header set Cache-Control "public, max-age=604800, must-revalidate"
</FilesMatch>

</IfModule>

3 个答案:

答案 0 :(得分:0)

不要缓存asp或php或任何动态页面!这将导致不可预测的结果。

这是一个例子,假设你有一个名为catalog.php的页面,它使产品目录具有最高价格和库存可用性。由于您已将其设置为在浏览器上缓存结果一小时,因此它将在浏览器上显示一小时的陈旧数据!

动态页面永远不应该像这样批量缓存。您需要根据从页面返回数据的新鲜程度,在页面上放置单独的缓存逻辑。

对于静态页面,虽然你可以做这样的批发到期。但是,请注意,如果您将css和js文件设置为在一年后过期,则今天访问您网站的用户将无法从网络服务器获取最近的js和css数天或数月。如果对脚本或样式进行更改,除非使用某些唯一的查询字符串手动更改文件的URL,否则它们不会看到更改。

我在这里讨论了一种仅适用于ASP.NET的方法。但它会告诉你有关注意事项和注意事项。

http://omaralzabir.com/automatic-javascript-css-versioning-to-refresh-browser-cache/

您还可以阅读我的7条提示,以充分利用缓存,解释所有这些方法以及每种方法的优缺点:

http://omaralzabir.com/making_best_use_of_cache_for_high_performance_website/

如果有帮助,请告诉我。

答案 1 :(得分:0)

我知道这个问题是从2011年开始的,但就在那时,Pragma已经过时了。我认为停止使用它是安全的。

我们很少需要设置'公开'或必须重新验证,除非您尝试支持真正的旧浏览器和代理,例如IEv4之前的内容。

如果你要缓存你的php,你仍然需要在你的PHP代码中做一些工作。

为图像和内容取消设置Last-Modified实际上会导致这些文件的“永不缓存”情况,直到静态(当时)未来日期的预定日期。我认为您希望在将来X天缓存静态文件,而不是在上次修改时取消设置。

您的htaccess文件可以更简单。借用some snippets from H5BP我们可以将它现代化成为:

## set some mime types to their proper types
AddType application/javascript      js jsonp
AddType application/json            json
AddType application/xml             rss atom xml rdf
AddType image/x-icon                ico


<IfModule mod_deflate.c>
  # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
  <IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
      SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
      RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
    </IfModule>
  </IfModule>

  # Compress all output labeled with one of the following MIME-types
  # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
  # and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines as
  # `AddOutputFilterByType` is still in the core directives)
  <IfModule mod_filter.c>
    AddOutputFilterByType DEFLATE application/atom+xml \
                                  application/javascript \
                                  application/json \
                                  application/rss+xml \
                                  application/vnd.ms-fontobject \
                                  application/x-font-ttf \
                                  application/xhtml+xml \
                                  application/xml \
                                  font/opentype \
                                  image/svg+xml \
                                  image/x-icon \
                                  text/css \
                                  text/html \
                                  text/plain \
                                  text/x-component \
                                  text/xml
  </IfModule>
</IfModule>


<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresDefault                          "access plus 1 month"
# Your document html
  ExpiresByType text/html                 "access plus 0 seconds"
# Data
  ExpiresByType application/json          "access plus 0 seconds"
  ExpiresByType application/xml           "access plus 0 seconds"
  ExpiresByType text/xml                  "access plus 0 seconds"
# Feed
  ExpiresByType application/atom+xml      "access plus 1 hour"
  ExpiresByType application/rss+xml       "access plus 1 hour"
# Favicon (cannot be renamed)
  ExpiresByType image/x-icon              "access plus 1 week"
# images
  ExpiresByType image/gif                 "access plus 1 month"
  ExpiresByType image/jpeg                "access plus 1 month"
  ExpiresByType image/png                 "access plus 1 month"
# CSS and JavaScript
  ExpiresByType application/javascript    "access plus 1 year"
  ExpiresByType text/css                  "access plus 1 year"
</IfModule>

# ----------------------------------------------------------------------
# Prevent mobile network providers from modifying your site
# ----------------------------------------------------------------------

# The following header prevents modification of your code over 3G on some
# European providers.
# This is the official 'bypass' suggested by O2 in the UK.

<IfModule mod_headers.c>
Header set Cache-Control "no-transform"
</IfModule>


# ----------------------------------------------------------------------
# ETag removal
# ----------------------------------------------------------------------

# FileETag None is not enough for every server.
<IfModule mod_headers.c>
  Header unset ETag
</IfModule>

# Since we're sending far-future expires, we don't need ETags for
# static content.
#   developer.yahoo.com/performance/rules.html#etags
FileETag None

答案 2 :(得分:0)

Google有一个网站可以帮助您分析您的网站。此工具提供了许多工具和有用的分析。

https://developers.google.com/speed/