قائمة «من المتصل الآن»: وُعد بها في 2012 وأصبحت متاحة الآن
في 25 أغسطس 2012، أعلن مقال في هذه المدونة أن حقول الإحصائيات بدأت تتحدث تلقائيًا، واختُتم بجملة: «الميزة المخطط لها، قائمة “من المتصل الآن”، قادمة قريبًا!»
ذلك المقال لا يزال هنا. أما القائمة التي أعلنها فاستغرق وصولها أربعة عشر عامًا. إنها موجودة الآن، والعداد الذي ربط إليه ذلك المقال ظل يعمل طوال هذه المدة.
ما الذي تعرضه
في صفحة الإحصائيات لوحة مباشرة: كم شخصًا يتصفح الموقع في هذه اللحظة، مع قائمة بأحدثهم — البلد الذي اتصلوا منه، والمدينة حين تكون معروفة، والصفحة التي يتصفحونها، ومتى شوهدوا آخر مرة. يُعرض منهم اثنا عشر في المرة الواحدة، الأحدث أولًا.
«في هذه اللحظة» تعني الدقائق الخمس الأخيرة. وبعد ساعة، تُحذف الصفوف نهائيًا.
ما لا تعنيه كلمة «من»
لا يُكشف عن هوية أي أحد في تلك القائمة. فهي مبنية على التجزئة اليومية نفسها (16 بايت) الموصوفة في المقال عن العدّ دون ملفات تعريف الارتباط — فلا اسم، ولا حساب، ولا ملف تعريف ارتباط، ولا عنوان IP مخزَّن وراء أي صف فيها.
كما أنها لا تحفظ إلا مسار الصفحة لا العنوان الكامل: /shop/boots، لا الرابط الكامل مع كل ما أضافه محرك بحث أو نشرة بريدية إلى نهايته.
وشخصان من المدينة نفسها يتصفحان الصفحة نفسها هما ببساطة صفّان. لا شيء في النظام يستطيع التمييز بين قارئين وقارئ واحد على هاتف وحاسوب محمول. وهذا ليس سهوًا ينتظر الترتيب في إصدار لاحق. إنه التصميم نفسه، وهي المقايضة ذاتها التي يجريها العداد في كل مكان آخر: ما يكفي ليكون مفيدًا، ولا يكفي لتتبّع أي أحد.
مباشر دون إبقاء اتصال مفتوح
الطريقة الحديثة لبناء ذلك هي WebSocket، أو الأحداث المرسلة من الخادم (server-sent events) — يبقي المتصفح اتصالًا واحدًا مفتوحًا ويدفع الخادم التحديثات عبره فور حدوثها. إنها الإجابة الأنيقة، لكنها كانت ستكون الإجابة الخطأ هنا.
يستخدم خادم الويب لهذا الموقع عملية واحدة لكل اتصال مفتوح، ومهمته الفعلية هي الرد على طلبات العدادات لبضعة آلاف من المواقع. والاتصال الذي يبقى مفتوحًا عملية لا تستطيع الرد على أي أحد آخر. فإذا كان خمسون شخصًا يتابعون صفحتهم المباشرة، فهذا يعني خمسين عملية خاملة تنتظر تسليم رقم يتغير كل بضع دقائق.
لذلك تسأل الصفحة بدلًا من ذلك، كل خمس عشرة ثانية، وتجلب كتلة صغيرة من JSON. وحول ذلك ثلاثة قرارات أهم من الفاصل الزمني:
- إذا بدأت الطلبات تفشل، تتراجع إلى طلب واحد في الدقيقة — بدلًا من إغراق خادم يمر بوضوح بوقت عصيب أصلًا.
- في علامة تبويب في الخلفية تتوقف عن السؤال تمامًا، وتتحدث في اللحظة التي تعود فيها علامة التبويب إلى الواجهة. لا أحد يشاهد علامة تبويب مخفية، والطلب سيكلّف تمامًا ما يكلّفه طلب مفيد.
- سطر حُدِّث قبل N ثانية يعدّ تصاعديًا محليًا، مرة كل ثانية، ولا يكلّف شيئًا على الإطلاق. فالطلب لازم لتغيير البيانات فقط، لا لإظهار مرور الوقت عليها.
لا شيء من هذا بارع. إنه متناسب، وهذه على خادم صغير الصفة الأثمن بين الاثنتين. فالعرض المباشر لا ينبغي أن يكلّف تشغيله أكثر من الشيء الذي يراقبه.
جزء لم يعد
في سبتمبر 2015 نُشر مقال عن أن تبويب المستخدمين صار يميّز بين من يقرأ الصفحة فعليًا ومن فتحها في علامة تبويب في الخلفية ونسي وجودها.
هذا التمييز لم يعد بعد. القائمة الحالية تعرف متى شوهد الزائر آخر مرة؛ لكنها لا تعرف هل ينظر إلى الصفحة. ومعرفة ذلك مفيدة حقًا — فجزء كبير من «زوار» أي موقع ليسوا سوى علامة تبويب مهجورة — لذا فهو على قائمة ما سيُبنى.
ونأمل ألا يستغرق ذلك أربعة عشر عامًا أخرى.
جرّبها
انتهى مقال 2012 برابط إلى مثال مباشر، ويبدو أن هذه هي الطريقة الصحيحة لإنهاء هذا المقال أيضًا. وبالمناسبة، ذلك الرابط الأصلي ما زال يعمل: العداد الذي وراءه ظل يعمل طوال الوقت وتجاوز 1.3 مليون زيارة.
هناك مثال مباشر هنا، ولا حاجة إلى حساب لمشاهدته.