diff --git a/sw.js b/sw.js index 92c3a8f..342bae3 100644 --- a/sw.js +++ b/sw.js @@ -1,9 +1,15 @@ // Service Worker — غمبولة بيوتي // كاش شل التطبيق الأساسي عشان يشتغل Offline بعد أول زيارة. -// ملاحظة: النسخة دي بتاخد بيانات الأوردرات كلها من localStorage (مش بتتخزن هنا)، +// ملاحظة: النسخة دي بتاخد بيانات الأوردرات كلها من localStorage/السيرفر (مش بتتخزن هنا)، // فالـ Service Worker مسؤول بس عن كاش الملفات الثابتة (HTML/CSS/JS/الأيقونات). - -const CACHE_NAME = 'gamboola-app-v1'; +// +// ⚠️ استراتيجية Network-first: أي تحديث بننشره على السيرفر يوصل فورًا لأي جهاز +// عنده نت، وبيرجع للنسخة المخزنة بس لو النت مقطوع (Offline). ده بيمنع مشكلة +// "التطبيق فاضل عالق على نسخة قديمة" اللي كانت بتحصل مع Cache-first. +// +// ⚠️ لازم يترفع رقم CACHE_NAME (v1 → v2 → ...) مع كل نشر جديد لملفات +// app.js / index.html / styles.css عشان الأجهزة القديمة تاخد نسخة جديدة فورًا. +const CACHE_NAME = 'gamboola-app-v2'; const CORE_ASSETS = [ './index.html', './styles.css', @@ -30,24 +36,20 @@ self.addEventListener('activate', (event) => { self.clients.claim(); }); -// استراتيجية: Cache-first للملفات الأساسية، مع رجوع للشبكة لو الملف مش في الكاش، -// وتحديث الكاش في الخلفية لو النت متاح. +// استراتيجية: Network-first — نجرب الشبكة الأول عشان أي تحديث يوصل فورًا، +// ولو النت مقطوع أو الطلب فشل، نرجع للنسخة المخزنة في الكاش (Offline support). self.addEventListener('fetch', (event) => { if (event.request.method !== 'GET') return; event.respondWith( - caches.match(event.request).then((cached) => { - const networkFetch = fetch(event.request) - .then((response) => { - if (response && response.status === 200 && response.type === 'basic') { - const clone = response.clone(); - caches.open(CACHE_NAME).then((cache) => cache.put(event.request, clone)); - } - return response; - }) - .catch(() => cached); - - return cached || networkFetch; - }) + fetch(event.request) + .then((response) => { + if (response && response.status === 200 && response.type === 'basic') { + const clone = response.clone(); + caches.open(CACHE_NAME).then((cache) => cache.put(event.request, clone)); + } + return response; + }) + .catch(() => caches.match(event.request)) ); });