الخلاصة

  • شرحت أول مسودة عمل عامة من W3C في 14 سبتمبر 2017 إشعاراً غير متزامن حين يعبر عنصر مستهدف عتبة تقاطع مع حاوية أو مع مساحة العرض العليا.
  • أتاحت الواجهة تأخير الصور والمحتوى في الصفحات الطويلة من دون فحص التخطيط عند كل حركة تمرير. ويختار التطبيق العمل الذي ينفذه بعد وصول الإشارة.

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

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

للعقد طرفان هندسيان. الهدف هو العنصر المرصود. الجذر منطقة المقارنة، وقد تكون حاوية محددة أو مساحة العرض العليا عند عدم تحديد حاوية. يُنشأ IntersectionObserver بدالة تستقبل الإشعارات وخيارات للمراقبة. تستعمل الصفحة observe(target) لبدء الرصد، وunobserve(target) لوقف رصد هدف واحد، وdisconnect() لإنهاء رصد جميع الأهداف. حين تتغير علاقة التقاطع عبر العتبة المختارة، تصل سجلات إلى الدالة. صار للمطبعة جرس بدلاً من زائر يفتح النافذة كل لحظة.

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

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

كانت اللا تزامنية قراراً مقصوداً. تقول مسودة 2017 إن هذه الاستخدامات لا تتطلب زمناً صارماً للاستجابة؛ قد يكون خبر يصل بعد مهلة بسيطة أفضل من فحص متزامن للتخطيط مع كل حركة. واستبعدت الوثيقة من أهدافها قياس البكسلات المعروضة فعلاً بدقة كاملة بعد المرشحات والتركيب البصري. الواجهة تصف تقاطعاً هندسياً وفق قواعد معروفة. لا تستطيع إخبار الناشر إن كان أحد قرأ الصورة أو أعجبته.

يحافظ آخر مشروع منشور من W3C على الأساس: أهداف بالنسبة إلى جذر، وعتبات، وسجلات تصل بصورة غير متزامنة. يبدأ سجل النشر الرسمي بمسودة سبتمبر 2017 ويسرد مسودات عمل لاحقة حتى أكتوبر 2023. هذه تواريخ وثائق وليست إحصاءات انتشار بين المتصفحات. وتبقى وثيقة 2023 موسومة Working Draft في ذلك السجل.

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

هناك مبالغة مغرية: تسمية التقاطع «انتباه الجمهور». إن intersectionRatio نسبة هندسية بين مستطيلات محسوبة كما ينص المعيار. قد يقرأ الشخص الصورة، أو يمر عليها، أو يغادر الجهاز. الجرس يقول إن الصحيفة وصلت إلى النافذة؛ لا يصدر تقريراً عما شعر به القارئ. تحديد السؤال بدقة هو ما يجعل الإجابة قابلة للاستخدام.

لم تفرض Intersection Observer على كل موقع أسلوب تحميل واحداً. أعطته وسيلة أنظف لمعرفة متى يقترب العنصر، ثم تركت له العمل. لا يسأل البائع عن الصحيفة في كل دقيقة. حين تجهز وتبلغ العتبة المتفق عليها، يرن الجرس.