فارسی

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

سرویس ورکرها: ساخت اپلیکیشن‌های وب آفلاین-اول

در دنیای امروز، کاربران انتظار دارند که اپلیکیشن‌های وب سریع، قابل اعتماد و در دسترس باشند، حتی زمانی که اتصال به شبکه محدود یا در دسترس نیست. اینجاست که مفهوم طراحی "آفلاین-اول" (offline-first) مطرح می‌شود. سرویس ورکرها یک فناوری قدرتمند هستند که به توسعه‌دهندگان امکان می‌دهند اپلیکیشن‌های وبی بسازند که به طور یکپارچه در حالت آفلاین کار می‌کنند و تجربه کاربری برتری را ارائه می‌دهند.

سرویس ورکرها چه هستند؟

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

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

چرا آفلاین-اول؟

ساخت یک اپلیکیشن وب آفلاین-اول مزایای بی‌شماری دارد:

سرویس ورکرها چگونه کار می‌کنند؟

چرخه حیات یک سرویس ورکر شامل چندین مرحله است:

  1. ثبت (Registration): سرویس ورکر در مرورگر ثبت می‌شود و دامنه اپلیکیشنی که کنترل خواهد کرد مشخص می‌گردد.
  2. نصب (Installation): سرویس ورکر نصب می‌شود و در طی این مرحله معمولاً دارایی‌های ثابت را کش می‌کند.
  3. فعال‌سازی (Activation): سرویس ورکر فعال شده و کنترل اپلیکیشن وب را به دست می‌گیرد. این مرحله ممکن است شامل لغو ثبت سرویس ورکر‌های قدیمی و پاک‌سازی کش‌های قدیمی باشد.
  4. بیکار (Idle): سرویس ورکر بیکار باقی می‌ماند و منتظر درخواست‌های شبکه یا رویدادهای دیگر است.
  5. واکشی (Fetch): هنگامی که یک درخواست شبکه ارسال می‌شود، سرویس ورکر آن را رهگیری می‌کند و می‌تواند محتوای کش‌شده را ارائه دهد یا منبع را از شبکه واکشی کند.

پیاده‌سازی آفلاین-اول با سرویس ورکرها: راهنمای گام به گام

در اینجا یک مثال ساده از نحوه پیاده‌سازی قابلیت آفلاین-اول با استفاده از سرویس ورکرها آورده شده است:

مرحله ۱: ثبت سرویس ورکر

در فایل جاوا اسکریپت اصلی خود (مثلاً `app.js`):


if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(function(registration) {
      console.log('سرویس ورکر با دامنه زیر ثبت شد:', registration.scope);
    })
    .catch(function(error) {
      console.log('ثبت سرویس ورکر با خطا مواجه شد:', error);
    });
}

این کد بررسی می‌کند که آیا مرورگر از سرویس ورکرها پشتیبانی می‌کند یا خیر و سپس فایل `service-worker.js` را ثبت می‌کند. دامنه (scope) مشخص می‌کند که سرویس ورکر کدام URLها را کنترل خواهد کرد.

مرحله ۲: ایجاد فایل سرویس ورکر (service-worker.js)

فایلی با نام `service-worker.js` با کد زیر ایجاد کنید:


const CACHE_NAME = 'my-site-cache-v1';
const urlsToCache = [
  '/',
  '/index.html',
  '/style.css',
  '/app.js',
  '/images/logo.png'
];

