Назад | Перейти на главную страницу

Почему загрузка происходит быстрее и чередуется по скорости, чем загрузка на локальном компьютере

Я пишу тест скорости для определения скорости соединения браузера с сервером (js + php, но я не думаю, что это имеет значение). Я отправляю кучу пакетов данных разных размеров и измеряю время, необходимое им для достижения сервера (загрузки) или клиента (загрузка).

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

Uploaded kb |    1 |    2 |    4 |    8 |   16 |   32 |   64 |  128 |  256 |  512 | 1024 | 2048 | 4096 | Average byte/sec
-------------------------------------------------------------------------------------------------------------------------
ms series 1 |    3 |    9 |    7 |    3 |   11 |   10 |   11 |    5 |   13 |   19 |   37 |   47 |  130 | 14.9344274575002
ms series 2 |    2 |    7 |    2 |    2 |    7 |    3 |    5 |    7 |   11 |   16 |   28 |   46 |   86 | 18.5357872423498
ms series 3 |    6 |    3 |    4 |    2 |    3 |    3 |    4 |    7 |    8 |   14 |   37 |   50 |  113 | 18.0964908223754
ms series 4 |    9 |    6 |    7 |    6 |    2 |    3 |   12 |   16 |   10 |   23 |   25 |   51 |   85 | 16.6696396851004
ms series 5 |    8 |    2 |    3 |   88 |    7 |    4 |    4 |    6 |   10 |   19 |   38 |   46 |   99 | 16.989223651609

Downl. kb   |    1 |    2 |    4 |    8 |   16 |   32 |   64 |  128 |  256 |  512 | 1024 | 2048 | 4096 | Average byte/sec
-------------------------------------------------------------------------------------------------------------------------
ms series 1 |   67 |   14 |   54 |   33 |   44 |   35 |   29 |   59 |   90 |  105 |  220 |  394 |  780 | 2.28178300694085
ms series 2 |   34 |   88 |   52 |   85 |   22 |   26 |   38 |   43 |   61 |  108 |  180 |  368 |  721 | 2.57923191272149
ms series 3 |   26 |   16 |  126 |   73 |   16 |   40 |   44 |   38 |   74 |  120 |  186 |  381 |  691 | 2.48128561711253
ms series 4 |   23 |    7 |   12 |   14 |   27 |   21 |   18 |   44 |   74 |   97 |  182 |  413 |  919 | 2.6496804364072
ms series 5 |   19 |   13 |   11 |   74 |   67 |   25 |   72 |   34 |   61 |   93 |  181 |  347 |  677 | 2.69509313778383
ms series 6 |   40 |   60 |   33 |   14 |   62 |   48 |   64 |   29 |   51 |   94 |  171 |  330 |  700 | 2.80628837904148
ms series 7 |   25 |    8 |   32 |   61 |   26 |   18 |   19 |   29 |   52 |  100 |  169 |  357 |  676 | 3.04519001690114

Скорость загрузки примерно в десять раз больше Быстрее чем скорость загрузки, которую я не могу объяснить. Поскольку все происходит на одном компьютере, и нет загрузки каким-либо образом, включая поставщика сети или что-то еще, я бы предположил, что все более или менее одинаково. Также, как Вы можете видеть в самом последнем столбце, средний байт / сек варьируется намного больше в случае тестов загрузки (от 14,9 до 18,5, так что диапазон составляет 3,6 два байта / сек), а затем в случае тестов загрузки ( изменяется от 2,2 до 3,0, что составляет диапазон 0,8). Точные значения не точные, но тот факт, что средняя скорость загрузки варьируется намного больше, чем средняя скорость загрузки, полностью воспроизводится (на моем локальном компьютере не пробовал это для реального сценария сервер / клиент).

Есть идеи, почему скорость загрузки намного выше и различается гораздо больше, чем скорость загрузки?

Приложение: Как мне измерить?

Загрузить:

Перед звонком сделать const startingTime = new Date().getTime(); затем отправьте пакет из x случайных символов base64 на сервер с xhr. Верните время прибытия (PHP $_SERVER['REQUEST_TIME_FLOAT']) И в xhr.load рассчитать:

testResult.duration = arrivalTime - startingTime;

Скачать:

Отправить запрос с размером на сервер. Верните пакет из x символов base64, содержащий время прибытия вызова (снова PHP $_SERVER['REQUEST_TIME_FLOAT']) И в xhr.load рассчитать:

const currentTime = new Date().getTime();
testResult.duration = currentTime - arrivalTime;

Я считаю, что проблема в том, что вы полагаетесь на время начала выполнения PHP, измеренное с помощью $ _SERVER ['REQUEST_TIME_FLOAT'], который имеет точность 1 микросекунду, и сравнивая его с методом Javascript Date.getTime () с точностью до 1 секунды.

Что вам нужно, так это таймер с высоким разрешением, что действительно сложно сделать в браузере.

Лучше всего, вероятно, будет использовать PHP $ _SERVER ['REQUEST_TIME_FLOAT'] как время начала, так и время остановки во всех тестах. Это действительно один из самых мощных нативных таймеров. Либо так, либо используйте язык рабочего стола, такой как Python, для клиентского приложения, которое имеет лучшие таймеры с высоким разрешением, чем Javascript.