Ускорить сайт сделано правильно - PullRequest
1 голос
/ 30 июля 2011

Я хочу ускорить мой сайт. Мне было интересно, что я сделал это правильно по синтаксису.

<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 голосов
/ 05 марта 2013

Я знаю, что вопрос с 2011 года, но даже тогда Прагма была старой. Я думаю, что безопасно прекратить его использовать.

Нам редко нужно устанавливать 'public' или must-revalidate, если вы не пытаетесь поддерживать действительно старые браузеры и прокси, такие как pre IEv4 и прочее.

Если вы собираетесь кэшировать свой php, вам все равно нужно поработать над своим php-кодом.

Отмена последнего изменения для изображений и прочего по существу вызывает ситуацию 'никогда не кэшировать' для этих файлов до заданной даты статической (в то время) будущей даты. Я думаю, вы хотите кэшировать статические файлы X дней в будущем всегда, а не сбрасывать последние изменения.

Ваш файл htaccess может быть сделан намного проще. Занимая некоторые фрагменты из 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
0 голосов
/ 05 марта 2013

У Google есть веб-сайт, который поможет вам проанализировать ваш сайт. С этим инструментом доступно несколько инструментов и полезный анализ.

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

0 голосов
/ 31 июля 2011

Не кэшируйте 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/

Дайте мне знать, если это поможет.

...