Простой измеритель скорости GET/POST AJAX-запросов

  • 07.04.16
  • 17:32
  • 4116
  • 0

Помогает определить, насколько сильно скорость получения ответа сервера зависит от метода AJAX-запроса — GET или POST.

Результаты экспериментов показывают, что в firefox’е >=38, хроме >=48, старых операх (на presto; новые — на chrome) и IE 9-11 различия между GET и POST пренебрежимо малы — средняя разница редко превышает несколько десятков миллисекунд.

Иногда могут возникать неясные задержки, проявляющиеся в одном браузере и отсутствующие в других. В подобных случаях рекомендуется воспользоваться сниффером (напр. wireshark).

Измерение происходит так: производится несколько GET‑ и POST-запросов серверу и вычисляется среднее время ответа <T> и его среднее квадратичное отклонение σT: $$\left<T\right>=\frac1n\sum_{i=1}^nT_i,\ \ \sigma T=\sqrt{\frac1n\sum_{i=1}^n\left|T_i-\left<T\right>\right|^2}.$$

Количество запросов задаётся в первой графе.

Запросы делаются парами [GET, POST]. Запросы каждой пары отправляются непосредственно друг за другом. Следующая пара отправляется через Δt миллисекунд после получения последнего ответа на предыдущую пару. Разность времён выполнения запросов пары обрабатывается аналогично времени самих запросов и выводится в группе «POST-GET».

CMS при обработке запроса не запускается и на скорость ответа не влияет.

Последовательность методов в паре — [GET, POST] или [POST, GET] — определяется случайным образом. Имеет смысл, если ответ на первый запрос приходит стабильно раньше или позже ответа на второй.

В качестве данных посылается аргумент arg="PING", если установлена галка «отправлять данные». Когда галка сброшена, данные не передаются. Опция добавлена для браузеров, отправляющих тело POST отдельно от заголовков.

Аргумент cache функции $.ajax() полезен для борьбы с агрессивным кешированием IE, приводящим к очень быстрому «получению» ответов на GET-запросы.

Замечание про скорость GET: когда-то POST-запросы отправлялись двумя частями — сначала заголовки, затем данные. Второй пакет мог отправляться как непосредственно за заголовками (для экономии времени), так и после ответа сервера 100 continue (для экономии трафика). Из-за этого AJAX-POST-запрос обрабатывался дольше.

На данный момент основные браузеры — firefox и chrome — POST-запрос не разделяют. Про firefox подобная информация появлялась где-то с третьих версий, это 2009-2011 гг.; opera 12 также POST не делила, — вышла в 2012-ом.

Поэтому идею об использовании GET вместо POST ради скорости можно считать устаревшей.


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

Самостоятельная версия измерителя — на гитхабе.

Оставить комментарий

Добавить комментарий