العربية

تعلم كيفية استخدام عوامل الخدمة لإنشاء تطبيقات ويب تعمل دون اتصال بالإنترنت أولاً، وتتميز بالسرعة والموثوقية والتفاعل للمستخدمين حول العالم.

عوامل الخدمة (Service Workers): بناء تطبيقات ويب تعمل دون اتصال بالإنترنت أولاً

في عالم اليوم، يتوقع المستخدمون أن تكون تطبيقات الويب سريعة وموثوقة ومتاحة، حتى عندما يكون الاتصال بالشبكة محدودًا أو غير متوفر. من هنا يأتي مفهوم تصميم "العمل دون اتصال أولاً" (offline-first). تعد عوامل الخدمة تقنية قوية تمكّن المطورين من بناء تطبيقات ويب تعمل بسلاسة دون اتصال بالإنترنت، مما يوفر تجربة مستخدم فائقة.

ما هي عوامل الخدمة (Service Workers)؟

عامل الخدمة هو ملف جافاسكريبت يعمل في الخلفية، منفصلاً عن خيط المتصفح الرئيسي. يعمل كخادم وكيل (proxy) بين تطبيق الويب والشبكة، حيث يعترض طلبات الشبكة ويدير التخزين المؤقت. يمكن لعوامل الخدمة التعامل مع مهام مثل:

والأهم من ذلك، أن عوامل الخدمة يتحكم فيها المتصفح، وليس صفحة الويب. وهذا يسمح لها بالعمل حتى عندما يغلق المستخدم علامة التبويب أو نافذة المتصفح.

لماذا "العمل دون اتصال أولاً"؟

يقدم بناء تطبيق ويب يعمل دون اتصال أولاً فوائد عديدة:

كيف تعمل عوامل الخدمة

تتكون دورة حياة عامل الخدمة من عدة مراحل:

  1. التسجيل (Registration): يتم تسجيل عامل الخدمة في المتصفح، مع تحديد نطاق التطبيق الذي سيتحكم فيه.
  2. التثبيت (Installation): يتم تثبيت عامل الخدمة، وخلال هذه المرحلة يقوم عادةً بتخزين الأصول الثابتة مؤقتًا.
  3. التنشيط (Activation): يتم تنشيط عامل الخدمة ويتولى التحكم في تطبيق الويب. قد يتضمن ذلك إلغاء تسجيل عوامل الخدمة القديمة وتنظيف ذاكرة التخزين المؤقت القديمة.
  4. الخمول (Idle): يظل عامل الخدمة خاملاً، في انتظار طلبات الشبكة أو أحداث أخرى.
  5. الجلب (Fetch): عند إجراء طلب شبكة، يعترضه عامل الخدمة ويمكنه إما تقديم محتوى مخزن مؤقتًا أو جلب المورد من الشبكة.

تنفيذ "العمل دون اتصال أولاً" باستخدام عوامل الخدمة: دليل خطوة بخطوة

إليك مثال أساسي لكيفية تنفيذ وظيفة العمل دون اتصال أولاً باستخدام عوامل الخدمة:

الخطوة 1: تسجيل عامل الخدمة

في ملف جافاسكريبت الرئيسي الخاص بك (على سبيل المثال، `app.js`):


if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(function(registration) {
      console.log('Service Worker registered with scope:', registration.scope);
    })
    .catch(function(error) {
      console.log('Service Worker registration failed:', error);
    });
}

يتحقق هذا الرمز مما إذا كان المتصفح يدعم عوامل الخدمة ويسجل ملف `service-worker.js`. يحدد النطاق عناوين URL التي سيتحكم فيها عامل الخدمة.

الخطوة 2: إنشاء ملف عامل الخدمة (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('Opened cache');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // تم العثور في ذاكرة التخزين المؤقت - إرجاع الاستجابة
        if (response) {
          return response;
        }

        // هام: استنساخ الطلب.
        // الطلب هو دفق (stream) ولا يمكن استهلاكه إلا مرة واحدة. بما أننا نستهلكه
        // مرة واحدة بواسطة ذاكرة التخزين المؤقت ومرة أخرى بواسطة المتصفح للجلب، فنحن بحاجة إلى استنساخ الاستجابة.
        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // التحقق مما إذا كنا قد تلقينا استجابة صالحة
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // هام: استنساخ الاستجابة.
            // الاستجابة هي دفق (stream) وتحتاج إلى استهلاكها مرة واحدة فقط.
            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);
          }
        })
      );
    })
  );
});

يقوم هذا الرمز بما يلي:

الخطوة 3: اختبار وظيفة العمل دون اتصال

