بازگشت به مقالات
معماری Offline-First: درس‌های Metaponic

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 ادغام فقط جایی که برخورد ممکن بود.

چک‌لیست قبل از وعده آفلاین

  1. کدام صفحات بدون شبکه بی‌معنا هستند؟
  2. سقف حجم IndexedDB روی اندروید متوسط چیست؟
  3. تمایز «ذخیره محلی» و «همگام‌شده» در copy چگونه است؟
  4. آیا QA مسیر airplane-mode را برای هر mutation حیاتی دارد؟