وقتی اینترنت اپلیکیشنتان قطع میشود چه اتفاقی میافتد؟ (و چطور به کار ادامه دهید)
وقتی اینترنت اپلیکیشن شما قطع میشود، یک اپلیکیشن آفلاینمحور کرش نمیکند یا هنگ نمیکند — به شما اجازه میدهد به کارتان ادامه دهید، تغییرات را بهصورت محلی ذخیره میکند و به محض اتصال دوباره، چه سه دقیقه بعد باشد چه سه روز بعد، همهچیز را همگامسازی میکند.
وایفایتان قطع میشود. در حال پر کردن یک فرم در اپلیکیشنتان هستید—نیمی از فیلدها پر شدهاند، پنج دقیقه روی این کار وقت گذاشتهاید. چه اتفاقی میافتد؟
اگر اپلیکیشنتان فقط آنلاین کار میکند، داستان اینطور است: صفحه بارگذاری مجدد میشود یا رفرش میشود. اطلاعاتتان ناپدید میشود. از اول شروع میکنید. اپلیکیشن را میبندید و دیگر برنمیگردید.
اگر اپلیکیشنتان آفلاینمحور باشد، داستان فرق میکند: به تایپ کردن ادامه میدهید. اطلاعاتتان امن است. وقتی وایفای برمیگردد (سه دقیقه بعد، یا سه روز بعد)، همهچیز همگامسازی میشود. طراحی آفلاینمحور در یک جمله همین است: اپلیکیشن بدون اتصال اینترنت هم کار میکند، تغییراتتان را بهصورت محلی ذخیره میکند و به محض بازگشت آنلاین، آنها را همگامسازی میکند.
بیشتر سازندگان اپلیکیشن از حالت آفلاین صرفنظر میکنند، چون ساختنش آسانتر است. اما آفلاینمحور بودن پیچیده نیست—عمدی است. همین تفاوت است که یک اپلیکیشن را به اپلیکیشنی تبدیل میکند که کاربر به سراغش میرود، نه اپلیکیشنی که حذفش میکند.
وقتی اپلیکیشنتان اینترنت را از دست میدهد واقعاً چه اتفاقی میافتد؟
وقتی اپلیکیشنتان اینترنت را از دست میدهد، یا به کارش ادامه میدهد یا نه—حالت میانهای وجود ندارد. و از دست دادن اتصال هم چیز نادری نیست: کاربری در هواپیما اینترنت ندارد، کاربری در تونل آنتن ندارد، کاربری در یک محل برگزاری رویداد روستایی پوشش ضعیفی دارد، کاربری که روتر خانگیاش ساعت سه صبح ریستارت میشود با وایفای مرده گیر میافتد، کاربری که از هاتاسپات گوشیاش استفاده میکند به سقف مصرفش میخورد.
در همهٔ این موارد، اپلیکیشنتان یا کار میکند یا نه.
ما یک اپلیکیشن ثبت ساعتکاری برای فریلنسرها ساختیم. در حالت آفلاین کرش میکرد. یکی از فریلنسرها (که در کارگاههای ساختمانی بدون آنتن ازش استفاده میکرد) دیگر استفاده نکرد—به مداد و کاغذ برگشت، چون حداقل مداد همهجا کار میکند. سه ماه بعد، بعد از اضافه شدن حالت آفلاین، برگشت و دیگر هم نرفت.
مکانیزم کار ساده است: وقتی اینترنت قطع است کار را بهصورت محلی ذخیره کنید، وقتی اتصال برگشت همگامسازیاش کنید. تمام ماجرا همین است.
انواع مختلف قطعی چیست؟
سه نوع قطعی هست که باید برایشان برنامهریزی کنید: عمدی، غافلگیرکننده و کند—و هرکدام راهحل متفاوتی میخواهند.
قطعی عمدی — کاربر خودش تصمیم گرفته آفلاین کار کند. در هواپیما است یا میداند وایفای خراب است. انتظار دارد بعداً همگامسازی کند. ساختنش سادهترین حالت است: فقط پیشنویسها را محلی ذخیره کنید و وقتی اتصال برگشت آنها را ارسال کنید.
قطعی غافلگیرکننده — اینترنت بهطور ناگهانی قطع شده. کاربر وسط کاری بوده. اگر وسط کار قطعش کنید، عصبانی میشود. راهحل همان است (پیشنویسها را محلی ذخیره کنید)، اما تجربهٔ کاربری باید مهربانتر باشد: نشان دهید اپلیکیشن همچنان کار میکند و وقتی دوباره آنلاین شد به او بگویید.
قطعی کند — اتصال هست، اما آنقدر کند است که انگار وجود ندارد. یک مشتری فرمی را پر میکند، دکمهٔ ارسال را میزند، بعد ۲۰ ثانیه منتظر میماند تا ارسال تمام شود. تا آن موقع فکر میکند چیزی خراب شده و دوباره دکمهٔ ارسال را میزند (حالا یک ارسال تکراری هم دارید). این سختترین نوع برای تست کردن است، اما راهحلش صادقانه است: نشان دهید کاری در حال انجام است (یک اسپینر)، یا اجازه دهید بدون از دست دادن پیشنویس از صفحه خارج شود.
چطور از سازندهٔ اپلیکیشنتان حالت آفلاین بخواهید؟
آن را تکهتکه بخواهید، نه بهعنوان یک ویژگی بزرگ—آفلاینمحور بودن یک فلسفهٔ طراحی است، نه یک تیک ساده. این پنج درخواست مشخص را میتوانید به سازندهتان بگویید:
۱. پیشنویسها را محلی ذخیره کن: «وقتی کسی یک فرم یا یادداشت را پر میکند، آن را روی گوشی/مرورگرش ذخیره کن. اگر صفحه را رفرش کرد، فرم باید همچنان پر باشد.» تستش کنید: چیزی را پر کنید، تب مرورگر را ببندید، دوباره بازش کنید و فرم هنوز آنجاست.
۲. آفلاین کار کن: «اگر اینترنت نیست، اپلیکیشن باید اطلاعاتی که داریم را نشان دهد، اجازه بدهد کاربر بخواند و تغییر بدهد، و تغییرات را برای همگامسازی وقتی اینترنت برگشت در صف بگذارد.» تستش کنید: وایفای را خاموش کنید، سعی کنید کار مفیدی انجام دهید، بعد وایفای را روشن کنید و ببینید دادهها همگامسازی میشوند.
۳. بیسروصدا همگامسازی کن: «وقتی داریم تغییرات را همگامسازی میکنیم، یک پنجرهٔ بزرگ نشان نده. یک نشانگر کوچک نشان بده، مثل «در حال ذخیره…» در بالای صفحه، و وقتی تمام شد ناپدید شود. اگر ذخیرهسازی شکست خورد، تغییر را محلی نگه دار و بعداً دوباره امتحان کن.»
۴. حقیقت را نشان بده: «به کاربر بگو کدام دادهها تازهاند (تازه از سرور همگامسازی شدهاند) و کدامها فقط محلیاند (هنوز همگامسازی نشدهاند). از یک نشانگر یا برچسب کوچک استفاده کن—آن را ترسناک نکن، فقط صادقانه باش.»
۵. یک گردشکار، اول محلی: «کاری که کاربر اصلاً برای انجامش سراغ اپلیکیشن میآید (چک کردن یک رزرو، نوشتن یک یادداشت، ثبت ساعتکاری) باید آفلاین هم کار کند. چیزهای اضافی و خوبولی-ضروری-نیست (جستوجو در همهٔ سوابق قدیمی، گرفتن قیمت زنده) میتوانند به اینترنت نیاز داشته باشند.»
داستانهای واقعی
برنامهریز عروسی یک اپلیکیشن برای مدیریت پاسخهای دعوتنامه (RSVP) ساخته بود. لیست را چاپ میکرد، در مراسمها میگشت و پاسخها را علامت میزد. اما وایفای در محلهای برگزاری مراسم افتضاح بود. او آفلاینمحور بودن را درخواست کرد: چکلیست را محلی ذخیره کن، وقتی به خانه رسید همگامسازی کن. حالا این ابزار اصلی اوست—حتی با اینکه آنتن گوشی دارد، اپلیکیشن بدون انتظار برای داده کار میکند. او عاشقش شده.
معلم کلاس درس از یک اپلیکیشن برای پیگیری پیشرفت دانشآموزان استفاده میکرد. هر بار که بین اتاقهایی با پوشش ضعیف جابهجا میشد، ویرایشهایش را از دست میداد. حالت آفلاین یعنی میتوانست آزادانه کار کند، بعداً همگامسازی کند و مجبور نباشد بین گوشی و شغلش یکی را انتخاب کند. یک تغییر، افزایش اعتماد بزرگ.
کارشناس ارزیاب بیمه گزارشهای خسارت را در محل تنظیم میکرد (در برخی مناطق روستایی آنتن نبود). اپلیکیشن اولیه برای ارسال به اینترنت نیاز داشت. ما پیشنویسهای آفلاین را اضافه کردیم. حالا او فرم را پر میکند، آفلاین ارسال میکند و همگامسازی وقتی در حال رانندگی به سمت خانه است انجام میشود. دیگر خبری از «تا خانه نرسم نمیتوانم چیزی ارسال کنم» نیست.
هر سه مورد را میشد با «فقط وایفای بهتری بگیر» حل کرد، اما دنیای واقعی اینطور کار نمیکند. آفلاینمحور بودن تغییری بزرگتر در اعتماد بود، بزرگتر از یک همگامسازی بهتر.
آیا آفلاینمحور بودن اپلیکیشن شما را سریعتر میکند؟
بله—اپلیکیشنهای آفلاینمحور سریعتر حس میشوند، چون منتظر سرور نمیمانید. تایپ میکنید، اپلیکیشن بهصورت محلی ذخیره میکند (فوری)، و در پسزمینه همگامسازی میکند. نه اسپینری، نه انتظاری. حتی با وجود اینترنت، تجربه سریعتر است، چون سرور سر راه نیست.
یک اپلیکیشن فقط-آنلاین باید منتظر بماند تا سرور هر تغییری را تأیید کند. یک ضربهکلید ← درخواست شبکه ← اعتبارسنجی سرور ← پاسخ ← نمایش به کاربر. معمولاً این روند مشکلی ندارد، اما در شبکههای کند (یا موبایل با سروری کند)، هر تعامل معطل میماند.
ساختن اپلیکیشن آفلاینمحور چقدر هزینه دارد؟
آفلاینمحور بودن از ابتدا زمان مهندسی میطلبد. سازندهٔ اپلیکیشنتان باید به این موارد فکر کند:
- ذخیرهسازی محلی: چطور دادهها را روی گوشی/مرورگر ذخیره کنیم که با کرش کردن اپلیکیشن از بین نروند. سخت نیست، اما باید عمدی باشد.
- حل تعارض: اگر کاربر یک فیلد را آفلاین تغییر دهد، و بعد کس دیگری (یا یک دستگاه دیگر) قبل از همگامسازی همان فیلد را تغییر دهد، کدامیک برنده میشود؟ معمولاً نسخهٔ آنلاین (چون تازهتر است)، اما باید به کاربر هشدار داده شود، نه اینکه غافلگیر شود. مثال واقعی: دو گوشی که همزمان یک یادداشت را آفلاین ویرایش میکنند، هر دو آنلاین میشوند—دومین گوشی که همگامسازی میشود برنده میشود، و کاربر اول میبیند «نسخهٔ شما قدیمیتر بود، این هم نسخهٔ فعلی.»
- دادههای قدیمی: اگر کاربر سه روز آفلاین بوده، آیا اپلیکیشن باید بهمحض اتصال دوباره، بیسروصدا همهچیز را رفرش کند، یا اول از او بپرسد؟ پرسیدن امنتر است—دادههای قدیمی ممکن است تغییرات ذخیرهنشدهای به آنها متصل باشد.
فکر کردن به این موارد رایگان نیست، اما سادهتر از چیزی است که تصور میکنید.
نتیجه: اپلیکیشنهایی که مردم به آنها اعتماد دارند. یک اپلیکیشن آفلاینمحور بهانه نمیآورد («برای استفاده از این باید اینترنت داشته باشی») و کارتان را از دست نمیدهد. این خیلی مهم است.
چطور تست کنید که اپلیکیشنتان آفلاین کار میکند؟
لازم نیست برای تستش سوار هواپیما شوید—حالت هواپیمای گوشیتان محل تست شماست. اینطور:
۱. باز کنید و چیزی پر کنید: کار عادیای انجام دهید (یک فرم پر کنید، یک یادداشت اضافه کنید). ۲. آفلاین شوید: حالت هواپیما را روشن کنید یا وایفای را خاموش کنید. ۳. به کار ادامه دهید: سعی کنید دوباره همان کار را انجام دهید. اگر اپلیکیشن امتناع کرد، یعنی آفلاینمحور بودن آنجا نیست. اگر اپلیکیشن کار کرد، خوب است. اگر گیجکننده بود، از سازندهتان یک نشانگر واضح «شما آفلاین هستید» بخواهید. ۴. دوباره آنلاین شوید: حالت هواپیما را خاموش کنید. ۵. همگامسازی را چک کنید: آیا تغییراتتان بهطور خودکار همگامسازی شد؟ اگر مجبور شدید روی دکمهٔ «همگامسازی» بزنید یا رفرش کنید، هنوز کامل نیست.
بهترین اپلیکیشنهای آفلاین آنقدر عادی حس میشوند که متوجه آفلاین بودنشان نمیشوید—فقط متوجه میشوید که اپلیکیشن همچنان کار میکند.
آیا اپلیکیشنی که ساختهاید واقعاً باید آفلاین هم کار کند؟ اگر جواب این است که «کاربران من اینترنت ناپایداری دارند، یا در جاهایی بدون آنتن کار میکنند»، پس بله. اگر جواب این است که «آنها همیشه روی وایفای پایدار هستند»، فعلاً میتوانید از آن صرفنظر کنید. اما همان لحظهای که کسی بگوید «کارم را از دست دادم»، آرزو میکنید کاش زودتر این را خواسته بودید.