مدّتی پس از ارائهی مفهوم PWA شرکت Google تصمیم گرفت شکاف بزرگی را که بین برنامههای غیر وبی و برنامههای وبی از نظر قابلیّتهای ممکن وجود دارد از بین ببرد.
در گذشته تفکر آنها این بود که با روشی مثل Chrome App این شکاف را پر کنند، ولی تصمیم گرفتند به جای تمرکز روی یک چیز جدید و متفاوت، خود وب را توسعه دهند و این قابلیّتها را به آن اضافه کنند.
این پروژه با نام Capabilities با کد fugu با این آرمان شروع شد که تمام قابلیّتهای برنامههای غیر وبی به برنامههای وبی اضافه شود، آن هم به شکلی که اصول وب در رابطه با مسائلی همچون امنیّت، حریم خصوصی و اطمینان به صورت کامل حفظ شود، زیرا که قابلیّتهای جدید به هیچ وجه نباید باعث شود باز کردن یک صفحهی وب برای کاربران کاری مخاطرهآمیز باشد. مدل مجوّزی این قابلیّتهای جدید باید به صورت کامل تحت کنترل کاربر باشد، و کاربر بتواند به سادگی مجوّز را پس بگیرد.
در گذشته استانداردهای وب در پشت درهای بسته به تصویب میرسید، بعدها مشارکت برنامهنویسان در این استانداردها در قالب پروژهی متنباز در سایتی مثل github انجام میشد و هم اکنون کار از این هم سادهتر شده است و از طریق سایتی مثل discourse.wicg.io برنامهنویسان میتوانند در مورد استانداردهای جدید وب با سازندگان مرورگرها تعامل داشته باشند. پیادهسازی استاندارد جدید در وب اگر اشتباه انجام شود راه برگشتی نخواهد داشت، زیرا این قابلیّت در بسیاری از وبسایتها مورد استفاده قرار خواهد گرفت و تغییرات آن در آینده به سادگی امکانپذیر نخواهد بود، به همین دلیل باید تا حد امکان قبل از تصویب یک استاندارد از برنامهنویسانی که وسط میدان هستند بازخورد گرفته شود تا اشتباهات در طراحی آن استاندارد شناسایی شود. پروژهی Capabilities از این اصل مهم غفلت نکرده است و در فرآیندی که در نظر گرفته است بازخورد برنامهنویسان بسیار مهم است.
فرآیند پروژهی فوگو
این قابلیّتهای جدید در فرآیندی چند مرحلهای طرّاحی و پیادهسازی میشود:
- شناسایی نیاز: ابتدا با تحلیل لیست مشکلات گزارش شده در مرورگر Chrome یا درخواستهای صریح برنامهنویسان برای اضافه شدن قابلیّتی جدید، نیازها شناسایی میشود.
- نوشتن توضیحات: سپس برای قابلیّت جدید توضیحاتی نوشته میشود که در اصل سند طراحی آن است. این توضیحات مشکل را روشن میکند و نمونه کدی از API احتمالی آینده به نمایش میگذارد.
- بازخورد از برنامهنویسان: بر اساس توضیحات نوشته شده برای قابلیّت جدید از برنامهنویسان بازخورد گرفته میشود تا مطمئن شوند چیزی که قرار است در مرورگر پیادهسازی شود همان است که آنها انتظار دارند، و این قابلیت به این شکل نیاز آنان را برآورده میکند. بر اساس این بازخوردها دوباره توضیحات اصلاح میشود و دوباره بازخورد گرفته میشود تا زمانی که توضیحات به وضعیت خوبی برسد.
- ایجاد سند رسمی: پس از اینکه توضیحات به وضعیت خوبی رسید زمان نوشتن سندی رسمی با همکاری برنامهنویسان و سازندگان سایر مرورگرها فرا میرسد تا طرّاحی قابلیّت جدید بهبود پیدا کند. بعد از این که طرّاحی به ثباتی برسد، برای آزمایش آن در محیط عملیّاتی، این قابلیّت جدید در قالب Origin trial در مرورگر Chrome پیادهسازی میشود. Origin trial به برنامهنویسان اجازه میدهد قابلیّتهای جدید را با کاربران واقعی آزمایش کنند و در مورد پیادهسازی آن بازخورد دهند. این بازخورد واقعی سازندگان مرورگر را پیش از اینکه قابلیّت جدید را به استانداردی در وب تبدیل کنند مطمئن میکند که راه را اشتباه نمیروند.
- پیادهسازی در مرورگر: نهایتاً زمانی که دورهی Origin trial به پایان برسد، سند رسمی نهایی شده است و تبدیل به استانداردی مصوّب برای وب میشود. سپس این قابلیّت در مرورگرها پیادهسازی میشود.
نمونههایی از خروجیهای موفق پروژهی فوگو
در ادامه به برخی از قابلیّتها در وب که محصول این پروژه بوده اند و پیادهسازی هم شده اند اشاره میکنیم:
- File System Access API: این قابلیّت به برنامهنویسان اجازه میدهد به فایلهای محلّی در دستگاه کاربر دسترسی پیدا کنند و آنها را بخوانند و تغییر دهند، که این قابلیّتی مفید برای IDEها، ویرایشگرهای تصویر و ویدئو و برنامههایی از این دست است.
- Async Clipboard API: قابلیّت خواندن و نوشتن متن و تصویر در clipboard بدون قفل شدن thread اصلی برنامه.
- Badging API: به برنامههای وبی اجازه میدهد برای برنامهی خود علامتی تعیین کنند تا در سیستم عامل مقصد در مکانی که Icon برنامه را نمایش میدهد، مثل صفحهی اصلی، آن را نشان بدهد. با استفاده از این علامت میتوان کاربر را از اتّفاق مهمّی که در برنامه افتاده است و نیاز به توجّه او دارد مطّلع کرد، یا اینکه اطّلاعاتی مثل تعداد پیامهای خوانده نشده را به کاربر اعلام کرد.
- Contact Picker API: به برنامههای وبی اجازه میدهد در جایی که لازم است لیست مخاطبین کاربر را باز کند، و کاربر به دلخواه خودش یکی از مخاطبینش را انتخاب کند.
- Get Installed Related Apps API: اگر برنامهی وبی دارای نسخهای غیر وبی نیز هست، با استفاده از این API برنامهنویس متوجّه میشود که آیا برنامهی غیر وبی معادل در دستگاه کاربر نصب شده است یا نه.
- Periodic Background Sync API: به برنامهی وبی اجازه میدهد به صورت دورهای در پسزمینه دادههای خود را با سرور Sync کند یا حتّی خود را بروز کند، مثلاً یک پیامرسان وبی میتواند بدون اینکه کاربر برنامه را باز کند در پسزمینه پیامهای جدید را بارگیری کرده و به صورت Offline ذخیره کند.
- Wake Lock API: در بیشتر دستگاهها برای صرفهجویی در مصرف باتری، اگر کاربر در یک بازهی زمانی کوتاه با برنامه کار نکند، صفحهی دستگاه خاموش میشود. این کار در اکثر مواقع مشکلی ایجاد نمیکند، ولی در برخی برنامهها برای انجام بعضی کارها مهم است که صفحه خاموش نشود. با این API میتوان جلوی خاموش شدن خودکار صفحهی گوشی را گرفت.
- Web NFC: این قابلیّت امکان خواندن و نوشتن برچسبهای NFC را در زمانی که در مجاورت دستگاه کاربر قرار میگیرند را میدهد.
- WebOTP API: این API اجازه میدهد پیامکی که به عنوان رمز یکبار مصرف برای کاربر فرستاده میشود به صورت خودکار خوانده شود و احراز هویّت کاربر را تکمیل کند.
- Web Share: به برنامههای وبی اجازه میدهد محتوای داخلی خود را که ممکن است پیوند، متن یا فایل باشد را با سایر برنامهها به اشتراک بگذارند، همان گونه که برنامههای بومی این کار را انجام میدهند.
- Web Share Target: به PWA نصبشده اجازه میدهد تا به عنوان مقصدی برای اشتراک محتوا از سایر برنامههای بومی یا Web Share قرار بگیرد.
- Web Serial API: به برنامهی وبی اجازه میدهد تا با دستگاههایی که از طریق درگاه Serial متّصل شده اند ارتباط برقرار کند و عملیّات خواندن و نوشتن را روی آن انحام دهد. این API از طریق برقراری ارتباط با دستگاههای Serial مثل ریزپردازندهها یا پرینترهای سهبعدی بین دنیای فیزیکی و وبسایتها پلی ایجاد میکند.
برای رهگیری وضعیّت APIهای این پروژه و اینکه چه قابلیّتهایی در حال حاضر در چه مرحلهای از پیادهسازی هستند میتوانید به وبسایت //fugu-tracker.web.app مراجعه نمایید.