۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

اولین نگاهی به برنامه های وب مترقی

توسعه برنامه‌های وب پیشرو پیچیده‌تر از برنامه‌های کاربردی وب سنتی است، اما در ازای آن تأثیرات زیادی دارند.

توسعه برنامه‌های وب پیشرو پیچیده‌تر از برنامه‌های کاربردی وب سنتی است، اما در ازای آن تأثیرات زیادی دارند.

برنامه‌های وب پیشرو یک نوآوری در توسعه وب مدرن هستند که فراگیر بودن مرورگرهای وب را با غنای برنامه‌های کاربردی بومی جفت می‌کند. ویژگی‌های تخصصی مانند سرویس‌دهندگان پیچیدگی توسعه را در مقایسه با یک رابط کاربری وب معمولی افزایش می‌دهند، اما در عوض مزایای بسیار زیادی را ارائه می‌کنند: ویژگی‌های متقابل دستگاهی و بومی‌مانند که در داخل یک مرورگر وب ارائه می‌شوند.

ویژگی های برنامه های وب مترقی

اگر تفاوت بین یک برنامه معمولی مرورگر وب و یک برنامه نصب شده بر روی لپ تاپ یا تلفن همراه را در نظر بگیرید، شکافی را که برنامه های وب مترقی پر می کنند، درک خواهید کرد. یکی از ویژگی های تعیین کننده برنامه های نصب شده این است که در صورت عدم اتصال به شبکه روی دستگاه اجرا می شوند. برنامه های وب پیشرفته از عملکرد آفلاین مشابه در مرورگر پشتیبانی می کنند.

برخلاف برنامه‌های وب مبتنی بر مرورگر، برنامه‌های وب پیشرو به شدت به نوع برنامه وابسته هستند: ویژگی‌های برنامه نقش مهمی در تعیین نحوه پیاده‌سازی PWA دارند.

ویژگی های رایج برنامه های وب مترقی عبارتند از:

  • عملکرد آفلاین
  • عملکرد پس‌زمینه، از جمله همگام‌سازی
  • صفحه اصلی “نصب”
  • اعلان‌ها و هشدارها، از جمله زمانی که برنامه اجرا نمی‌شود
  • حافظه پنهان تهاجمی (استراتژی برای مبارزه با مشکلات شبکه متناوب)
  • طرح‌بندی‌های بین دستگاهی/پاسخگو/موبایل اول
  • قابلیت نشانک گذاری و اشتراک گذاری از طریق پیوند

یک مورد خوب برای یک برنامه وب پیشرفته، انتقال یک برنامه کاربردی تحت وب برای پیاده سازی ویژگی های PWA مانند عملکرد آفلاین است. Google Docs نمونه‌ای از برنامه‌های مبتنی بر مرورگر است که از «حالت آفلاین» در زمانی که شبکه در دسترس نیست، پشتیبانی می‌کند. اساساً، این برنامه می‌تواند همه چیز را به صورت محلی در مرورگر ذخیره کند و سپس وقتی مرورگر آنلاین شد، آن را با قسمت پشتی همگام‌سازی کند.

البته، همگام سازی بخش های توزیع شده یک برنامه ذاتاً پیچیده است. Google Docs یک شرکت بزرگ معماری است، اما یک برنامه کاربردی ساده تر می تواند بسیار ساده تر باشد. الزامات برنامه تعیین می کند که اجرای PWA چقدر باید درگیر باشد.

اکنون که متوجه شدید که برنامه‌های وب پیشرفته چه کاری می‌توانند برای شما انجام دهند، بیایید نحوه عملکرد آنها را بررسی کنیم.

نصب برنامه های وب پیشرفته

یک ویژگی متمایز برنامه های وب مترقی این است که می توان آنها را “نصب کرد” حتی اگر در مرورگر اجرا شوند. در قسمت جلویی، پیوندی را در صفحه اصلی دستگاه قرار می دهید که وب سایت را در مرورگر راه اندازی می کند.

نصب از طریق یک فایل manifest.json انجام می شود که ویژگی های برنامه و نماد صفحه اصلی آن را برای مرورگر توضیح می دهد. در اینجا مثالی از یک مانیفست ساده آمده است:


