LINUX.ORG.RU

Как считать время проведенное на сайте?

 


1

1

Ну абстрактно понятно - сначала все льем в массивы битов, где каждый бит соответствует 1 минуте (или любой_другой_интервал_времени). Например через битовые операции в redis. Потом агрегируем по дням, месяца, годам - смотря как надо.

Но есть нюанс - юзер ведь может не тыкать по ссылкам, а читать длинную статью. Вроде как запросов на сервер не шлет, но и на сайте сидит. А может открыть вкладку и уйти - тогда не считается.

Как обычно такое решают? Пока придумал 2 варианта:

1. Собираем промежуточную (между запросами) статистику на клиенте, и потом домерживаем.
2. На сервере, если между битами небольшая пауза, заполняем промежуток.

Оба варианта как-то не очень нравятся.

★★★★★

юзер ведь может не тыкать по ссылкам, а читать длинную статью

ИМХО тут уже JS нужен. По крайней мере Я.Метрика как-то так работает.

Radjah ★★★★★
()

Очередной поток сознания от великого маэстро цЫклов и кюррированных транзакционных монад.

Но есть нюанс - юзер ведь может не тыкать по ссылкам, а читать длинную статью.

юзер ведь может открыть статью, и бухать бухашку и плевать на экран. Может по количеству плевков на экране как то определять? Нюансы они такие нюансивые.

gototheultimate
()
Ответ на: комментарий от gototheultimate

юзер ведь может открыть статью, и бухать бухашку и плевать на экран

Внезапно, поддержу этого товарища. После загрузки страницы какая разница что делает юзер? Если я открываю 100500 вкладок в браузере и месяцами не закрываю и не выключаю комп, это не значит, что я на всех этих сайтах постоянно 24/7 «нахожусь».

Вроде как запросов на сервер не шлет, но и на сайте сидит

Тут нужен не просто js, а ещё и ловить ивенты мыши и скроллинга на странице чтобы убедиться что пользователь именно на этой странице втыкает. Но всё равно нет никакой гарантии что пользователь между движениями мыши именно читал, а не ходил отлить.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Ну дурачок-то в своем репертуаре, осилил понять пункт (1) из первого поста, и прибежал похвастаться. А ты-то его в чем поддерживаешь?

Vit ★★★★★
() автор топика
Ответ на: комментарий от Harald

Если абстрактно, то иногда полезно при разборе инцидентов с уводом аккаунтов. Ну и просто интересно сделать.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Если абстрактно, то иногда полезно при разборе инцидентов с уводом аккаунтов.

И чем конкретно замер времени может помочь в этом случае?

Harald ★★★★★
()
Ответ на: комментарий от Harald

Можно смотреть с какой сессии что постили. Может пригодиться тренировать нейронку отличать нормальных юзеров от кидал.

Vit ★★★★★
() автор топика

NoScript против сбора личной информации.

Chaser_Andrey ★★★★★
()
Ответ на: комментарий от Harald

От ботов кстати тоже, хотя с ними у меня проблем нет. Но я говорил про мошенников.

Vit ★★★★★
() автор топика

скипт наверное каждые 5 сек может скидывать инфу что страница еще открыта.

dima1981
()

Насколько я знаю Optimizely именно этим и занимается, также я видел подобное в piwik, но конечно не сильно продвинуто (ну и не факт, что само наличие piwik понравится пользователю).

иногда полезно при разборе инцидентов с уводом аккаунтов.

Может naxsi или какой-нибудь другой плагин для nginx вроде Session-Binding-Proxy можно как-то приспособить для задачи

anonymous_sama ★★★★★
()

У нас для уведомлений использовался sock.js, реквесты клались в монгу а время агрегировалось по интервалам open/close вебсокета. Понятно что это не дает 100% данных, но статистическую картину раскрывает. Так и работают аналитики, ну может с onunload вместо вебсокета.

emptykiev
()
Ответ на: комментарий от emptykiev

Имелось в виду, что битовые маркеры времени которые определяет сервер - достоверные (юзер запрос сделал), а то что прилетает с клиента - не очень. Надо их правильно скрестить.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Достоверные данные тут получить не выйдет, как и цифру в тюлечку. Можно посчитать реквесты, можно посчитать время по интервалу onload-onunload, через скрипты или сокет, через разницу между запросами в группе ближайших, но и это будет лишь условным. Более того это разные показатели и пользоваться ими стоит в разных ситуациях. Наша схема с сокетом работала и покрывала все потребности, что еще можно тут изобрести? Волшебную нейронку чтоль)?

emptykiev
()
Ответ на: комментарий от emptykiev

Я не телепат, и что у вас была за схема с сокетом и какие потребности - без понятия.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

В каждой странице включаем вебсокет, у него есть два события (с серверной стороны): open & close. Засекаем время, получаем разницу - время сессии между заходом на страницу и выходом с нее. Что ж тут непонятного? Сумма времени сессий и есть продолжительность на времени на сайте, самая точная из возможных.

emptykiev
()

Смотря что принимать за время, проведенное на сайте - можно открыть вкладку и оставить...

Теоретически, можно по событиям focus/blur (возможны тормоза) считать интервалы например, если конечно не задан DNT ...

anonymous
()
Ответ на: комментарий от emptykiev

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

Vit ★★★★★
() автор топика

мы раз в 10 секунд ставим хук на события мыши и еще некоторые. если в следующие 10 секунд событие проскочило (хук при этом отключается чтоб ресурсы не жрать), шлем пинг пакет на сервак.
с недавних пор еще PageVisible API появилось, надо бы его тоже прикрутить чтоб фоновые вкладки не мучать.

genryRar ★★
()
Ответ на: комментарий от emptykiev

Вам шашечки или ехать, батенька?

Мне конкретику, а не балабольство на общие темы.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

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

genryRar ★★
()
Ответ на: комментарий от Vit

Конкретика прозвучала выше, конкретику «определить что пользователь открыл окно и АФК потому такое время не учитываем» вам только в дурдоме подскажут.

emptykiev
()
Ответ на: комментарий от emptykiev

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

emptykiev
()

Можно просто AJAXом посылать http get запросы каждую минуту на сервер, и потом сохранять их :) типо 1 минута = 1 запрос

mikuhatsune
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.