Главная / Проекты и исследования / Сравнение XMLHttpRequest и Fetch API / Фаза 1
NB: писано по горячим следам прошедшей конференции ИТиАУ.
Ссылка на репозиторий с исходными кодами: https://codeberg.org/danila-kondr/xhrfetch
27 мая 2023 г.
После сдачи курсового проекта на кафедру АСОИУ я обратился к Александру
Геннадьевичу за темой для научной статьи. Он предложил мне сравнить два метода
AJAX-запросов: XMLHttpRequest и Fetch API. Я,
естественно, в скором времени приступил к исследованию этой темы и постановке
экспериментов. Исходный материал в виде веб-страницы, PHP и JS-скриптов был
прислан по электронной почте.
Естественно, сами по себе эти файлы ничего сделать не способны, поэтому я по рекомендации Александра Геннадьевича поставил XAMPP, где уже есть всё необходимое, и скопировал в нужную папку все исходные файлы.
Для того, чтобы определить, за сколько выполняется каждая разновидность
асинхронных запросов, было решено запустить процедуру достаточно большое
количество раз (как в timeit). Запрос делался на PHP-скрипт,
который выдавал небольшую строчку, записанную в кодировке UTF-8 русскими
буквами. Методом подбора было выбрано оптимальное число запросов, а именно
— 1000. Поскольку время может различаться из раза в раз, тест повторялся
для каждого метода по 10 раз с периодичностью в одну секунду.
Но ведь объёмы данных не ограничиваются небольшими порциями. Иногда из Интернета выкачиваются асинхронно целые мегабайты, поэтому был введён тест для больших наборов данных. К сожалению. при попытке запустить его при 1000 запросов система зависала намертво, поэтому пришлось урезать до 25. Конечно, пострадала точность, но другого варианта не было.
Эксперимент проводился на двух операционных системах на различных браузерах. Ради интереса я даже попросил макбук у Артемия Андреевича, чтобы попробовать запустить тест на Safari.
В итоге я получил данные с 11 различных экспериментов на разных браузерах на трёх операционных системах: Windows, Linux, macOS. При этом на macOS почему-то Safari показал самые лучшие результаты. Почему — непонятно.
Статья была оформлена и отправлена Александру Геннадьевичу на доработку, а после доработки — принята на конференцию ИТиАУ.
Доклад был представлен 26 мая 2023 года. В процессе подготовки к докладу, а также во время самого доклада были выявлены некоторые недостатки:
Во-первых, возникли подозрения в чистоте эксперимента, поскольку на данные вполне могли повлиять такие факторы, как количество запущенных в фоне приложений и вкладок в браузере, кэширование, аппаратная платформа как таковая и так далее.
Во-вторых, не был учтён фактор сетевой загруженности, так как все
эксперименты проводились через localhost.
Во-вторых, возникли претензии к методам статистической обработки данных: для каждого тестового набора вычислялось среднее арифметическое с отбрасыванием минмального и максимального, при этом в докладе и статье, на которой он основан, не была доказана необходимость применения именно этого метода, то есть, всё делалось на глаз.
Таким образом, эксперимент был неидеален, но я думаю, что эксперимент на этом не останавливается. Он будет пересмотрен и доработан плюс будут исследованы факторы, которые могут влиять на сам запрос.
Для того, чтобы исключить различные факторы, которые могут влиять на производительность, необходимо:
Для этого эксперимента необходимо запустить тест на малом наборе данных меньшее число раз (100) и прогнать 100 циклов с периодичностью в 0,1 с. Построить графики. Можно ожидать, что максимальное значение будет первым.
Схема эксперимента не отличается от таковой для случая с одной вкладкой. Единственное отличие — для эксперимента используется исключительно малый набор данных. Каждый раз после проведения эксперимента открываем вкладку с Яндексом. Повторяем 10 раз.