Добрый день
При проверке скорости загрузки сайта гугл выдает следующее -
Задайте правила эффективного использования кеша для статических объектов Найден 41 ресурс
Перегуглила и перепробовала массу вариантов - скорость загруски либо становится хуже, либо не меняется.
Как решить ПОМОГИТЕ!
Комментарии
А при чем тут файл .htaccess из заголовка поста?
Ну в этом же файле прописывается
Не факт. Призываю @bsyomov
Это что такое?
Это Борис Специалист по настройке серверов
А в моем вопросе звучало, что-то типа "Ищу специалиста..."
А специалисты по вашему всегда за деньги помогают? Окей, я вас понял
Меня позвали потому, что я разбераюсь в этом вопросе.
Правда, чтобы вам помочь, надо либо знать ваш домен, либо посмотреть на скрин из PSI, чтобы понять, что именно у вас не кешируется.
Также, неплохо бы знать что-то о том, где хостится ваш сайт. Там статика может, например, отдаваться напрямую nginx, и тогда настойки её кеширования должны быть в конфиге nginx, а присловутый htaccess может действительно не иметь к этому отношения.
Мой домен - dlyaturista.info
Хостинг - SpaceWeb
Если можно, подскажите пожалуйста
У вас на статику сейчас expires 14 дней, что по мнению PSI очень мало, но вообще, заголовки есть.
Что именно у вас сейчас прописано в .htaccess касаемо Expires?
Честно сказать я не знаю, что такое Expires
Если Вы не против, ниже весь файл .htaccess
# SpaceWeb
SetEnvIf X-Forwarded-Proto https SERVER_PORT=443
SetEnvIf X-Forwarded-Proto https HTTPS=on
# SpaceWeb
#
# Apache/PHP/Drupal settings:
#
# Protect files and directories from prying eyes.
Order allow,deny
# Don't show directory listings for URLs which map to a directory.
Options -Indexes
# Follow symbolic links in this directory.
Options +FollowSymLinks
# Make Drupal handle any 404 errors.
ErrorDocument 404 //index.php
# Set the default handler.
DirectoryIndex index.php index.html index.htm
# Override PHP settings that cannot be changed at runtime. See
# sites/default/default.settings.php and drupal_environment_initialize() in
# includes/bootstrap.inc for settings that can be changed at runtime.
# PHP 5, Apache 1 and 2.
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
# Requires mod_expires to be enabled.
# Enable expirations.
ExpiresActive On
# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
# Various rewrite rules.
RewriteEngine on
# Set "protossl" to "s" if we were accessed via https://. This is used later
# if you enable "www." stripping or enforcement, in order to ensure that
# you don't bounce between http and https.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]
# Make sure Authorization HTTP header is available to PHP
# even when running as CGI or FastCGI.
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Block access to "hidden" directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or
# Git to store control files. Files whose names begin with a period, as well
# as the control files used by CVS, are protected by the FilesMatch directive
# above.
#
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
# not possible to block access to entire directories from .htaccess, because
# is not allowed here.
#
# If you do not have mod_rewrite installed, you should remove these
# directories from your webroot or otherwise protect them from being
# downloaded.
RewriteRule "(^|/)\." - [F]
# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the 'www.' prefix,
# (http://example.com/... will be redirected to http://www.example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} .
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.dlyaturista.info$ [NC]
RewriteRule ^(.*)$ https://dlyaturista.info/$1 [R=301,L]
# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
RewriteBase /
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /
# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
# Rules to correctly serve gzip compressed CSS and JS files.
# Requires both mod_rewrite and mod_headers to be enabled.
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
# Serve correct encoding type.
Header set Content-Encoding gzip
# Force proxies to cache gzipped & non-gzipped css/js files separately.
Header append Vary Accept-Encoding
ExpiresActive On
# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600
Вот то, что вам нужно.
Можно заменить на:
что даст вам время устаревания кеша статики в пол года.
Нет, это не помогает.
Это я пробовала и раньше, причем и в разных вариациях тоже.
Я не пробовала вариант с Cache-Control: max-age=604800
Точнее пробовала, но я не знаю как правильно прописать или может куда конкретно
Я прописывала следующее
# 1 Month for most static assets
Header set Cache-Control "max-age=2592000"
В итоге у меня был белый экран
Сделайте пожалуйста то, что я выше советовал, и давайте посмотрим на результат. Полностью предупреждения из этого раздела не исчезнут, т.к. у вас подключены внешние ресурсы, которыми вы управлять не можете, но для вашего домена предупреждений быть не должно. Если не сработает, то будем дальше разбераться.
Сделала
Добавьте там же ещё вот такой блок:
ExpiresByType text/css "access plus 6 months"
ExpiresByType image/png "access plus 6 months"
ExpiresByType image/jpeg "access plus 6 months"
Добавила
Ну и отлично, всё получилось - у вас остались там только внешние ресурсы(usocial и яндекс метрика), на expires которых вы не можете повлиять, если только отключить их, если они не нужны.
Борис, в первую очередь хочу Вам сказать большое спасибо за помощь)
И если, Вы не против еще один вопрос -
Чтобы добавить вот это
# One month for most static assets
Header set Cache-Control "max-age=31536000, public"
Я полностью удалила вот это
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
Это правильно или это не нужно удалять?
Ни удалять, ни добавлять этот заголовок не надо.
В смысле? так я уже удалила и добавила - поэтому и получилось, то что есть
Вот ссылка на файл где файл .htaccess Можете проверить строчки с 42 по 56
https://yadi.sk/d/FQu6y2esvpRIcQ
То, что получилось не из-за cache control, а из за expires.
Я еще добавила вот это
# One month for most static assets
Header set Cache-Control "max-age=31536000, public"
Это не поможет?
Я не специалист, но может это играет роль - у меня Веб-сервер Nginx
И я вычитала, что для этого сервера, совсем другое прописывать нужно
location ~* \.(js|css|png|jpg|jpeg|gif)$ {
expires 86400s;
log_not_found off;
}
Вопрос - куда именно?
Или я совсем не туда смотрю?
В вашем случае, вероятнее всего, nginx является reverse proxy, и все запросы без изменений передаёт apache. Скорее всего никакого доступа к конфигу nginx у вас нет, да и не нужен он вам.
Если pagespeed нужно "прокачать", то обращайтесь
Метрику отключите.
Какое отношение имеет метрика к статике отдаваемой с домена?
Пейджспид вырастет
Просто бездумное выращивание pagespeed бесполезно.
Васек, это наиглупейшее решение.
Сейчас метрика ставится с обновленным кодом под вебвизор 2.0 и контентной аналитикой микроразметки.
И это все должно быть в "зеленой зоне".
Попробуйте https://www.netangels.ru/support/hosting-old/htaccess-cache/
но не всегда помогает так как серверные системы разные, тогда надо обращаться в админу сервера.