استراتژی 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 استفاده کنید.
