Связаться с поддержкой

Мы отвечаем по электронной почте, обычно в течение двух дней.

Для защиты от злоупотреблений Google reCAPTCHA проверяет эту отправку; при этом данные передаются в Google. Скрипт загружается только при открытии этой формы.

← Все записи

Список «кто сейчас на сайте», обещанный в 2012 и уже работающий

25 августа 2012 года в этом блоге вышла запись о том, что поля статистики начали обновляться сами по себе, а закончилась она фразой: «Запланированная функция, список „Who is online“, появится совсем скоро!»

Та запись до сих пор здесь. Списку, о котором она объявляла, понадобилось четырнадцать лет. Теперь он есть, а счётчик, на который та запись ссылалась, всё это время работал.

Что он показывает

На странице статистики теперь есть живая панель: сколько человек находится на сайте прямо сейчас, а также список самых недавних из них — страна, откуда они подключились, город, если он известен, какая страница сайта у них открыта, и сколько времени прошло с момента, когда их видели в последний раз. По двенадцать за раз, сначала самые новые.

«Прямо сейчас» означает последние пять минут. Через час строки удаляются полностью.

0560в живом спискестрока хранитсяудаленаминут с последнего появления

Чего не означает «who»

Никто в этом списке не идентифицируется. Он строится на основе того же 16-байтового ежедневного хеша, который описан в статье о подсчёте без cookie, — ни за одной строкой в нём не стоит ни имени, ни аккаунта, ни cookie, ни сохранённого IP-адреса.

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

И два человека из одного города, смотрящих одну и ту же страницу, — это просто две строки. Ничто в системе не может сказать, два ли это читателя или один читатель с телефона и с ноутбука. Это не недоработка, которую нужно когда-нибудь исправить в новой версии. Это осознанное решение, и это тот же компромисс, на который счётчик идёт везде: достаточно, чтобы быть полезным, но не настолько, чтобы следить за кем-то.

Реальное время без постоянного соединения

Современный способ сделать это — WebSocket или server-sent events: браузер держит одно соединение открытым, а сервер проталкивает через него обновления по мере их появления. Это изящное решение, и здесь оно было бы неверным.

Веб-сервер этого сайта использует один процесс на каждое открытое соединение, а его настоящая работа — отвечать на запросы счётчиков для пары тысяч сайтов. Соединение, удерживаемое открытым, — это процесс, который не может ответить никому другому. Пятьдесят человек, следящих за своей живой страницей, означали бы пятьдесят простаивающих процессов, ожидающих момента, чтобы доставить число, которое меняется раз в несколько минут.

Поэтому вместо этого страница сама спрашивает — раз в пятнадцать секунд — и получает небольшой блок JSON. Вокруг этого стоят три решения, которые важнее, чем сам интервал:

  • Если запросы начинают завершаться ошибкой, частота снижается до одного раза в минуту — вместо того чтобы долбить сервер, которому и так, судя по всему, уже нелегко.
  • В фоновой вкладке запросы прекращаются полностью и возобновляются сразу, как только вкладка снова становится активной. Никто не смотрит на скрытую вкладку, а запрос стоил бы ровно столько же, сколько и полезный.
  • Строка updated N seconds ago считает вверх локально, раз в секунду, и не стоит вообще ничего. Запрос нужен только для того, чтобы изменить данные, а не для того, чтобы состарить их.

Ничего умного здесь нет. Это соразмерно — а на маленьком сервере это более ценное из двух качеств. Живое представление не должно стоить дороже в работе, чем то, за чем оно наблюдает.

Часть, которая не вернулась

В сентябре 2015 года вышла статья о том, как вкладка Users научилась отличать человека, активно читающего страницу, от того, кто открыл её в фоновой вкладке и забыл о её существовании.

Это различие пока не вернулось. Текущий список знает, когда посетителя видели в последний раз, но не знает, смотрит ли он на страницу. Это по-настоящему стоит знать — изрядная доля «посетителей» любого сайта на самом деле являются забытой вкладкой, — так что это в списке того, что предстоит сделать.

Надеюсь, не ещё четырнадцать лет.

Живой пример

Запись 2012 года заканчивалась ссылкой на живой пример, и это, похоже, правильный способ закончить и эту статью. Та исходная ссылка, кстати, до сих пор работает: счётчик за ней всё это время не останавливался и уже перевалил за 1,3 миллиона визитов.

Вот живой пример — смотреть можно без аккаунта.

Реклама