استخدام "إحصاءات Google" بلا اتصال بالإنترنت

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

لا شكّ أنّ الحلّ هو استخدام مشغّلات الخدمات. على وجه التحديد، يتمّ إضافة رمز إلى عامل الخدمة لتخزين طلبات "إحصاءات Google" (باستخدام IndexedDB) وإعادة محاولة إرسالها لاحقًا عندما تتوفّر شبكة. لقد شاركنا الرمز البرمجي للتعامل مع هذه المنطق كجزء من الرمز البرمجي المفتوح المصدر لتطبيق الويب Google I/O، ولكن تبيّن لنا أنّ هذا النمط مفيد، وأنّ نسخ الرمز البرمجي ولصقه قد يكونان عملية هشّة.

يسرّنا اليوم الإعلان عن تجميع كل ما تحتاجه لمعالجة طلبات "إحصاءات Google" بلا إنترنت ضمن worker الخدمة في حزمة npm: npm install --save-dev sw-offline-google-analytics

استخدام sw-offline-google-analytics

من داخل رمز الخدمة العاملة الحالي، أضِف ما يلي:

// This code should live inside your service worker JavaScript, ideally
// before any other 'fetch' event handlers are defined:

// First, import the library into the service worker global scope:
importScripts('path/to/offline-google-analytics-import.js');

// Then, call goog.offlineGoogleAnalytics.initialize():
// See https://github.com/GoogleChrome/workbox/tree/main/packages/workbox-google-analytics
goog.offlineGoogleAnalytics.initialize();

// At this point, implement any other service worker caching strategies
// appropriate for your web app.

هذا كل ما عليك فعله.

ما هي الميزات المدرجة؟

sw-offline-google-analytics يُعدّ معالِج أحداث fetch جديدًا في عامل الخدمة، والذي يستجيب للطلبات المقدَّمة إلى نطاق "إحصاءات Google". (تجاهل المكتبة طلبات غير "إحصاءات Google"، ما يمنح معالجات أحداث fetch الأخرى لخدمة Worker فرصة تنفيذ الاستراتيجيات المناسبة لهذه الموارد). سيحاول أولاً تنفيذ الطلب على الشبكة. إذا كان المستخدم متصلاً بالإنترنت، ستتم العملية كالمعتاد.

في حال تعذُّر إرسال طلب إلى الشبكة، ستخزِّن المكتبة تلقائيًا معلومات عن الطلب المُرسَل إلى IndexedDB، بالإضافة إلى الطابع الزمني الذي يشير إلى وقت إرسال الطلب في البداية. في كل مرة يبدأ فيها عامل الخدمة، تبحث المكتبة عن الطلبات التي في "قائمة الانتظار" وتحاول إعادة إرسالها، بالإضافة إلى بعض مَعلمات "إحصاءات Google" الإضافية:

  • مَعلمة qt، يتم ضبطها على المدة التي مضت منذ محاولة إرسال الطلب في البداية، لضمان تحديد الوقت الأصلي بشكل صحيح
  • أي مَعلمات إضافية وقيم مقدَّمة في سمة parameterOverrides لعنصر الضبط الذي تم تمريره إلى goog.offlineGoogleAnalytics.initialize(). على سبيل المثال، يمكنك تضمين سمة مخصّصة للتمييز بين الطلبات التي تم إعادة إرسالها من الخدمة العاملة والطلبات التي تم إرسالها على الفور.

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

implements أيضًا استراتيجية "الشبكة أولاً، ثمّ ذاكرة التخزين المؤقت" analytics.js لرمز JavaScript الفعلي المطلوب لبدء "إحصاءات Google".sw-offline-google-analytics

سنضيف المزيد من الميزات في المستقبل.

sw-offline-google-analytics هو جزء من مشروع sw-helpers الأكبر، وهو مجموعة من المكتبات تهدف إلى توفير تحسينات فورية لعمليات تنفيذ مهام الخدمة الحالية.

يشمل هذا المشروع أيضًا sw-appcache-behavior، وهي مكتبة تنفِّذ استراتيجيات التخزين المؤقت المحدّدة في بيان AppCache الحالي داخل عامل الخدمة. ويهدف إلى مساعدتك في نقل البيانات من AppCache إلى مهام الخدمة مع الحفاظ على استراتيجية تخزين مؤقت متّسقة، على الأقل في البداية.

إذا كانت لديك أفكار أخرى حول المكتبة، يُرجى مشاركة اقتراحاتك معنا. لذا يُرجى تقديم طلب في أداة تتبُّع المشاكل.