لاختبار وظيفة العمل دون اتصال، يمكنك استخدام أدوات المطور في المتصفح. في Chrome، افتح DevTools، وانتقل إلى علامة التبويب "Application"، وحدد "Service Workers". يمكنك بعد ذلك محاكاة وضع عدم الاتصال عن طريق تحديد مربع "Offline".

تقنيات متقدمة لعوامل الخدمة

بمجرد أن يكون لديك فهم أساسي لعوامل الخدمة، يمكنك استكشاف تقنيات أكثر تقدمًا لتعزيز تطبيقك الذي يعمل دون اتصال أولاً:

استراتيجيات التخزين المؤقت

هناك العديد من استراتيجيات التخزين المؤقت التي يمكنك استخدامها، اعتمادًا على نوع المورد ومتطلبات تطبيقك:

يعتمد اختيار استراتيجية التخزين المؤقت الصحيحة على المورد المحدد ومتطلبات تطبيقك. على سبيل المثال، غالبًا ما يتم تقديم الأصول الثابتة مثل الصور وملفات CSS بشكل أفضل باستخدام استراتيجية التخزين المؤقت أولاً، بينما قد يستفيد المحتوى الديناميكي من استراتيجية الشبكة أولاً أو التخزين المؤقت ثم الشبكة.

المزامنة في الخلفية

تسمح لك المزامنة في الخلفية بتأجيل المهام حتى يكون لدى المستخدم اتصال شبكة مستقر. هذا مفيد لمهام مثل إرسال النماذج أو تحميل الملفات. على سبيل المثال، قد يقوم مستخدم في منطقة نائية في إندونيسيا بملء نموذج أثناء عدم الاتصال بالإنترنت. يمكن لعامل الخدمة بعد ذلك الانتظار حتى يتوفر اتصال قبل إرسال البيانات.

الإشعارات الفورية

يمكن استخدام عوامل الخدمة لإرسال إشعارات فورية للمستخدمين، حتى عندما لا يكون التطبيق مفتوحًا. يمكن استخدام هذا لإعادة جذب المستخدمين وتقديم تحديثات في الوقت المناسب. فكر في تطبيق إخباري يقدم تنبيهات الأخبار العاجلة للمستخدمين في الوقت الفعلي، بغض النظر عما إذا كان التطبيق يعمل بنشاط.

Workbox

Workbox عبارة عن مجموعة من مكتبات جافاسكريبت التي تسهل بناء عوامل الخدمة. فهي توفر تجريدات للمهام الشائعة مثل التخزين المؤقت والتوجيه والمزامنة في الخلفية. يمكن أن يؤدي استخدام Workbox إلى تبسيط كود عامل الخدمة الخاص بك وجعله أكثر قابلية للصيانة. تستخدم العديد من الشركات الآن Workbox كمكون قياسي عند تطوير تطبيقات الويب التقدمية (PWAs) وتجارب العمل دون اتصال أولاً.

اعتبارات للجماهير العالمية

عند بناء تطبيقات ويب تعمل دون اتصال أولاً لجمهور عالمي، من المهم مراعاة العوامل التالية:

أمثلة على تطبيقات تعمل دون اتصال أولاً

نجحت العديد من تطبيقات الويب الشهيرة في تنفيذ وظيفة العمل دون اتصال أولاً باستخدام عوامل الخدمة:

الخاتمة

تعد عوامل الخدمة أداة قوية لبناء تطبيقات ويب تعمل دون اتصال أولاً وتكون سريعة وموثوقة وجذابة. من خلال تخزين الأصول مؤقتًا، واعتراض طلبات الشبكة، والتعامل مع المهام الخلفية، يمكن لعوامل الخدمة توفير تجربة مستخدم فائقة، حتى عندما يكون الاتصال بالشبكة محدودًا أو غير متوفر. نظرًا لأن الوصول إلى الشبكة لا يزال غير متسق في جميع أنحاء العالم، فإن التركيز على تصميمات "العمل دون اتصال أولاً" أمر حاسم لضمان الوصول العادل إلى المعلومات والخدمات على الويب.

باتباع الخطوات الموضحة في هذا الدليل ومراعاة العوامل المذكورة أعلاه، يمكنك إنشاء تطبيقات ويب تعمل بسلاسة دون اتصال بالإنترنت وتوفر تجربة ممتعة للمستخدمين في جميع أنحاء العالم. احتضن قوة عوامل الخدمة وابنِ مستقبل الويب – مستقبل يكون فيه الويب متاحًا للجميع، في كل مكان، بغض النظر عن اتصالهم بالشبكة.