Главная / Проекты и исследования / Сравнение XMLHttpRequest и Fetch API / Фаза 2
Ссылка на репозиторий с исходными кодами: https://codeberg.org/danila-kondr/xhrfetch
8 июня 2023 г.
Во время предыдущей фазы исследования были допущены определённые ошибки. Самым крупным промахом оказался способ исследования времени работы: измерялось время не самого запроса, а время подготовки к нему. Эксперимент был переделан следующим образом:
Во-первых, было введено сохранение информации о времени
совершения каждого запроса. Для этого был создан глобальный
объект типа Map и класс RequestData, а
каждому запросу стал присваиваться уникальный идентификатор,
который приписывается к ссылке;
Во-вторых, было введено понятие «эксперимента» — пачки запросов, выполняющихся одновременно, в каждой пачке по 10 запросов;
В-третьих, было введено сохранение результатов по экспериментам и запросам в формате CSV для удобства обработки данных;
В-четвёртых, большой набор данных был обрезан до тела HTML-страницы, а малый набор стабилизирован (то есть, PHP-скрипт был заменён HTML-страницей), что позволит получить более стабильные результаты, не зависящие от скорости интерпретатора PHP и передачи данных;
В процессе проведения экспериментов было выяснено, что много запросов одновременно посылать не надо, поскольку время ожидания ответа от сервера достаточно большое (даже от локальной петли, не говоря уже о чём-то более серьёзном). Так что много можно не делать, поскольку мы измеряем то, что надо.
Естественно, в процессе проведения экспериментов выяснились довольно необычные явления, в частности, многие браузеры не поддерживают больше шести запросов. Порывшись в Интернете, я наткнулся на ответ из Stack Overflow, где говорится, что старые браузеры не поддерживают больше двух соединений с HTTP-сервером, так что это тоже может сыграть определённую роль.
Я решил поискать способ отследить момент отправки заголовков HTTP через Fetch API. Не нашёл. Ограничил количество запросов в одном эксперименте до шести штук. Эксперименты пока не проводил.
Пока я описывал вторую фазу, у меня возник вопрос: может быть, стоит делать одиночные запросы, а не пачку запросов сразу?
Может быть, стоит ещё как-то сделать так, чтобы один запрос начинался только после того, как закончится другой? Может быть, так будет лучше...
9 июня 2023 г.
Сделал выполнение запросов один за одним. Но! В то время, как запросы XMLHttpRequest выполняются один за одним, запросы Fetch API запускаются пачкой. Даже несмотря на все меры по созданию последовательности.
10 июня 2023 г.
Внезапно оказалось, что существует Performance API, который позволяет получить информацию о производительности запросов данных (по крайней мере, эту информацию можно использовать для измерения производительности запросов). Это многое меняет!
До этого я вёл свою собственную таблицу запросов, пытался выловить нужный момент, а тут — есть целый интерфейс для этого! Это замечательно!
Будем пробовать выяснять при помощи него!
23 июня 2023 г.
Недавно я закончил переделывание эксперимента. Поставил сто итераций на малый набор данных и запустил на компьютере в медиацентре. Результаты меня удивили довольно сильно: на малом наборе данных разброс довольно сильный, при этом XMLHttpRequest и Fetch API не показывают каких-либо видимых заметных улучшений. Так что эти методы могут отличаться чем угодно, но только не скоростью.
Окончательное решение: выпустить статью под названием «Сравнение асинхронных методов получения данных» и просто опубликовать её в сборнике материалов конференции ИТиАУ. Я больше на эту тему выступать не буду! Есть более интересные темы.