Звернутися до підтримки

Відповідаємо електронною поштою, зазвичай протягом двох днів.

Google reCAPTCHA перевіряє це звернення на зловживання; дані передаються до Google. Скрипт завантажується лише під час відкриття цієї форми.

← Усі записи

Список «хто зараз на сайті», обіцяний у 2012 і вже працює

25 серпня 2012 року допис у цьому блозі повідомив, що поля статистики почали оновлюватися самостійно, і завершувався реченням: «Незабаром з'явиться запланована функція — список „Хто зараз онлайн“!»

Той допис і досі тут. Спискові, про який він оголошував, знадобилося чотирнадцять років. Тепер він є, а лічильник, на який той допис посилався, увесь цей час працював.

Що він показує

На сторінці статистики є панель у реальному часі: скільки людей перебуває на сайті просто зараз, і список найновіших із них — країна, звідки вони підключилися, місто, якщо воно відоме, яка сторінка сайту в них відкрита, і скільки часу тому їх бачили востаннє. По дванадцять за раз, спочатку найновіші.

«Просто зараз» означає останні п'ять хвилин. Через годину рядки видаляються повністю.

0560у живому спискурядок зберігаєтьсявидаленохвилин від останньої появи

Що не означає «хто»

У цьому списку нікого не ідентифікують. Він побудований на тому самому щоденному 16-байтовому хеші, описаному в дописі про підрахунок без cookie-файлу — за жодним рядком не стоїть ні імені, ні облікового запису, ні cookie-файлу, ні збереженої IP-адреси.

Також він зберігає лише шлях сторінки, а не повну адресу: /shop/boots, а не повне посилання з усім, що пошукова система чи розсилка додали в кінець.

А двоє людей з одного міста, які дивляться на ту саму сторінку, — це просто два рядки. Ніщо в системі не може сказати, чи це два читачі, чи один читач з телефону й ноутбука. Це не недогляд, який чекає на виправлення в наступній версії. Це закладено в задум, і це той самий компроміс, який лічильник робить усюди: достатньо, щоб бути корисним, і недостатньо, щоб за кимось стежити.

Реальний час без утримання з'єднання відкритим

Сучасний спосіб реалізувати таке — WebSocket або server-sent events: браузер утримує одне з'єднання відкритим, а сервер надсилає через нього оновлення в міру їх появи. Це елегантна відповідь, і тут вона була б неправильною.

Вебсервер цього сайту використовує один процес на кожне відкрите з'єднання, а його справжня робота — відповідати на запити лічильників для кількох тисяч сайтів. Відкрите з'єднання — це процес, який не може відповісти більше нікому. П'ятдесят людей, які дивляться на свою сторінку в реальному часі, означали б п'ятдесят процесів, що простоюють в очікуванні, доки треба буде видати число, яке змінюється раз на кілька хвилин.

Тож замість цього сторінка сама запитує — раз на п'ятнадцять секунд — і отримує невеликий блок JSON. Навколо цього є три рішення, які важливіші за сам інтервал:

  • Якщо запити починають завершуватися невдало, частота падає до одного разу на хвилину — замість того, щоб бомбардувати сервер, якому й так явно непросто.
  • У фоновій вкладці запити припиняються повністю, і відновлюються тієї ж миті, коли вкладка знову стає активною. Приховану вкладку ніхто не дивиться, а запит коштував би стільки ж, скільки й корисний.
  • Рядок updated N seconds ago рахує локально, раз на секунду, і не коштує нічого. Запит потрібен лише для того, щоб змінити дані, а не для того, щоб їх «зістарити».

У цьому немає нічого хитромудрого. Це пропорційно, а на невеликому сервері саме ця властивість цінніша за хитромудрість. Перегляд у реальному часі не повинен коштувати дорожче, ніж те, за чим він спостерігає.

Одна частина, яка не повернулася

У вересні 2015 року був допис про те, як вкладка Users навчилася відрізняти людину, яка активно читає сторінку, від тієї, хто відкрив її у фоновій вкладці й забув про її існування.

Ця відмінність не повернулася. Поточний список знає, коли відвідувача бачили востаннє; він не знає, чи дивиться ця людина на сторінку. Знати це справді варто — чимала частка «відвідувачів» будь-якого сайту — це покинута вкладка, — тож це в списку того, що ще належить побудувати.

Сподіваємося, не ще чотирнадцять років.

Живий приклад

Допис 2012 року завершувався посиланням на живий приклад, і це, схоже, правильний спосіб завершити і цей допис. До речі, те початкове посилання досі відкривається: лічильник за ним працював увесь цей час і вже перетнув позначку 1,3 мільйона візитів.

Ось живий приклад — щоб подивитися, обліковий запис не потрібен.

Реклама