رفع خطای Leverage browser caching در سایت
یکی از خطاهای رایج در سایت GTmetrix خطای:
Leverage browser caching for the following cacheable resources
است که در این مقاله با نحوهی رفع آن در خدمت شما هستیم.
رفع خطای Leverage browser caching در سایت
ابتدا وارد کنترل پنل هاست خود شوید. در مرحلهی بعدی file manager خود را باز کنید و در بخش public html فایل .htaccess خود را باز کنید. در مرحلهی بعدی انتهای فایل .htaccess کد زیر را وارد کنید.
کد 1: در این کد بخشی از دیتای شما که معمولتر است قرار گرفته است:
## EXPIRES CACHING ## <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType image/gif "access 1 year" ExpiresByType image/png "access 1 year" ExpiresByType text/css "access 1 month" ExpiresByType text/html "access 1 month" ExpiresByType application/pdf "access 1 month" ExpiresByType text/x-javascript "access 1 month" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType image/x-icon "access 1 year" ExpiresDefault "access 1 month" </IfModule> ## EXPIRES CACHING ##
کد 2: این کد حالت پیشرفتهتری نسبت به کد قبلی دارد؛ دقت کنید که تنها از یکی از این دو کد در فایل .htaccess خود استفاده کنید:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# Data interchange
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rdf+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/ld+json "access plus 0 seconds"
ExpiresByType application/schema+json "access plus 0 seconds"
ExpiresByType application/vnd.geo+json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Favicon (cannot be renamed!) and cursor images
ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 week"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
# Manifest files
ExpiresByType application/manifest+json "access plus 1 week"
ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
ExpiresByType text/cache-manifest "access plus 0 seconds"
# Media files
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType image/bmp "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType image/webp "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# Web fonts
# Embedded OpenType (EOT)
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType font/eot "access plus 1 month"
# OpenType
ExpiresByType font/opentype "access plus 1 month"
# TrueType
ExpiresByType application/x-font-ttf "access plus 1 month"
# Web Open Font Format (WOFF) 1.0
ExpiresByType application/font-woff "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType font/woff "access plus 1 month"
# Web Open Font Format (WOFF) 2.0
ExpiresByType application/font-woff2 "access plus 1 month"
# Other
ExpiresByType text/x-cross-domain-policy "access plus 1 week"
</IfModule>
حل این مشکل با cache control
در این روش به جای کدهای بالا از کد زیر در فایل htaccess خود استفاده کنید:
<filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "max-age=84600, public" </filesMatch>
قبل از انجام این کار پیشنهاد میشود از اطلاعات سایت خود بکاپ تهیه کنید.
اگر روشهای بهتری برای انجام این کار سراغ دارید در بخش نظرات برای ما بنویسید.



















استفاده از ETag بهتره یا Last-Modified رو پیشنهاد میدید؟
اگر به دنبال سادگی باشید بهتر است از Last-Modified استفاده کنید در غیراینصورت برای دقت بیشتر از ETag استفاده کنید.
در حضور Service Worker این تنظیمات سرور عملاً نادیده گرفته نمیشن؟
خیر این تنظیمات از سمت وب سرور اعمال میشود.
چرا برای HTML زمان انقضا صفر گذاشته شده و فقط روی سایر MIMEها طولانیه؟
معمولا تغییرات روی فایلها کمتر از محتوای صفحات اتفاق میافتد.
برای سایتهایی که CDN دارن بهتره سیاست کش روی مبدا تنظیم بشه یا روی CDN؟
بهتره کش سمت cdn مدیریت شود.
آیا فعالسازی mod_expires و Cache-Control بهصورت همزمان تعارض ایجاد نمیکنه؟
فعالسازی mod_expires و Cache-Control بهصورت همزمان معمولاً تعارضی ایجاد نمیکند. این دو روش بهطور مکمل عمل میکنند. mod_expires زمان انقضا را برای منابع مشخص میکند، در حالی که Cache-Control میتواند سیاستهای کش را تعیین کند. با این حال، بهتر است که تنظیمات را بهدقت بررسی کنید تا مطمئن شوید که هیچ تناقضی در زمانهای انقضا وجود ندارد.