بازگشت به مقالات

PWA · Performance
معماری Offline-First: درسهای Metaponic
۱۴۰۲ اسفند · 11 دقیقه مطالعه
محصول Brain در Metaponic باید روی شبکه ناپایدار حس بومی میداد: اپراتور گلخانه هنوز در زیرزمین و مزرعه داشبورد باز میکند. PWA را طوری ساختیم که جریانهای اصلی — نشست، آخرین اسنپشات سنسور، آلارم و زمینه نقشه — آفلاین بمانند و بعد از اتصال همگام شوند.
offline-first برای ما چه بود
- پیشکش App shell با Service Worker
- IndexedDB برای تاریخچه سنسور و لاگ آلارم
- Stale-while-revalidate برای GETهای نمودار
- صف mutation برای نوشتنهایی که نباید گم شوند
انتخاب مدل داده
وضعیت UI زودگذر را از اسنپشات دامنه پایدار جدا کردیم. نمودار میتوانست به آخرین N نقطه محلی تنزل کند؛ آلارمها نشان «در انتظار sync» داشتند تا کاربر فکر نکند تأیید محلی به سرور رسیده است.
نقشه، نمودار و وزن
کاشیهای Leaflet و Chart.js سنگیناند. مسیر نقشه را lazy load کردیم، زوم آفلاین را محدود کردیم و استک کامل نمودار را در first paint نیاوردیم.
سیاست تعارض
برای حقیقت سنسور سرور برنده و برای تأیید کاربر تا زمان sync کلاینت برنده بود، با UI ادغام فقط جایی که برخورد ممکن بود.
چکلیست قبل از وعده آفلاین
- کدام صفحات بدون شبکه بیمعنا هستند؟
- سقف حجم IndexedDB روی اندروید متوسط چیست؟
- تمایز «ذخیره محلی» و «همگامشده» در copy چگونه است؟
- آیا QA مسیر airplane-mode را برای هر mutation حیاتی دارد؟