self.addEventListener('install', function(event) {
  // انجام مراحل نصب
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('کش باز شد');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // کش پیدا شد - پاسخ برگردانده می‌شود
        if (response) {
          return response;
        }

        // مهم: درخواست را کلون کنید.
        // یک درخواست یک استریم است و فقط یک بار قابل مصرف است. از آنجایی که ما این
        // درخواست را یک بار توسط کش و یک بار توسط مرورگر برای واکشی مصرف می‌کنیم، باید آن را کلون کنیم.
        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // بررسی کنید که آیا یک پاسخ معتبر دریافت کرده‌ایم
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // مهم: پاسخ را کلون کنید.
            // یک پاسخ یک استریم است و باید فقط یک بار مصرف شود.
            var responseToCache = response.clone();

            caches.open(CACHE_NAME)
              .then(function(cache) {
                cache.put(event.request, responseToCache);
              });

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

self.addEventListener('activate', function(event) {

  var cacheWhitelist = [CACHE_NAME];

  event.waitUntil(
    caches.keys().then(function(cacheNames) {
      return Promise.all(
        cacheNames.map(function(cacheName) {
          if (cacheWhitelist.indexOf(cacheName) === -1) {
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});

این کد کارهای زیر را انجام می‌دهد:

مرحله ۳: عملکرد آفلاین خود را تست کنید

برای تست عملکرد آفلاین خود، می‌توانید از ابزارهای توسعه‌دهنده مرورگر استفاده کنید. در کروم، DevTools را باز کنید، به تب "Application" بروید و "Service Workers" را انتخاب کنید. سپس می‌توانید با تیک زدن کادر "Offline" حالت آفلاین را شبیه‌سازی کنید.

تکنیک‌های پیشرفته سرویس ورکر

پس از درک اولیه از سرویس ورکرها، می‌توانید تکنیک‌های پیشرفته‌تری را برای بهبود اپلیکیشن آفلاین-اول خود کشف کنید:

استراتژی‌های کشینگ

چندین استراتژی کشینگ وجود دارد که می‌توانید بسته به نوع منبع و نیازمندی‌های اپلیکیشن خود از آنها استفاده کنید:

انتخاب استراتژی کشینگ مناسب به منبع خاص و نیازمندی‌های اپلیکیشن شما بستگی دارد. به عنوان مثال، دارایی‌های ثابت مانند تصاویر و فایل‌های CSS اغلب بهتر است با استراتژی "اولویت با کش" ارائه شوند، در حالی که محتوای پویا ممکن است از استراتژی "اولویت با شبکه" یا "کش سپس شبکه" بهره‌مند شود.

همگام‌سازی در پس‌زمینه

همگام‌سازی در پس‌زمینه به شما امکان می‌دهد کارها را تا زمانی که کاربر اتصال شبکه پایداری داشته باشد به تعویق بیندازید. این برای کارهایی مانند ارسال فرم‌ها یا آپلود فایل‌ها مفید است. به عنوان مثال، کاربری در یک منطقه دورافتاده در اندونزی ممکن است فرمی را در حالت آفلاین پر کند. سرویس ورکر می‌تواند منتظر بماند تا اتصال برقرار شود و سپس داده‌ها را ارسال کند.

پوش نوتیفیکیشن‌ها

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

Workbox

Workbox مجموعه‌ای از کتابخانه‌های جاوا اسکریپت است که ساخت سرویس ورکرها را آسان‌تر می‌کند. این مجموعه ابزارهایی برای وظایف رایج مانند کشینگ، مسیریابی و همگام‌سازی در پس‌زمینه فراهم می‌کند. استفاده از Workbox می‌تواند کد سرویس ورکر شما را ساده‌تر کرده و نگهداری آن را آسان‌تر کند. امروزه بسیاری از شرکت‌ها از Workbox به عنوان یک جزء استاندارد در توسعه PWAها و تجربیات آفلاین-اول استفاده می‌کنند.

ملاحظات برای مخاطبان جهانی

هنگام ساخت اپلیکیشن‌های وب آفلاین-اول برای مخاطبان جهانی، در نظر گرفتن عوامل زیر مهم است:

نمونه‌هایی از اپلیکیشن‌های آفلاین-اول

چندین اپلیکیشن وب محبوب با موفقیت قابلیت آفلاین-اول را با استفاده از سرویس ورکرها پیاده‌سازی کرده‌اند:

نتیجه‌گیری

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

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