Измерение пропускной способности веб-браузера
Можно ли измерить скорость загрузки и / или загрузки веб-браузеров, отслеживая обычные запросы HTTP? В идеале веб-приложение могло бы определять скорость клиента без каких-либо изменений и без сценариев на стороне клиента, таких как JavaScript/Java/Flash. Таким образом, даже если бы клиент обращался к сервису с помощью библиотеки, такой как Curl, он все равно работал бы. Если это возможно, то как? Если это невозможно, почему? Насколько точным может быть этот метод?
(Если это помогает предположить PHP/Apache, но на самом деле это вопрос, не зависящий от платформы. Для меня важнее также иметь возможность оценить скорость загрузки.)
5 ответов
обзор
Вы спрашиваете о том, что обычно называют "пассивным" измерением доступной полосы пропускания (ABW) вдоль пути (в отличие от измерения ABW одной линии). Существует ряд различных методов1, которые оценивают полосу пропускания с использованием пассивного наблюдения или "активных" методов зондирования ABW с низкой полосой пропускания. Однако наиболее распространенными алгоритмами, используемыми в производственных службах, являются активные методы ABW; они наблюдают потоки пакетов с двух разных конечных точек.
Я наиболее знаком с yaz
, который отправляет пакеты с одной стороны и измеряет изменение задержки на другой стороне. Методы измерения односторонней пассивной траектории ABW считаются более экспериментальными; нет надежных реализаций алгоритмов AFAIK.
обсуждение
Проблема с задачей, которую вы просили, состоит в том, чтовсе неинтрузивные методы измерения 2 ABW зависят отвремени. К сожалению, время работы с http очень сложно.
- Вам приходится иметь дело с реальностью кэширования объектов(например, akamai) и прокси-серверов http(которые преждевременно завершают сеанс TCP и часто подделывают IP-адрес веб-сервера клиенту).
- Вы должны иметь дело с веб-хостами, которые могут периодически хлопать
Наконец, активные методы ABW основаны на структурированном потоке пакетов (по размеру пакета и времени), в отличие от того, что вы видите при стандартной передаче http.
Резюме
Таким образом, если вы не настроите выделенный клиент / сервер / протокол только для измерения ABW, я думаю, вы будете весьма разочарованы результатами. Вы можете сохранить ваши сокетные соединения ABW на TCP/80, но инструменты, которые я видел, не будут использовать http3.
От редакции. Мой оригинальный ответ предполагал, что ABW с http возможен. После дальнейших размышлений я передумал.
END-ПРИМЕЧАНИЯ:
- См . Архив Салли Флойд о комплексных инструментах оценки пропускной способности TCP/IP.
- Наиболее распространенные навязчивые методы (такие как http://www.speedtest.net/) используют в браузере flash или java-апплет для отправки и получения 3-5 параллельных потоков TCP на каждую конечную точку в течение 20-30 секунд. Добавьте среднюю пропускную способность потоков (не считая потерянных пакетов, требующих повторной передачи) с течением времени, и вы получите tx и rx ABW этого пути. Это, очевидно, довольно разрушительно для звонков VoIP или любых загрузок в процессе. Подрывные измерения называются объемной пропускной способностью (BTC). См. RFC 3148: Структура для определения эмпирических показателей пропускной способности. В измерениях BTC часто используется HTTP, но BTC, похоже, не тот, что вам нужен.
- Это хорошо, поскольку он устраняет риск встроенного кэширования, запрещая http-кэшированию объект для кэширования; хотя некоторые инструменты (как
yaz
) только для udp.
Из-за того, как TCP-соединения адаптируются к доступной пропускной способности, нет, это невозможно. Запросы небольшие и обычно помещаются в один или два пакета. Чтобы получить приблизительную оценку пропускной способности, вам понадобится как минимум дюжина полноразмерных пакетов, поскольку сначала TCP должен масштабироваться до доступной пропускной способности ("медленный запуск TCP"), а вам необходимо усреднить эффекты дрожания. Если вам нужна какая-то точность, вы, вероятно, говорите о сотнях требуемых пакетов. Вот почему сценарии измерения скорости загрузки обычно передают несколько мегабайт данных.
OTOH, вы могли бы оценить задержку туда-обратно от трехстороннего рукопожатия и времени подтверждения. Но скорость загрузки влияет как минимум на скорость загрузки.
В целом это неосуществимо, поскольку входящая и исходящая пропускная способность зачастую не симметрична. Разные интернет-провайдеры имеют существенно разные соотношения, которые могут варьироваться в зависимости от времени суток.
Вы можете использовать AJAXOMeter, библиотеку JavaScript, которая измеряет вашу скорость загрузки и загрузки. Вы можете увидеть живое демо здесь.
Нет никакой поддержки в javascript или любом компоненте браузера для измерения производительности загрузки.
Единственный способ, о котором я могу думать, - это если вы загружаете в обработчик страницы / http, и страница получает входящие байты, она может измерить, сколько байтов она получает в секунду. Затем сохраните это в некотором общедоступном словаре с идентификатором сеанса.
Затем из браузера вы можете периодически опрашивать сервер, чтобы получить значение в словаре, используя идентификатор сеанса, и показать его пользователю. Таким образом, вы можете сказать, как скорость загрузки.