יצירת קשר עם התמיכה

אנחנו משיבים בדוא״ל, בדרך כלל בתוך יומיים.

למניעת שימוש לרעה, Google reCAPTCHA בודק את הפנייה הזאת; נתונים נשלחים אל Google. הסקריפט נטען רק עם פתיחת הטופס הזה.

→ כל הרשומות

רשימת הנוכחים באתר, שהובטחה ב־2012 ופועלת כעת

על התוכן ועל בדיקתו

במאמר הזה

ב־25 באוגוסט 2012 הודיעה רשומה בבלוג הזה ששדות הסטטיסטיקה התחילו להתרענן מעצמם, והסתיימה במשפט: “התכונה המתוכננת, רשימת “מי כעת באתר”, תגיע בקרוב!”

הרשומה הזאת עדיין כאן. לרשימה שעליה הכריזה נדרשו ארבע עשרה שנה להגיע. היא קיימת כעת, והמונה שאליו קישרה הרשומה פעל כל הזמן הזה.

מה היא מציגה

בדף הסטטיסטיקה יש לוח בזמן אמת: כמה אנשים נמצאים באתר ברגע זה, ורשימת האחרונים שבהם – המדינה שממנה התחברו, העיר כשמידע זה ידוע, באיזה דף הם נמצאים, וכמה זמן עבר מאז שנראו לאחרונה. שנים עשר בכל פעם, מהחדש לישן.

“ברגע זה” פירושו בחמש הדקות האחרונות. אחרי שעה השורות נמחקות לחלוטין.

0560ברשימה בזמן אמתהשורה עדיין נשמרתנמחקהדקות מאז שנראה לאחרונה

מה “מי” אינו אומר

איש ברשימה הזאת אינו מזוהה. היא נבנית מאותו ערך גיבוב יומי בן 16 בתים שמתואר ברשומה על ספירה ללא עוגייה – מאחורי אף שורה בה אין שם, אין חשבון, אין עוגייה ואין כתובת IP שמורה.

היא גם שומרת רק את נתיב הדף ולא את הכתובת כולה: /shop/boots, ולא את הקישור המלא עם כל מה שמנוע חיפוש או ניוזלטר הוסיף לסופו.

ושני אנשים מאותה עיר שצופים באותו דף הם פשוט שתי שורות. שום דבר במערכת אינו יכול להבחין בין שני קוראים לבין קורא אחד בטלפון ובמחשב נייד. זאת אינה השמטה שממתינה לתיקון בגרסה מאוחרת יותר. זה התכנון, ואותה פשרה שהמונה עושה בכל מקום אחר: מספיק כדי להיות שימושי, אך לא מספיק כדי לעקוב אחר מישהו לכל מקום.

זמן אמת בלי להשאיר חיבור פתוח

הדרך המודרנית לבנות זאת היא WebSocket, או אירועים שנשלחים מהשרת – הדפדפן מחזיק חיבור אחד פתוח והשרת דוחף בו עדכונים ברגע שהם מתרחשים. זאת התשובה האלגנטית, וכאן היא הייתה התשובה הלא נכונה.

שרת האינטרנט של האתר הזה משתמש בתהליך אחד לכל חיבור פתוח, ותפקידו בפועל הוא לענות לבקשות מונה של כמה אלפי אתרים. חיבור שמוחזק פתוח הוא תהליך שאינו יכול לענות לאף אחד אחר. חמישים אנשים שצופים בדף שלהם בזמן אמת פירושם חמישים תהליכים שיושבים בחוסר מעש וממתינים למסור מספר שמשתנה אחת לכמה דקות.

לכן הדף מבקש במקום זאת מדי חמש עשרה שניות, ומקבל בלוק JSON קטן. סביב זה יש שלוש החלטות שחשובות יותר מהמרווח:

  • אם בקשות מתחילות להיכשל, הוא מאט לפעם בדקה – במקום להעמיס שוב ושוב על שרת שכבר ניכר שהוא מתקשה.
  • בלשונית רקע הוא מפסיק לבקש לחלוטין, ומתרענן ברגע שהלשונית חוזרת לחזית. איש אינו צופה בלשונית מוסתרת, והבקשה תעלה בדיוק כמו בקשה שימושית.
  • השורה עודכן לפני N שניות סופרת כלפי מעלה מקומית, פעם בשנייה, ואינה עולה דבר. נדרשת בקשה רק כדי לשנות את הנתונים, לא כדי לקדם את גילם.

אין כאן תחכום. יש כאן מידתיות, שבשרת קטן היא התכונה החשובה יותר מבין השתיים. תצוגה בזמן אמת לא אמורה לעלות להפעלה יותר מהדבר שהיא צופה בו.

חלק אחד שלא חזר

בספטמבר 2015 הייתה רשומה על כך שלשונית המשתמשים למדה להבחין בין מי שקורא דף באופן פעיל לבין מי שפתח אותו בלשונית רקע ושכח מקיומו.

ההבחנה הזאת לא חזרה. הרשימה הנוכחית יודעת מתי מבקר נראה לאחרונה; היא אינה יודעת אם הוא צופה. זה בהחלט מידע שכדאי לדעת – חלק ניכר מה“מבקרים” בכל אתר הם לשונית שננטשה – ולכן הוא ברשימת הדברים לבנייה.

בתקווה שלא בעוד ארבע עשרה שנים.

אפשר לנסות

הרשומה מ־2012 הסתיימה בקישור לדוגמה בזמן אמת, ונראה שזאת דרך מתאימה לסיים גם את הרשומה הזאת. אגב, הקישור המקורי הזה עדיין נפתח: המונה שמאחוריו פעל כל הזמן הזה ועבר 1.3 מיליון ביקורים.

יש דוגמה בזמן אמת כאן, ואין צורך בחשבון כדי לצפות.

פרסומת