موقع بيتصرف زي تطبيق
الـ Progressive Web App مش framework ولا مكتبة. هو موقع عادي زوّدناه بحاجات بتخليه:
وكلمة Progressive معناها إن الموقع بيشتغل عادي في أي متصفح، واللي بيدعم المميزات دي بياخدها زيادة. مفيش حد بيتحرم من الموقع.
الـ ٣ مكونات
الـ Service Worker بيقدر يغيّر أي رد راجع للصفحة، فالمتصفح مش بيسمح بيه غير على اتصال آمن. (localhost مستثنى عشان التطوير.)
ملف JSON فيه اسم التطبيق وأيقوناته ولونه وبيفتح إزاي. ده اللي بيخلّيه يتسطّب.
ملف JavaScript بيشتغل في الخلفية، منفصل عن الصفحة، وبيعدّي عليه كل request الصفحة بتعمله. ده اللي بيخلّي الموقع يشتغل offline.
الـ Service Worker واقف في النص
ده أهم سطر في المذكرة: الـ Service Worker proxy بين صفحتك والنت. أي fetch أو صورة أو صفحة جديدة بتطلبها، بتعدّي عليه الأول، وهو يقرر يرد منين.
- الصفحة ← Service Worker: fetch('/docker/')
- Service Worker ← الصفحة: الرد
- Service Worker ← Cache Storage: عندك؟
- Cache Storage ← Service Worker: اتفضل
- Service Worker ← السيرفر: مش موجودة؟ هاتها
- السيرفر ← Service Worker: رد جديد
النقط اللي بتتحرك على الأسهم دي الـ requests والـ responses وهي ماشية. الصفحة مش عارفة الرد جه من التلاجة ولا من المطبخ. هي بس طلبت وجالها رد.
Cache Storage غير HTTP cache
المتصفح عنده أصلًا HTTP cache بيمشي على headers زي Cache-Control. الفرق:
| HTTP cache | Cache Storage | |
|---|---|---|
| مين بيتحكم؟ | المتصفح، على حسب headers السيرفر | إنت بالكود جوه الـ Service Worker |
| بيتمسح إمتى؟ | المتصفح يقرر | لما إنت تمسحه (أو المساحة تخلص) |
| offline | مش مضمون | مضمون طول ما الملف محفوظ |