Неожиданное поведение при увеличении скорости сети и подключении к серверу 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-содержимым (с заголовком с кодировкой передачи) не выглядит нормально. это все о?
Я настоятельно рекомендую вам симулировать подобный тест самостоятельно с любыми инструментами, которые вам нравятся, и сами увидеть результаты, прежде чем сказать, что мой бенчмарк неверен и что это невозможно. И если вы получите разные результаты, поделитесь ими.
Ответы
Ответ 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/