آموزش CDN و سرعت سایت

کش (Cache) چیست و چطور سایت را سریع‌تر می‌کند؟

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۴ دقیقه

browseredgeoriginHITCacheآموزش CDN و سرعت سایتکش (Cache) چیست وچطور سایت را سریع‌ترمی‌کند؟مجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

کش یعنی نگهداری یک نسخه از پاسخ نزدیک‌تر به کاربر تا درخواست بعدی سریع‌تر و بدون مراجعه به سرور اصلی پاسخ داده شود. سه لایهٔ اصلی وجود دارد: کش مرورگر، کش CDN و کش سمت سرور. اینکه هر فایل چقدر و کجا کش شود را هدر Cache-Control تعیین می‌کند. قانون طلایی: فایل‌های ثابت نسخه‌دار (CSS، JS، تصاویر) کش طولانی، صفحات HTML کش کوتاه یا بدون کش.

یک مثال ساده

تصور کنید لوگوی سایت شما ۵۰ کیلوبایت است و هر بازدیدکننده در هر صفحه آن را دانلود می‌کند. بدون کش، ۱۰ هزار بازدید صفحه یعنی ۱۰ هزار بار ارسال همان فایل از سرور. با کش مرورگر، هر کاربر فقط یک‌بار آن را دانلود می‌کند؛ با کش CDN، حتی همان یک‌بار هم از لبهٔ نزدیک کاربر ارسال می‌شود نه از سرور شما. نتیجه: بارگذاری سریع‌تر، بار کمتر سرور و ترافیک کمتر.

سه لایهٔ کش

لایه کجاست چه چیزی را کش می‌کند کنترل با
مرورگر دستگاه کاربر فایل‌های ثابت، گاهی صفحات Cache-Control، ETag
CDN لبه‌های نزدیک کاربر فایل‌های ثابت، صفحات قابل اشتراک Cache-Control، s-maxage، تنظیمات CDN
سرور خود سرور نتیجهٔ پردازش صفحه، کوئری‌های دیتابیس افزونه‌های کش، Redis، FastCGI cache
لایه‌های کش از نزدیک به کاربر تا سرور
کش مرورگرروی دستگاه کاربر؛ سریع‌ترین، اما فقط برای همان کاربر
کش لبهٔ CDNبرای همهٔ کاربران یک منطقه مشترک است
کش سمت سرورمثل کش صفحه یا کوئری در Nginx، Redis یا خود برنامه
سرور اصلی و دیتابیسگران‌ترین مسیر؛ فقط وقتی هیچ کشی پاسخ نداشته باشد
شکل ۱ هرچه پاسخ از لایهٔ بالاتر برگردد، سریع‌تر است و بار کمتری به سرور اصلی می‌رسد.

هدر Cache-Control

مهم‌ترین ابزار کنترل کش، هدر Cache-Control در پاسخ سرور است:

مقدار معنی
public, max-age=31536000, immutable همه (مرورگر و CDN) تا یک سال کش کنند و دوباره بررسی نکنند
public, max-age=300 تا ۵ دقیقه کش شود
no-cache کش شود اما پیش از هر استفاده با سرور اعتبارسنجی شود
no-store اصلاً ذخیره نشود (اطلاعات حساس)
private فقط مرورگر کاربر کش کند، نه CDN
s-maxage=600 مدت کش برای کش‌های مشترک مثل CDN

بررسی هدرهای یک آدرس:

curl -I https://www.example.com/style.css
root@server: ~
$ curl -sI https://example.com/app.css | grep -i cachecache-control: public, max-age=31536000, immutable$ curl -sI https://example.com/ | grep -i cachecache-control: no-cache$ 
شکل ۲ با curl -I هدرهای کش هر آدرس را ببینید: فایل نسخه‌دار یک‌ساله کش می‌شود و صفحهٔ HTML هر بار اعتبارسنجی.

TTL مناسب برای هر نوع محتوا

