Как отправить сжатые данные, НЕ закодированные в виде фрагментов, но с заголовком длины содержимого в экспрессе? (узел.js)

У меня есть что-то вроде:

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

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

Проблема в том, что данные отправляются фрагментарно, но я хочу, чтобы они полностью отправлялись с заголовком длины содержимого. Точно так же, как Apache делает по умолчанию (почему я хочу, чтобы это поведение объяснялось в комментариях).
Итак, как я могу отправлять данные, сжатые gzip, напрямую, а не по частям в экспресс?


person Core_dumped    schedule 17.02.2015    source источник
comment
Неэффективно не отправлять сжатые данные по частям. Это потребует свободного места на диске или памяти для всего ресурса, пока происходит сжатие, плюс вывод не сможет передаваться в потоковом режиме. Зачем вам это нужно? Я бы также предложил оставить эту задачу вышестоящему веб-серверу, такому как Nginx (или даже Apache, если это то, что вы предпочитаете).   -  person Brad    schedule 17.02.2015
comment
Дело в том, что странные вещи случаются. Если у меня скорость ‹250 кбит/с, задержка составляет 300 мс, а 3 КБ данных загружаются за пару мс. В то время как, если я нахожусь на >250 кбит/с, получаю меньшую задержку, как и должно быть, но данные загружаются примерно через 200 мс, независимо от того, нахожусь ли я на скорости 750 кбит/с или 30 Мбит/с, всегда 200 мс. если я отправлю эти сжатые данные с помощью Apache, где он устанавливает длину содержимого, загрузка обычно происходит через ~ 1 мс. О чем все это?   -  person Core_dumped    schedule 17.02.2015
comment
чтобы быть более точным, данные 3k загружаются за 1 мс, если я нахожусь в сети 250 кбит/с, за 100 мс, если я нахожусь в сети 750 кбит/с, и за 200 мс, если я нахожусь в сети 30 Мбит/с. Что это?? По мере увеличения скорости сети время загрузки также увеличивается? Разве они не должны быть обратно пропорциональны? Это происходит, если данные отправляются фрагментами.   -  person Core_dumped    schedule 17.02.2015
comment
Не совсем понятно, что вы тестируете. Во-первых, изолируйте проблему и сузьте ее до приложения, позвонив на свой сервер 127.0.0.1. Я бы также сказал, что 300 мс для сжатия 3 КБ данных — это очень много времени. Я не уверен, что ваша проблема имеет какое-либо отношение к фрагментации. Позвоните через локальный хост и сделайте захват пакета, чтобы увидеть.   -  person Brad    schedule 18.02.2015
comment
Скопируйте код, как в моем вопросе, заполните request.send 3k (в моем случае при сжатии становится 1,5k) данных и протестируйте его на разной скорости сети в DevTools (250kbps, 750kbps, 30Mbps) и вы увидите этот результат.   -  person Core_dumped    schedule 18.02.2015
comment
Не используйте свои инструменты разработки, это ненадежный метод тестирования на разных скоростях, особенно при таких небольших размерах контента.   -  person Brad    schedule 18.02.2015
comment
Я не думаю, что они ошибаются, так как я могу ощутить те 200 мс, которые требуются для загрузки со скоростью 32 Мбит/с.   -  person Core_dumped    schedule 18.02.2015
comment
Ваше утверждение состоит в том, что это связано с кодировкой передачи. Вот я и оспариваю.   -  person Brad    schedule 18.02.2015
comment
Я сделал дополнительный тест и создал вопрос со всеми результатами, проверьте его: stackoverflow.com/questions/28572141/   -  person Core_dumped    schedule 18.02.2015