Връзка с поддръжката

Отговаряме по имейл, обикновено до два дни.

Google reCAPTCHA проверява това изпращане срещу злоупотреби; данни се изпращат към Google. Скриптът се зарежда само когато този формуляр бъде отворен.

← Всички публикации

Списъкът „Кой е онлайн“, обещан през 2012 г., вече работи

На 25 август 2012 г. публикация в този блог обяви, че полетата на статистиката са започнали да се обновяват сами, и завърши с изречението: „Планираната функция, списъкът ‚Кой е онлайн‘, идва скоро!“

Тази публикация все още е тук. Списъкът, който тя обяви, пристигна след четиринадесет години. Сега той съществува, а броячът, към който водеше връзката в онази публикация, работи през цялото това време.

Какво показва

Статистическата страница има панел на живо: колко души са на сайта в този момент и списък с последните от тях – държавата, от която са се свързали, градът, ако е известен, на коя страница са и преди колко време са били видени за последно. По дванадесет наведнъж, най-новите първи.

„В този момент“ означава последните пет минути. След един час редовете се изтриват напълно.

0560в списъка на живоредът още се пазиизтритминути от последното виждане

Какво не означава „кой“

Никой в този списък не е идентифициран. Той е изграден от същия 16-байтов дневен хеш, описан в публикацията за отчитането без бисквитка – зад нито един ред няма име, акаунт, бисквитка или съхранен IP адрес.

Освен това се пази само пътят на страницата, а не целият адрес: /shop/boots, а не пълната връзка с каквото търсачка или бюлетин са добавили в края ѝ.

А двама души от един и същ град, които гледат една и съща страница, са просто два реда. Нищо в системата не може да различи двама читатели от един читател на телефон и лаптоп. Това не е пропуск, който чака да бъде оправен в по-късна версия. Такъв е замисълът и това е същата размяна, която броячът прави навсякъде другаде: достатъчно, за да е полезно, но не достатъчно, за да се следи някой.

На живо, без да се държи отворена връзка

Модерният начин да се изгради това е WebSocket или server-sent events – браузърът държи една отворена връзка, а сървърът изпраща обновленията по нея, когато се случат. Това е елегантният отговор и тук би бил грешният.

Уеб сървърът на този сайт използва по един процес за всяка отворена връзка, а истинската му работа е да отговаря на заявки към броячи за няколко хиляди уебсайта. Връзка, държана отворена, е процес, който не може да отговори на никой друг. Петдесет души, гледащи страницата си на живо, биха означавали петдесет процеса, които стоят без работа и чакат да доставят число, променящо се на всеки няколко минути.

Затова страницата вместо това пита на всеки петнадесет секунди и изтегля малък блок JSON. Около това стоят три решения, които са по-важни от интервала:

  • Ако заявките започнат да се провалят, тя забавя темпото до веднъж в минута – вместо да бомбардира сървър, който очевидно вече има трудности.
  • Във фонов раздел тя спира да пита напълно, а когато разделът отново излезе отпред, се обновява мигновено. Никой не гледа скрит раздел, а заявката би струвала точно колкото една полезна.
  • Редът обновено преди N секунди отброява нагоре локално, веднъж в секунда, и не струва абсолютно нищо. Заявка е нужна само за промяна на данните, а не за тяхното остаряване.

Нищо от това не е хитро. То е пропорционално, което при малък сървър е по-ценното от двете качества. Изгледът на живо не бива да струва повече за поддържане от това, което наблюдава.

Една част, която не се върна

През септември 2015 г. имаше публикация за това как разделът „Потребители“ се научи да различава някого, който активно чете страница, от някого, който я е отворил във фонов раздел и е забравил за съществуването ѝ.

Това разграничение не се е върнало. Сегашният списък знае кога посетителят е бил видян за последно; не знае дали гледа. Наистина си струва да се знае – голяма част от „посетителите“ на всеки сайт са изоставен раздел – затова е в списъка с неща за изграждане.

Надяваме се, не след още четиринадесет години.

Опитайте

Публикацията от 2012 г. завършваше с връзка към пример на живо, което изглежда правилният начин да завърши и тази. Между другото, онази първоначална връзка все още работи: броячът зад нея работи през цялото време и е надхвърлил 1,3 милиона посещения.

Има пример на живо тук, не е нужен акаунт, за да го разгледате.

Реклама