Подтвердить что ты не робот

Неожиданное поведение при увеличении скорости сети и подключении к серверу node.js

У меня есть простой сервер node.js, например:

var app = require('express')();
var compression = require('compression');
app.use(compression());

app.get('/', function(request, response) {
  response.send('<!DOCTYPE html>.......');
}
app.listen(2345);

Отправляемый html - 2,4 кБ (1,2 кБ при сжатии).
При тестировании на другой скорости сети (с помощью инструментов dev) я получаю это неожиданное поведение:

50kbps:  Latency 600ms, download   1ms
250kbps: Latency 300ms, download 0.6ms
750kbps: Latency 100ms, download 100ms
2Mbps:   Latency  10ms, download 200ms
32Mbps:  Latency   5ms, download 210ms

Я не думаю, что время загрузки должно увеличиваться, когда скорость сети увеличивается после 250 кбит/с. Что происходит?
Снова посмотрим, что произойдет, если я удалю сжатие:

var app = require('express')();

app.get('/', function(request, response) {
  response.send('<!DOCTYPE html>.......');
}
app.listen(2345);

Теперь файл составляет всего 2,4 КБ и посмотрите время ожидания/загрузки:

50kbps:  Latency 550ms, download 230ms
250kbps: Latency 350ms, download  50ms
750kbps: Latency 120ms, download  15ms
2Mbps:   Latency  35ms, download   6ms
32Mbps:  Latency   4ms, download 0.5ms

Ответ с содержимым, отличным от gzipped (и заголовком длины контуров), кажется, все в порядке, но ответ с gzipped-содержимым (с заголовком с кодировкой передачи) не выглядит нормально. это все о?
Я настоятельно рекомендую вам симулировать подобный тест самостоятельно с любыми инструментами, которые вам нравятся, и сами увидеть результаты, прежде чем сказать, что мой бенчмарк неверен и что это невозможно. И если вы получите разные результаты, поделитесь ими.

4b9b3361

Ответ 1

Параметры сжатия Express.js

Я также без колебаний изменил бы различные настройки качества сжатия, стратегии и особенно настройку treshold модуля экспресс-сжатия, как описано здесь: https://github.com/expressjs/compression, особенно:

Уровень сжатия Уровень

Поскольку вы отправляете только несколько байтов текстовых данных в качестве тела, постарайтесь установить нижнюю границу ниже значения по умолчанию 1Kb.

Для ответа рассматривается пороговое значение байта для размера тела ответа до сжатия, по умолчанию - 1 кб. Это число байтов, любая строка, принятая модулем bytes, или false.

(цитируется с страницы github с экспресс-сжатием)

Сжатие HTTP не всегда быстрее

Обязательно поиграйте с другими функциями HTTP, такими как HTTP-конвейеризация или принятые кодировки (также на стороне клиента), поскольку включение или выключение этих функций может значительно изменить исход времени загрузки.

IBM провела серию отличных HTTP-тестов, которые я рекомендую вам прочитать здесь: http://www.ibm.com/developerworks/library/wa-httpcomp/