Кэширование ресурсов в браузере

Приветствую,

при анализе вопросов чрезмерно долгой загрузки сайта появилась потребность в подключении заголовков кеширования на стороне клиента. Перепробовал разные предложенные конфигурации .htaccess, но они не приводят к должному результату, а анализаторы производительности сайтов и чекеры показывают следующую картину:

Содержимое файла .htaccess:

DirectoryIndex index.html index.php

<IfModule mod_deflate.c>
	# Compress HTML, CSS, JavaScript, Text, XML, fonts
	AddOutputFilterByType DEFLATE application/javascript application/x-javascript text/javascript application/json
	AddOutputFilterByType DEFLATE application/x-font application/x-font-opentype application/x-font-otf application/x-font-truetype application/x-font-ttf font/opentype font/otf font/ttf application/x-woff application/x-font-woff
	AddOutputFilterByType DEFLATE text/css text/html text/plain
    AddOutputFilterByType DEFLATE image/png image/jpeg

	<IfModule mod_headers.c>
		# Remove browser bugs (only needed for really old browsers)
		BrowserMatch ^Mozilla/4 gzip-only-text/html
		BrowserMatch ^Mozilla/4\.0[678] no-gzip
		BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
		Header append Vary User-Agent
	</IfModule>
</IfModule>

<IfModule mod_headers.c>
	<FilesMatch "\.(ttf|ttc|otf|eot|woff|css|png|gif|ico|jpe?g)$">
		Header set Access-Control-Allow-Origin "*"
	</FilesMatch>
</IfModule>

# Cache all images for 2 weeks
#<IfModule mod_expires.c>
#	<FilesMatch "\.(jpg|jpeg|png|gif|tiff|bmp|js|css)$">
#	    ExpiresActive on
#	    ExpiresDefault "access plus 2 weeks"
#	</FilesMatch>
#</IfModule>

<IfModule mod_headers.c>
	<filesMatch "\.(gif|png|jpg|jpeg|ico|js|css)$">
		#Header set Cache-Control "max-age=1209600"
	</filesMatch>
</IfModule>


<IfModule mod_rewrite.c>
RewriteEngine on
# Please note that RewriteBase setting is obsolete use it only in case you experience  some problems with SEO addon.
# Some hostings require RewriteBase to be uncommented
# Example:
# Your store url is http://www.yourcompany.com/store/cart
# So "RewriteBase" should be:
# RewriteBase /store/cart
# RewriteBase /
Options -MultiViews

RewriteRule ^init.php$ - [F,L,NC]

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{REQUEST_URI} ^api/(.*)$ [or]
RewriteCond %{REQUEST_URI} .*/api/(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .*api/(.*)$ api.php?_d=$1 [L,QSA]

RewriteCond %{REQUEST_URI} \.(png|gif|ico|swf|jpe?g|js|css|ttf|svg|eot|woff|yml|xml)$ [NC,or]
RewriteCond %{REQUEST_URI} store_closed.html$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)\/(.*)$ $2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L,QSA]

</IfModule>

# This prevents possible problems when downloading files
<IfModule mod_php5.c>
    php_flag zlib.output_compression Off
</IfModule>




<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 14 days"
ExpiresByType text/css "access 7 days"
ExpiresByType text/html "access 2 days"
ExpiresByType image/png "access 1 month"
ExpiresByType image/gif "access 1 month"
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/jpeg "access 1 month"
ExpiresByType text/x-javascript "access 1 year"
ExpiresByType application/pdf "access 1 week"
ExpiresByType image/x-icon "access 2 months"
ExpiresByType application/x-shockwave-flash "access 7 months"
</IfModule>

Варианты навскидку:

  1. У вас закомментирован раздел mod_expires. Раскомментируйте строки.
  2. “IfModule mod_deflate.c”, “IfModule mod_headers.c”, “IfModule mod_expires.c”. Это проверка на установленные в Apache модули. Если их нет, то директивы внутри условий выполнятся не будут.
  3. Файл .htaccess обрабатывается только в Apache, если на сервере установлен Nginx, то абсолютно неважно в файле.

Здрасвуйте ребята). Подкажите, как можно решить дунную проблему ("
Задайте правила эффективного использования кеша для статических объектов")

http://prntscr.com/t2r8ch

На сервере используем Nginx

Буду очень благодарна на подсказку!!!:lips:

Напинайте фейсбуку с гуглом, чтобы кешировали свои ресурсы))

4 лайка

А как на счет того , чтобы кешировать сторонные ресурсы через функцию, так как описано тут https://vasilenko.info/pagespeed-cache/

Возможный вариант, но есть ряд “но”. Например, любой из этих сервисов скажет Вам что ни в коем случае нельзя скачивать и подключать файл локально, так как Вы не сможете быстро реагировать на изменения в коде. Это та самая причина, по которой они не используют кеширование самостоятельно.

Ещё одна неприятная сторона - такая реализация вынуждает переписывать под себя модули аналитики, ретаргетига, метрик, чатиков, ботиков (то что подключено не через код, а через модуль).

Теоретически, в само скачивание пользователем скрипта напрямую с сервиса тоже может быть вшита какая-то логика (к пример, отслеживание рефералов, хранение сессии за пользователем, отслеживание действий пользователя между разными сайтами и всё что это может дать). В таком случае, локальные скрипты будут работать не корректно.

В общем, достаточно нюансов, чтобы не заниматься подобным.

Спасибо