CodeShot

استراتژی Cache-First در مقابل استراتژی Network-First

در استراتژی Cache-First، Service Worker ابتدا نسخه ذخیره‌شده در Cache را برمی‌گرداند و فقط در نبود آن به شبکه مراجعه می‌کند، در حالی که در Network-First ابتدا تلاش می‌کند از شبکه پاسخ تازه بگیرد و فقط در صورت شکست اتصال به نسخه Cache شده برمی‌گردد.

ویژگیاستراتژی Cache-Firstاستراتژی Network-First
اولویت اولCacheشبکه
سرعت پاسخبسیار سریعوابسته به شبکه
تازگی دادهممکن است قدیمی باشدهمیشه تازه (در صورت اتصال)

کِی از استراتژی Cache-First استفاده کنیم؟

برای فایل‌های استاتیک که به‌ندرت تغییر می‌کنند (فونت، آیکون، CSS) و سرعت بارگذاری فوری اهمیت دارد.

کِی از استراتژی Network-First استفاده کنیم؟

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

مثال استراتژی Cache-First

// Cache-First
self.addEventListener("fetch", (e) => {
  e.respondWith(
    caches.match(e.request).then((r) => r || fetch(e.request))
  );
});

مثال استراتژی Network-First

// Network-First
self.addEventListener("fetch", (e) => {
  e.respondWith(
    fetch(e.request).catch(() => caches.match(e.request))
  );
});

اشتباه رایج

اشتباه رایج استفاده از Cache-First برای داده‌های پویا و حساس به زمان است؛ کاربر ممکن است هفته‌ها داده قدیمی ببیند چون Service Worker هرگز به سراغ شبکه نمی‌رود مگر Cache خالی باشد.

جمع‌بندی

برای دارایی‌های ثابت از Cache-First و برای داده‌های به‌روز و پویا با پشتیبان آفلاین از Network-First استفاده کنید.