learn

رفع خطای Leverage Browser Caching در GTmetrix

راهنمای تنظیم زمان کش مرورگر برای فایل‌های ثابت، با نمونه‌های محدود و آزمون پاسخ واقعی.

رفع خطای Leverage Browser Caching یعنی بررسی اینکه فایل‌های مناسب، مدت کافی در کش مرورگر قابل استفاده باشند. این عنوان در گزارش‌های قدیمی GTmetrix دیده می‌شد. در گزارش‌های جدید، توصیه‌های مشابه می‌توانند نام دیگری داشته باشند؛ فهرست فایل‌ها و علت کوتاه‌بودن عمر کش مهم‌تر از نام هشدار است.

پیش از رفع خطای Leverage Browser Caching

درخواست‌های گزارش را دسته‌بندی کنید: فایل ثابت متعلق به خودتان، پاسخ پویای برنامه یا فایل سرویس بیرونی. برای صفحهٔ حساب کاربری و فایل عمومی تصویر نباید قانون یکسان بگذارید. همچنین کش مرورگر با کش صفحه در وردپرس و کش CDN یکی نیست؛ تنظیم یکی الزاماً دیگری را تغییر نمی‌دهد.

در Cache-Control مقدار max-age عمر تازگی را بر حسب ثانیه تعیین می‌کند. Expires یک زمان انقضای مطلق است. تازه‌بودن پاسخ می‌تواند استفادهٔ دوباره بدون شبکه را ممکن کند؛ پس Cache-Control صرفاً «بررسی تغییر در هر بازدید» نیست. استفاده از هر دو هدر نیز الزاماً دو برابر منفعت ایجاد نمی‌کند.

انتخاب مدت کش

مدت مناسب به دفعات تغییر و روش انتشار فایل وابسته است. برای فایلی که با همان نام بازنویسی می‌شود، زمان طولانی ممکن است نمایش اصلاحات را عقب بیندازد. برای فایل نسخه‌دار، تغییر نام یا هش هنگام انتشار امکان کش طولانی‌تر را فراهم می‌کند. نشانی مقاله را برای این کار تغییر ندهید؛ نسخه‌گذاری به فایل‌های استاتیک مربوط است.

عدد یک روز در نمونه‌های زیر فقط نمونهٔ آموزشی است و تنظیم بهینهٔ همهٔ سایت‌ها نیست. یک روز ۸۶۴۰۰ ثانیه است. پیش از انتخاب یک ماه یا یک سال، روش رساندن نسخهٔ تازه به کاربران را مشخص کنید. پاک‌کردن کش CDN نیز الزاماً فایل تازه را از کش مرورگر همهٔ کاربران حذف نمی‌کند.

نمونهٔ محدود در Apache

اگر mod_expires فعال و استفاده از آن در htaccess مجاز است، می‌توان برای نوع مشخصی از فایل عمومی تنظیم گذاشت. نمونهٔ زیر فقط JPEG، PNG و WebP را پوشش می‌دهد و نباید در مسیری قرار گیرد که تصاویر خصوصی با همین نوع پاسخ می‌فرستد:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpeg "access plus 1 day"
    ExpiresByType image/png "access plus 1 day"
    ExpiresByType image/webp "access plus 1 day"
</IfModule>

طبق مستند mod_expires، این ماژول Expires و max-age را تولید می‌کند. بنابراین بدون بررسی، دستور تکراری Cache-Control اضافه نکنید. کوتیشن‌ها باید ساده باشند؛ image/jpeg نوع صحیح JPEG است. قانون یک‌ماههٔ عمومی برای text/html یا ExpiresDefault را صرفاً برای سبزکردن گزارش روی تمام سایت اعمال نکنید.

نمونهٔ محدود در Nginx

Nginx فایل htaccess را نمی‌خواند. اگر پوشهٔ /public-assets/ واقعاً فقط فایل عمومی ثابت دارد، مدیر سرور می‌تواند در پیکربندی سازگار سایت، نمونه‌ای مانند زیر را بررسی کند. این مسیر فرضی است؛ آن را بدون شناخت locationهای موجود اضافه نکنید:

location /public-assets/ {
    try_files $uri =404;
    expires 1d;
}

دستور expires در Nginx هدرهای مرتبط را تنظیم می‌کند. اولویت locationها، مسیر ریشه و قواعد فعلی ممکن است نتیجه را عوض کند. پیش از بارگذاری تنظیمات، صحت پیکربندی باید کنترل شود؛ روی هاست اشتراکی از پشتیبانی بخواهید سیاست همان فایل را بررسی کند.

بررسی نتیجه و خطاهای رایج

در Network مرورگر، پاسخ نهایی فایل را باز کنید و Cache-Control، Expires و وضعیت دریافت را ببینید. اگر CDN یا افزونه سیاست دیگری می‌فرستد، همان لایهٔ مؤثر را اصلاح کنید. برای فایل شخص ثالث، htaccess سایت شما کنترلی بر هدر سرور دیگر ندارد.

پس از تغییر، هم بارگذاری مجدد و هم انتشار نسخهٔ تازهٔ فایل را آزمایش کنید. صفحات ورود و خرید باید همچنان درست کار کنند. حذف کلی no-store یا خصوصی‌بودن پاسخ برای گرفتن نمرهٔ بهتر، راه‌حل درستی نیست؛ هشدار را بر اساس هدف واقعی هر منبع تفسیر کنید.

مطالعهٔ مرتبط

بازبینی فنی: ۱۳ آبان ۱۴۰۵. تاریخ انتشار اولیه و نشانی قبلی حفظ شده‌اند.

مطالب مرتبط

ارسال نظر

فهرست مطالب