إرسال بيانات المرشد في Chrome 39

Ewa Gasperowicz

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

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

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

تضع طريقة navigator.sendBeacon() البيانات في قائمة انتظار ليتم نقلها من خلال المتصفِّح في أقرب وقت ممكن، ولكنها لا تُبطئ التنقل. يعرض الرمز true إذا كان المتصفّح قادرًا على وضع البيانات في قائمة انتظار بنجاح لعملية النقل. وبخلاف ذلك، سيتم عرض false.

لنفترض أن لدينا نقطة نهاية للخادم متاحة لتلقّي بيانات الإشارة من صفحتنا على العنوان التالي:

https://putsreq.herokuapp.com/Dt7t2QzUkG18aDTMMcop

إذا أضفنا طريقة sendBeacon() في معالج أحداث pagehide، ستتلقّى نقطة النهاية البيانات عندما ينتقل المستخدم بعيدًا عن الصفحة:

إذا فحصت علامة تبويب الشبكة في "أدوات مطوري البرامج في Chrome" مع وضع علامة في مربّع الاختيار الاحتفاظ بالسجلات، سيظهر لك طلب HTTP POST إلى نقطة النهاية أعلاه التي يتم إرسالها عند مغادرة الصفحة.

بدلاً من ذلك، يمكنك الانتقال إلى صفحة فحص PutsReq لمعرفة ما إذا تم استلام بيانات المرشد.

هناك أيضًا عنصر بوليمر مخصّص يتيح لك إرسال بيانات الإشارة - <beacon-send>. يمكنك التحقق من ذلك على ebidel.github.io/beacon-send.