{
  "name": "My PWA App",
  "short_name": "My PWA",
  "icons": [
       {
      "src": "icons/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    }
  ],
  "start_url": "/",
  "display": "standalone",
  "theme_color": "#ffffff"
}

اگر مرورگر چنین فایلی را در دایرکتوری ریشه پیدا کند و فایل معتبر باشد، پیشنهاد می‌کند پیوندی به صفحه اصلی اضافه کند.

کارگران خدمات

سرویس‌کاران راه اصلی برای ارائه ویژگی‌های PWA هستند. شی navigator.serviceWorker به شما امکان دسترسی به Service Worker API را می دهد. فقط در زمینه ایمن (HTTPS) در دسترس است. یک Service Worker شبیه به یک Worker Thread است، اما چرخه عمر طولانی‌تری دارد و دسترسی کمتری به DOM و APIهای مرورگر دارد.

کارمند خدمات را به عنوان یک زمینه مجزا در نظر بگیرید که می تواند از طریق پیام ها و رویدادها با رشته اصلی شما (و سایر کارکنان) تعامل داشته باشد. می‌تواند به این رویدادها پاسخ دهد، درخواست‌های شبکه را اجرا کند، به تماس‌های فشاری پاسخ دهد و چیزها را با Cache API یا با IndexedDB ذخیره کند. یک سرویس‌دهنده فقط می‌تواند از طریق پیام‌هایی که به رشته اصلی باز می‌گردند، روی رابط کاربری کار کند. به یک معنا، یک سرویس‌کار پراکسی میان‌افزار است که در مرورگر اجرا می‌شود. 

کارمندان خدمات چرخه زندگی منحصر به فردی دارند. شرایط خاص تعیین می کند که آنها چه زمانی خاتمه می یابند. آن‌ها می‌توانند اعلان‌ها را بر اساس به‌روزرسانی‌های فشار اجرا کرده و حتی پس از بسته شدن صفحه‌ای که آنها را ایجاد کرده است، به کاربر ارائه دهند. چرخه عمر کارگر خدمات نمای کلی خوبی ارائه می دهد. همچنین می توانید اطلاعات خاص مرورگر را در مورد خاتمه کارمندان خدمات بیابید. برای مثال، در Chrome.< /p>

رویدادهای کارگر خدمات

اساساً، کارکنان خدمات، کنترل‌کننده رویداد ناهمزمان هستند. آنها به رویدادها از UI یا از قسمت پشتی پاسخ می دهند. هنگام ساختن آنها، باید برنامه ریزی کنید که زمینه آنها بین رویدادها پاک شود – نمی توانید حالت را در متغیرهای محلی ذخیره کنید تا بین رویدادها به اشتراک گذاشته شود. در عوض، از کش یا پایگاه داده استفاده می کنید. همه رویدادهایی که یک سرویس دهنده می تواند به آنها پاسخ دهد در اینجا آمده است:

  • install: این رویداد یک بار هنگام نصب اولین سرویس‌کار فعال می‌شود. این اغلب برای پیش ذخیره سازی دارایی هایی مانند HTML، CSS، و فایل های جاوا اسکریپت برای فعال کردن عملکرد آفلاین استفاده می شود.
  • فعال کردن: این رویداد پس از فعال شدن یک سرویس دهنده فعال می شود. این مکان مناسبی برای پاکسازی حافظه پنهان نسخه‌های قبلی سرویس‌کار یا انجام کارهایی است که باید زمانی که سرویس‌کار کنترل مشتریان را در دست می‌گیرد (صفحات وب کنترل‌شده) انجام دهید.
  • واکشی: این رویداد هر زمان که یک صفحه کنترل‌شده درخواستی به شبکه ارسال می‌کند فعال می‌شود. این به کارمند سرویس اجازه می‌دهد تا به عنوان یک واسطه نامرئی برای صفحه اصلی عمل کند، درخواست‌ها را رهگیری کند و به طور بالقوه آنها را تغییر دهد تا نسخه ذخیره‌شده را ارائه کند یا به طور کامل آن را مدیریت کند.
  • همگام‌سازی: این رویداد در بازه‌های زمانی تعریف‌شده توسط مرورگر هنگامی که اتصال شبکه پایدار است فعال می‌شود. اغلب برای همگام سازی تغییرات داده های ایجاد شده به صورت آفلاین با سرور استفاده می شود. Sync API به خودکار کردن درخواست‌ها در زمانی که شبکه در دسترس است کمک می‌کند.
  • push: این رویداد زمانی فعال می‌شود که کارگر سرویس یک اعلان فشاری از یک سرور دریافت می‌کند. این به کارمند خدمات اجازه می‌دهد حتی اگر صفحه وب بسته است، اعلان را مدیریت کرده و به کاربر نمایش دهد.
  • notificationclick: این رویداد زمانی فعال می شود که کاربر روی یک اعلان فشار نمایش داده شده کلیک کند. می‌توانید از این رویداد برای مدیریت تعامل اعلان و هدایت کاربر به صفحه خاصی در PWA استفاده کنید.
  • خطا: این رویداد می‌تواند در موقعیت‌های مختلفی که سرویس‌کار در حین کار با خطا مواجه می‌شود، فعال شود. می‌توانید از این رویداد برای اهداف ورود به سیستم یا اشکال‌زدایی استفاده کنید.
  • پخش و ارسال پیام: اینها رویدادهایی هستند که به طور خاص توسط کد جاوا اسکریپت شما در رشته اصلی مطرح می شوند. از آنها برای ارسال داده به کارکنان خدمات شما استفاده می شود.

همراه با این رویدادها، کارکنان خدمات به چندین API دسترسی دارند:

نمونه کارگر خدمات

کارگر خدمات همیشه با بارگیری در یک فایل جاوا اسکریپت با شی navigator.serviceWorker زندگی خود را آغاز می کند، مانند:


const subscription = await navigator.serviceWorker.register('service-worker.js');

اشتراک‌های رویداد سپس در service-worker.js انجام می‌شوند. برای مثال، برای تماشای یک رویداد fetch و استفاده از حافظه پنهان API، می‌توانید کاری شبیه به این انجام دهید:


self.addEventListener('fetch', (event) => {
  const request = event.request;
  const url = new URL(request.url);

  // Try serving assets from cache first
  event.respondWith(
    caches.match(request)
      .then((cachedResponse) => {
        // If found in cache, return the cached response
        if (cachedResponse) {
          return cachedResponse;
        }

        // If not in cache, fetch from network
        return fetch(request)
          .then((response) => {
            // Clone the response for potential caching
            const responseClone = response.clone();

            // Cache the new response for future requests
            caches.open('my-cache')
              .then((cache) => {
                cache.put(request, responseClone);
              });

            return response;
          });
      })
  );
});

وقتی کارمند سرویس بارگیری می‌شود، self به آن اشاره می‌کند. روش addEventListener به شما امکان می دهد رویدادهای مختلف را تماشا کنید. در داخل رویداد fetch، می‌توانید از Cache API برای بررسی اینکه آیا URL درخواست داده شده را قبلاً در حافظه پنهان دارید یا خیر، استفاده کنید. اگر چنین است، آن را پس خواهید فرستاد. اگر URL جدید است، درخواست خود را به سرور ارسال می کنید و سپس پاسخ را در حافظه پنهان ذخیره می کنید. توجه داشته باشید که Cache API بسیاری از پیچیدگی‌ها را در تعیین اینکه چه چیزی همان درخواست است یا نیست حذف می‌کند. استفاده از سرویس‌کار همه این موارد را برای موضوع اصلی شفاف می‌کند.

نتیجه گیری

برنامه‌های وب پیشرو به شما امکان می‌دهند برنامه خود را در یک مرورگر تحویل دهید و قابلیت‌هایی را ارائه می‌دهند که در یک برنامه معمولی مبتنی بر مرورگر نمی‌توانید پیدا کنید. از سوی دیگر، هنگام توسعه برنامه های وب پیشرو باید با پیچیدگی بیشتری دست و پنجه نرم کنید. بسیاری از کارهای مشابه بومی که می‌توانید با یک برنامه وب پیشرفته انجام دهید شامل سرویس‌دهندگان است که به کار بیشتری نسبت به انجام همان کار در یک برنامه بومی با استفاده از سیستم عاملی مانند Android یا macOS نیاز دارند.

استفاده از تکنیک‌های PWA برای دستیابی به عملکرد یکسان در چندین پلتفرم هدف در داخل مرورگر کار کمتری نسبت به اجرای مجدد عملکرد در چندین پلتفرم است. با یک برنامه وب پیشرو، فقط نیاز به ایجاد و نگهداری یک پایگاه کد واحد دارید، و می‌توانید با استانداردهای آشنای مرورگر کار کنید.