Измерение пропускной способности веб-браузера - PullRequest
10 голосов
/ 20 мая 2011

Можно ли измерить скорость загрузки и / или загрузки веб-браузерами, отслеживая обычные запросы HTTP?В идеале веб-приложение могло бы определять скорость клиента без каких-либо изменений и без сценариев на стороне клиента, таких как JavaScript / Java / Flash.Таким образом, даже если бы клиент обращался к сервису с помощью библиотеки, такой как Curl, он все равно работал бы.Если это возможно, то как?Если это невозможно, почему?Насколько точным может быть этот метод?

(Если он помогает предположить PHP / Apache, но на самом деле это вопрос, не зависящий от платформы. Для меня важнее также иметь возможность оценить скорость загрузки).

Ответы [ 5 ]

13 голосов
/ 02 июня 2011

Обзор

Вы спрашиваете о том, что обычно называют «пассивным» измерением доступной полосы пропускания (ABW) вдоль пути (по сравнению с измерением ABW одной линии). Существует ряд различных методик 1 , которые оценивают ширину полосы с использованием пассивного наблюдения или низкочастотных "активных" методов зондирования ABW. Однако наиболее распространенными алгоритмами, используемыми в производственных службах, являются активные методы ABW; они наблюдают потоки пакетов из двух разных конечных точек.

Я наиболее знаком с yaz, который отправляет пакеты с одной стороны и измеряет изменение задержки на другой стороне. Методы измерения односторонней пассивной траектории ABW считаются более экспериментальными; нет надежных реализаций алгоритмов AFAIK.

Обсуждение

Проблема с заданием, которое вы задали, заключается в том, что все неинтрузивные 2 методы измерения ABW основаны на синхронизации . К сожалению, при работе с http очень сложно работать со временем ...

  • Вам приходится иметь дело с реальностью кеширования объектов (например, akamai ) и http прокси (которые завершают ваш TCP-сеанс преждевременно и часто подделывают IP-адрес веб-сервера для клиента).
  • Вам приходится иметь дело с веб-хостами, которые могут периодически зависать

Наконец, активные методы ABW основаны на структурированном потоке пакетов (по размеру пакета и времени), в отличие от того, что вы видите при стандартной передаче http.

Резюме

Таким образом, если вы не настроите выделенный клиент / сервер / протокол только для измерения ABW, я думаю, вы будете весьма разочарованы результатами. Вы можете сохранить ваши сокетные соединения ABW на TCP / 80, но инструменты, которые я видел, не будут использовать http 3 .

От редакции : Мой первоначальный ответ предполагал, что ABW с http возможен. При дальнейшем размышлении я передумал.


END-ПРИМЕЧАНИЯ:

  1. См. Архив Салли Флойд из комплексных инструментов оценки пропускной способности TCP / IP
  2. Наиболее распространенные навязчивые методы (такие как speedtest.net ) используют в браузере flash или java-апплет для отправки и получения 3-5 параллельных потоков TCP на каждую конечную точку в течение 20-30 секунд. Добавьте среднюю пропускную способность потоков (не включая потерянные пакеты, требующие повторной передачи) с течением времени, и вы получите tx и rx ABW этого пути. Это, очевидно, довольно разрушительно для звонков VoIP или любых текущих загрузок. Подрывные измерения называются объемной пропускной способностью (BTC). См. RFC 3148: Структура для определения эмпирических показателей объемной пропускной способности . В измерениях BTC часто используется HTTP, но, похоже, BTC не соответствует вашим ожиданиям.
  3. Это хорошо, поскольку устраняет риск встроенного кэширования, запрещая http-кэшированию объект для кэширования; хотя некоторые инструменты (например, yaz) доступны только для udp.
6 голосов
/ 31 мая 2011

Из-за способа, которым TCP-соединения адаптируются к доступной полосе пропускания , это невозможно. Запросы небольшие и обычно помещаются в один или два пакета. Чтобы получить приблизительную оценку пропускной способности, вам потребуется как минимум дюжина полноразмерных пакетов, поскольку сначала TCP должен масштабироваться до доступной пропускной способности («медленный запуск TCP»), а вам необходимо усреднить эффекты дрожания. Если вам нужна какая-то точность, вы, вероятно, говорите о сотнях требуемых пакетов. Вот почему сценарии измерения скорости загрузки обычно передают несколько мегабайт данных.

OTOH, вы могли бы оценить задержку туда-обратно от трехстороннего рукопожатия и времени подтверждения. Но скорость загрузки влияет как минимум на скорость загрузки.

3 голосов
/ 31 мая 2011

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

3 голосов
/ 20 мая 2011

Вы можете использовать AJAXOMeter , библиотеку JavaScript, которая измеряет вашу скорость загрузки и загрузки.Вы можете увидеть живое демо здесь .

3 голосов
/ 20 мая 2011

Нет никакой поддержки в javascript или любом компоненте браузера для измерения производительности загрузки.

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

Затем из браузера вы можете периодически опрашивать сервер, чтобы получить значение в словаре, используя идентификатор сеанса, и показать его пользователю. Таким образом, вы можете сказать, как скорость загрузки.

...