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

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

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

← Усі записи

Показникові відмов потрібен один біт, а не трекер

До 28 серпня цей сайт не показував показника відмов, а сторінка «про нас» казала, що це навмисно: знадобився б сеанс, відстежуваний через кілька переглядів, а для нього — банер згоди.

Перша половина була правдою. Друга перестала нею бути тієї миті, коли ми почали записувати сторінки виходу, і ніхто не виправив фразу.

чотири візити, і що про них каже кожне джерело таблиця переходів біт одна сторінка нічого 0 двічі та сама сторінка нічого 0 дві сторінки, 40 секунд між ними один перехід 1 дві сторінки, 35 хвилин між ними нічого 1 четвертий візит не відмова, і знає про це лише одне з джерел

Чому його не можна було просто обчислити

Є таблиця переходів зі сторінки на сторінку. Вона виглядає як усе, що потрібно показникові відмов: візит, який іде з однієї сторінки на іншу, не відмова, отже рахуй візити без переходу.

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

А візит, щоб його порахувати, триває годину: стільки живе рядок у живій таблиці. Чисельник і знаменник користувалися б двома різними поняттями візиту. Число вийшло б не трохи хибним, воно вийшло б ні до чого не прив’язаним.

Що дані все ж сказали

27 і 28 серпня було 8 669 візитів і 2 817 переходів, тобто в середньому 1,32 сторінки на візит. 99 лічильників із 572 записали бодай один перехід.

Це не вимкнений перемикач: запис шляхів типово ввімкнено, і в усіх 166 453 лічильників він увімкнений. Ці сайти справді односторінкові: профілі, поодинокі сторінки, галерея на чужому майданчику. Показник відмов у більшості буде близький до ста відсотків, і це буде правдою.

Один біт і жодного нового збирання

У візита й так є рядок на годину. Тепер він несе ще одне: чи бачив цей візит колись другу, іншу сторінку. Значення ставиться всередині команди, яка виконується в будь-якому разі, без додаткового запиту:

ON DUPLICATE KEY UPDATE mehr = mehr | (url <> VALUES(url)),
                        last_seen = UNIX_TIMESTAMP(), url = VALUES(url)

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

Коли година минула, нічне прибирання рахує рядки, що спливають — скільки візитів, скільки з них багатосторінкових, — пише один рядок на лічильник і день та видаляє їх. Біт живе годину. Жодних cookie й нічого, що його переживе.

Що тут узагальнюється

Цікаве питання ніколи не полягало в тому, як відстежити сеанс. Воно полягало в тому, що з уже записуваного випадково відповідає на питання — і чи прив’язана відповідь до того самого поняття, що й питання.

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

Реклама