Pull to refresh

Счетчик времени загрузки

Reading time 3 min
Views 2.2K
Коллеги, други и просто хабралюди. С неделю назад на Web Optimizator был выложен код для счетчика загрузки (немного более подробно об измерении времени загрузки страницы можно прочитать в статьях про анализ скорости загрузки и разгон интернет-магазина).

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

Время загрузки Web Optimizator
График распределения пользователей webo.in по времени загрузки у них этого сайта


Пример текущей статистики и получение кода организовано здесь
http://webo.in/my/action/counter/?url=webo.in
Пока все в достаточно тестовом режиме (статистика вся собирается, но пока выводится только в общем виде). Для просмотра нужно зарегистрироваться.

Что уже есть:
1. Сбор данных :)
2. Вывод графика распределения числа пользователей по времени загрузки
3. Вывод среднего времени загрузки
4. Вывод числа пользователей, загрузивших страницу до 4 секунд включительно (некоторый характерный параметр для оптимизации).
5. Возможность задать диапазон дат.
6. Возможность вывести данные по отдельным браузерам и семействам (всего 18)

Что планируется добавить буквально через пару дней:
1. Закрытие статистики для отдельного сайта
2. Срез времени загрузки по отдельным браузерам (сейчас в базе 17 основных)
3. Добавление каких-либо срезов по самым быстрым / самым медленным страницам и просмотр статистики по отдельным страницам.

Несколько тысяч хитов в день для среднего блога/магазина сервис выдержит без труда. Если будут перебои с обработкой статистики (сейчас логи загоняются в базу раз в десять минут) — буду трясти основных «тяжеловесов» :) Ибо сервер не резиновый.

Какие вопросы не решены:
1. В каком виде удобнее всего выводить список страниц по времени загрузки? Постранично таблицей с возможностью сортировки или придуман какой-то другой более удобный режим для этого?
2. Если у кого-то будут идеи, как отслеживать повторный заход пользователя (когда статика может браться из кэша) на эту же страницу без выставления cookie — буду благодарен. Гонять cookie на сервер статистики не очень хочется.
3. Да, как отключить Last-Modified у nginx для картинки? Заголовки хочется урезать до минимума.

Естественно, любые комментарии приветствуются. Код и доступный функционал можно получить на странице
http://webo.in/my/action/counter/

Принцип работы


JavaScript добавляет на событие window.onload вызов внешней картинки с сервера статистики с основными параметрами. window.onload срабатывает только тогда, когда вся страница оказывается загруженной в браузере. Конфликтов с другими обработчиками быть не должно, код примерно такой получается (немного отформатировал для улучшения понимания, более полно мысли изложены в заметке про организацию счетчиков статистики):

var __WEBO_UA=0;
var __WEBO_START=new Date();
(function(){
	window[/*@cc_on !@*/0?'attachEvent':'addEventListener'](/*@cc_on 'on'+@*/'load',
		function(){
			new Image(1,1).src="http://s.webo.name/0.gif?"+
			__WEBO_UA+";"+
			((new Date())-__WEBO_START)+";"+
			escape(location.href)+";0;"+
			Math.random()
		},false)
}());

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

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

Как обычно, жду комментариев и свежих идей: пример вывода статистики для webo.in

P.S. Надеюсь, что хабраэффект счетчик не положит :)
Tags:
Hubs:
+37
Comments 31
Comments Comments 31

Articles