Как измерить время посещения пользователя
Мне нравится измерять время, которое пользователь потратил на страницу somepartr моего webapp. Сначала я подумал о том, чтобы поймать событие onunload/onbeforeunload в браузере и уведомить сервер через XMLHttpRequest, который пользователь сейчас уходит:
<body onunload="userLeaves('/url/to/current/page',xxx);" ...> ... </body>
где xxx - это inital tiemstamp, когда страница была отображена.
К сожалению, это решение не работает во всех браузерах (например, Opera). Поэтому моя вторая идея заключалась в том, чтобы постоянно пинговать сервер. Чтобы рассчитать время посещения, кто-то должен занять последнее время пинга и вычесть его из временной отметки времени. Но я не думаю, что это хорошее решение, особенно если пользователь имеет 3 или 5 вкладки, и каждая вкладка запускает события каждые 500 мс...
как бы вы измерили время посещения? есть ли у кого-то лучшая идея получить время, потраченное на одну конкретную страницу?
Ответы
Ответ 1
Подход, используемый такими инструментами, как Google Analytics, заключается в том, что время посещения измеряется как время, когда пользователь нажимал первую страницу до момента, когда они попали на последнюю страницу в течение одного "посещения". Один визит определяется как серия просмотров страниц одним пользователем (cookie), где каждое посещение достаточно близко к предыдущему времени. Я не знаю, каков этот предел.
По моему опыту, эти трюки с событиями разгрузки и т.д. граничат с тем, что они навязчивы, и пользователи не ценят их. Таким образом, они добавляют незначительную ценность к более пассивному подходу, например, к созданию посещения файлов cookie и данных просмотра страницы.
Ответ 2
Я предлагаю практически любой веб-аналитический пакет в зависимости от ваших бизнес-целей.
[есть и другие, некоторые из которых больше подходят для рекламной сети...]
Ответ 3
Почему бы не взглянуть на Google Analytics, стандартное отслеживание будет захватывать эти данные для вас.
http://www.google.com/analytics/
Ответ 4
Это зависит от того, сколько ошибок вы допустили бы. Если ошибка составляет порядка десятков минут, вам нужен только журнал посещения и задайте интервал ожидания сеанса для последней страницы.
Если вы разрешаете только сотни миллисекунд, вам нужно будет выполнить ping.
Если ошибка находится где-то посередине, вам все равно нужно выполнить ping, хотя и с меньшей скоростью; или принять тот факт, что для пользователя, который выключил браузер, не будет запускать событие onunload.