المزامنة في الخلفية: هي واجهة برمجة تطبيقات ويب جديدة تتيح لك تأجيل الإجراءات إلى أن يحصل المستخدم على اتصال مستقر. ويضمن ذلك إرسال أي محتوى يريده المستخدم.
المشكلة
إنّ الإنترنت هو مكان رائع لإضاعة الوقت. بدون إضاعة الوقت على الإنترنت، لم نكن لنعرف أنّ القطط لا تحبّ الزهور أو أنّ الحمّار الأفريقي يحبّ الفقاعات أو أنّ إريك بيدلمان هو بطل لعبة غولف صغيرة في أواخر التسعينيات.
ولكن في بعض الأحيان، لا نريد تضييع الوقت. تشبه تجربته المرجوة:
- خروج الهاتف من جيبه
- حقق الهدف الثانوي.
- وضع الهاتف في الجيب مجددًا
- استئناف الحياة
وغالبًا ما تتوقف هذه التجربة بسبب ضعف الاتصال بالإنترنت. لقد مررنا جميعًا بهذه التجربة. أنت تنظر إلى شاشة بيضاء أو رمز دوار، وأنت تعلم أنّه عليك الاستسلام والمتابعة، ولكنك تنتظر 10 ثوانٍ أخرى على كل حال. بعد مرور 10 ثوانٍ؟ لا شيء.
ولكن لماذا الاستسلام الآن؟ لقد استثمرت وقتًا في هذا الإجراء، لذا سيكون من المفيد الانتظار إلى أن يتم حلّ المشكلة. في هذه المرحلة، تريد الاستسلام، ولكنك تعلم أنّ اللحظة التي تستسلم فيها هي اللحظة التي كان من المفترض أن يتم فيها تحميل كل البيانات لو كنت قد انتظرت قليلاً.
تعمل مشغّلات الخدمات على حلّ مشكلة تحميل الصفحة من خلال السماح لك بعرض المحتوى من ذاكرة تخزين مؤقت. ولكن ماذا لو كانت الصفحة بحاجة إلى إرسال بيانات إلى الخادم؟
في الوقت الحالي، إذا نقر المستخدم على "إرسال" في رسالة، عليه النظر إلى مؤشر الدوران إلى أن تكتمل العملية. وإذا حاولوا الخروج من علامة التبويب أو إغلاق علامة التبويب، نستخدم onbeforeunload
لعرض رسالة مثل "لا، أريدك أن تحدّق في هذه اللوحة الدوّارة أكثر. نعتذر". إذا لم يكن لدى المستخدم اتصال بالإنترنت، نقول له "عذرًا، عليك العودة لاحقًا وإعادة المحاولة".
هذا غير صحيح. تتيح لك المزامنة في الخلفية تحقيق نتائج أفضل.
الحل
يُظهر الفيديو التالي Emojoy، وهو عرض توضيحي عبر الدردشة باستخدام الرموز التعبيرية فقط. وهو تطبيق ويب تقدّمي يعمل بلا اتصال بالإنترنت أولاً. يستخدم التطبيق الرسائل الفورية والإشعارات، ويستخدم ميزة المزامنة في الخلفية.
إذا حاول المستخدم إرسال رسالة عندما لا يتوفّر لديه اتصال بالإنترنت، يتم إرسال الرسالة في الخلفية بعد إعادة الاتصال بالإنترنت.
اعتبارًا من آذار (مارس) 2016، أصبحت ميزة "المزامنة في الخلفية" متاحة في الإصدار 49 من Chrome والإصدارات الأحدث. يمكنك اتّخاذ الإجراء اللازم باتّباع الخطوات التالية:
- افتح تطبيق Emojoy.
- أوقِف الاتصال بالإنترنت (إما باستخدام وضع الطيران أو من خلال الانتقال إلى مكان مُحاطة بشبكة Faraday).
- اكتب الرسالة.
- ارجع إلى الشاشة الرئيسية (أغلق علامة التبويب أو المتصفح اختياريًا).
- اتصل بالإنترنت.
- يتم إرسال الرسائل في الخلفية.
تؤدي القدرة على الإرسال في الخلفية مثل هذا أيضًا إلى تحسُّن ملحوظ في الأداء. لا يحتاج التطبيق إلى إجراء الكثير من الإجراءات لإرسال الرسالة، لذا يمكنه إضافة الرسالة إلى الإخراج على الفور.
كيفية طلب مزامنة في الخلفية
في نمط الويب القابل للتوسيع، هذه ميزة منخفضة المستوى تمنحك الحرية في تنفيذ ما تريد. أنت تطلب إطلاق حدث عندما يكون لدى المستخدم اتصال، والذي يكون فوريًا إذا كان المستخدم لديه اتصال بالفعل. بعد ذلك، يمكنك الاستماع إلى هذا الحدث وتنفيذ ما تحتاجه.
وكما هو الحال مع رسائل الدفع، تستخدم هذه الميزة عامل تشغيل الخدمات كهدف للحدث، ما يمكّنها من العمل عندما تكون الصفحة غير مفتوحة. للبدء، عليك التسجيل في مزامنة من صفحة:
// Register your service worker:
navigator.serviceWorker.register('/sw.js');
// Then later, request a one-off sync:
navigator.serviceWorker.ready.then(function(swRegistration) {
return swRegistration.sync.register('myFirstSync');
});
```
Then listen for the event in `/sw.js`:
```js
self.addEventListener('sync', function(event) {
if (event.tag == 'myFirstSync') {
event.waitUntil(doSomeStuff());
}
});
هذا كل ما في الأمر! في المثال أعلاه، من المفترض أن يعرض doSomeStuff()
وعدًا يشير إلى نجاح أو تعذُّر ما يحاول تنفيذه. وإذا تم تنفيذه، تعني ذلك اكتمال المزامنة. وفي حال تعذّر ذلك، سيتم جدولة مزامنة أخرى لإعادة المحاولة. تنتظر عمليات إعادة المزامنة أيضًا الاتصال بالشبكة، وتستخدم خوارزمية الرقود الأسي الثنائي.
يجب أن يكون اسم علامة المزامنة (myFirstSync في المثال أعلاه) فريدًا لمزامنة معيّنة. إذا سجّلت عملية مزامنة باستخدام العلامة نفسها التي تستخدمها في عملية مزامنة في انتظار المراجعة، سيتم دمجها مع عملية المزامنة الحالية. وهذا يعني أنّه يمكنك التسجيل في عملية مزامنة "محو البريد الوارد" في كل مرة يُرسِل فيها المستخدم رسالة، ولكن إذا أرسل 5 رسائل أثناء عدم الاتصال بالإنترنت، لن تتم مزامنة سوى عملية واحدة عندما يتصل بالإنترنت. إذا أردت 5 أحداث مزامنة منفصلة، ما عليك سوى استخدام علامات فريدة.
إليك عرض توضيحي بسيط يقدّم الحد الأدنى من متطلبات الحدث، وهو يستخدم حدث المزامنة لعرض إشعار.
ما هي الأغراض التي يمكنني استخدام ميزة "المزامنة في الخلفية" من أجلها؟
من الأفضل استخدامها لجدولة أي عمليات إرسال بيانات تهمّك بعد انتهاء مدة عرض الصفحة. رسائل المحادثة والرسائل الإلكترونية والتعديلات على المستندات وتغييرات الإعدادات وعمليات تحميل الصور... أي شيء تريد وصوله إلى الخادم حتى إذا غادر المستخدم الصفحة أو أغلق علامة التبويب. يمكن للصفحة تخزين هذه العناصر في مخزن "البريد الصادر" في قاعدة بيانات مفهرسة، ويستردها عامل الخدمة ويرسلها.
ومع ذلك، يمكنك أيضًا استخدامه لجلب أجزاء صغيرة من البيانات...
عرض تجريبي آخر
هذا هو العرض الترويجي لنسخة Wikipedia بلا إنترنت الذي أنشأته لتحسين سرعة تحميل الصفحات. لقد أضفت منذ ذلك الحين بعض المزايا السحرية للمزامنة في الخلفية.
جرِّب ذلك بنفسك. تأكَّد من استخدام الإصدار 49 من Chrome والإصدارات الأحدث، ثم:
- انتقِل إلى أي مقالة، مثل Chrome.
- أوقِف الاتصال بالإنترنت (إما باستخدام وضع الطيران أو من خلال الانضمام إلى مزوّد خدمة جوّال سيئ مثل الذي أستخدمه).
- انقر على رابط يؤدي إلى مقالة أخرى.
- من المفترض أن تظهر لك رسالة تفيد بتعذُّر تحميل الصفحة (ستظهر هذه الرسالة أيضًا إذا استغرق تحميل الصفحة بعض الوقت).
- الموافقة على الإشعارات
- أغلِق المتصفّح.
- الاتصال بالإنترنت
- سيتم إعلامك عندما يتم تنزيل المقالة وتخزينها مؤقتًا وتكون جاهزة للعرض.
باستخدام هذا النمط، يمكن للمستخدم وضع هاتفه في جيبه ومواصلة حياته، مع العلم أنّ الهاتف سيرسل إليه تنبيهًا عندما يعثر على ما يريده.
الأذونات
تستخدم العروض التوضيحية التي عرضتها إشعارات الويب، والتي تتطلب إذنًا، على عكس المزامنة في الخلفية ذاتها.
وغالبًا ما تكتمل أحداث المزامنة عندما يكون لدى المستخدم صفحة مفتوحة على الموقع الإلكتروني، لذا سيؤدي طلب إذن المستخدم إلى تقديم تجربة سيئة. بدلاً من ذلك، سنحدّ من الحالات التي يمكن فيها تسجيل عمليات المزامنة وبدءها لمنع إساءة الاستخدام. على سبيل المثال:
- لا يمكنك التسجيل في حدث مزامنة إلا عندما يكون لدى المستخدم نافذة مفتوحة على الموقع الإلكتروني.
- يتمّ تحديد حدّ أقصى لوقت تنفيذ الحدث، لذا لا يمكنك استخدامه لإرسال طلب بحث إلى خادم كلّ ثوانٍ معيّنة أو استخراج عملات بيتكوين أو غير ذلك.
بطبيعة الحال، قد تصبح هذه القيود أكثر ضيقًا أو ضيقة بناءً على الاستخدام الفعلي.
التحسين التدريجي
وسيستغرق الأمر بعض الوقت قبل أن تتيح جميع المتصفِّحات المزامنة في الخلفية، خاصةً أنّ متصفّحي Safari وEdge لا يدعمان موظفي الخدمة إلى الآن. ولكنّ التحسين التدريجي يساعد في ما يلي:
if ('serviceWorker' in navigator && 'SyncManager' in window) {
navigator.serviceWorker.ready.then(function(reg) {
return reg.sync.register('tag-name');
}).catch(function() {
// system was unable to register for a sync,
// this could be an OS-level restriction
postDataFromThePage();
});
} else {
// serviceworker/sync not supported
postDataFromThePage();
}
إذا لم تكن مهام الخدمة أو المزامنة في الخلفية متاحة، ما عليك سوى نشر المحتوى من الصفحة كما تفعل اليوم.
من المفيد استخدام المزامنة في الخلفية حتى إذا كان يبدو أنّ المستخدم يتصل بالإنترنت بشكل جيد، لأنّها تحميك من عمليات التنقّل وإغلاق علامات التبويب أثناء إرسال البيانات.
المستقبل
نهدف إلى طرح ميزة "المزامنة في الخلفية" في إصدار Chrome ثابت في النصف الأول من عام 2016، بينما نعمل على توفير خيار "المزامنة الدورية في الخلفية". ومن خلال المزامنة الدورية في الخلفية، يمكنك طلب تقييد الحدث حسب الفاصل الزمني وحالة البطارية وحالة الشبكة. سيتطلب ذلك إذن المستخدِم، بالطبع، وسيعتمد أيضًا على المتصفّح في تحديد وقت بدء هذه الأحداث ومعدّل تكرارها. بعبارة أخرى، يمكن أن يطلب موقع إلكتروني إخباري إجراء المزامنة كل ساعة، ولكن قد يعرف المتصفّح أنّك تقرأ هذا الموقع الإلكتروني فقط في الساعة 7:00 صباحًا، لذا سيتم إجراء المزامنة يوميًا في الساعة 6:50 صباحًا. إنّ هذه الفكرة لا تزال في مرحلة متقدمة قليلاً عن المزامنة لمرة واحدة، ولكنّنا نعمل على توفيرها.
نحن بصدد نقل الأنماط الناجحة من Android وiOS إلى الويب تدريجيًا، مع الحفاظ على ما يجعل الويب رائعًا.