نوع محتوا پیشنهاد دلیل
CSS و JS با نام نسخه‌دار (app.3f9a.js) یک سال، immutable با تغییر فایل، نامش عوض می‌شود
تصاویر و فونت‌ها ۳۰ روز تا یک سال به‌ندرت تغییر می‌کنند
صفحات HTML عمومی چند دقیقه یا no-cache محتوا به‌روز بماند
صفحات شخصی (پنل، سبد خرید) private یا no-store نباید بین کاربران مشترک شود
پاسخ‌های API بسته به داده؛ معمولاً no-store داده‌های لحظه‌ای

نسخه‌گذاری فایل‌ها: کش طولانی بدون دردسر

مشکل کش طولانی این است که اگر CSS را تغییر دهید، کاربران تا مدتی نسخهٔ قدیمی را می‌بینند. راه‌حل استاندارد، تغییر آدرس فایل با هر تغییر محتوا است:

  • style.css?v=14842b (پارامتر نسخه)
  • style.14842b.css (هش در نام فایل؛ ابزارهای build مانند Vite و Webpack خودکار انجام می‌دهند)

به این ترتیب HTML (که کش کوتاه دارد) همیشه به نسخهٔ جدید اشاره می‌کند و فایل‌های قدیمی بی‌خطر در کش می‌مانند.

تنظیم در Nginx

location ~* \.(css|js|woff2|png|jpg|jpeg|webp|svg)$ {
    add_header Cache-Control "public, max-age=2592000";
}
location / {
    add_header Cache-Control "no-cache";
    try_files $uri $uri/ /index.html;
}

راهنمای نصب Nginx: نصب Nginx و SSL رایگان.

پاک‌سازی (Purge) کش

  • مرورگر: Ctrl+Shift+R یا پنجرهٔ ناشناس برای دیدن نسخهٔ تازه.
  • CDN: از گزینهٔ پاک‌سازی کش در پنل CDN (اگر ارائه شده) یا تغییر آدرس فایل (نسخه‌گذاری).
  • کش سرور: از افزونهٔ کش CMS یا با پاک کردن پوشه/کلیدهای کش.

بهترین استراتژی این است که با نسخه‌گذاری، نیاز به پاک‌سازی دستی را تقریباً حذف کنید.

کش و ترافیک: اثر مالی

در سرویس‌هایی که ترافیک مصرفی هزینه دارد، کش مستقیماً هزینه را کم می‌کند: هر درخواستی که از کش مرورگر پاسخ داده شود، اصلاً ترافیکی ایجاد نمی‌کند. فایل‌های بزرگ (تصاویر، ویدیو، فایل‌های دانلودی) بیشترین سهم را دارند؛ فشرده‌سازی تصاویر (WebP) و کش درست، بزرگ‌ترین صرفه‌جویی را ایجاد می‌کند. دربارهٔ تفاوت ترافیک و پهنای باند: پهنای باند و ترافیک.

خطاهای رایج

مشکل علت راه‌حل
کاربران تغییرات CSS را نمی‌بینند کش طولانی بدون نسخه‌گذاری نسخه‌گذاری فایل‌ها
کاربر اطلاعات کاربر دیگر را می‌بیند کش صفحهٔ شخصی در CDN private/no-store برای صفحات شخصی
کش اصلاً کار نمی‌کند هدر Set-Cookie یا no-store روی فایل‌های ثابت هدرهای فایل‌های ثابت را اصلاح کنید
صفحهٔ خطا کش شده کش شدن پاسخ‌های 5xx فقط پاسخ‌های 200 را کش کنید

سؤالات متداول

کش و CDN یکی هستند؟

خیر؛ CDN شبکه‌ای از سرورهای لبه است و کش یکی از کارهایی است که انجام می‌دهد. CDN چیست؟

ETag چیست؟

شناسهٔ نسخهٔ یک فایل است؛ مرورگر با آن از سرور می‌پرسد «آیا فایل تغییر کرده؟» و اگر نه، پاسخ کوتاه 304 می‌گیرد.

کش برای سئو مهم است؟

به‌طور غیرمستقیم بله؛ سرعت بارگذاری بخشی از تجربهٔ کاربری و معیارهای Core Web Vitals است.

صفحات پویا را هم می‌توان کش کرد؟

بله، برای کاربران مهمان و با مدت کوتاه (مثلاً یک دقیقه)؛ این کار بار سرور را در ترافیک بالا به‌شدت کم می‌کند.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.