Я экспериментирую с различными ответами от простого HTTP-сервера NodeJS. Эффект, который я пытаюсь достичь, - это быстрый визуальный рендеринг веб-страницы. Так как ответ передается в браузер с помощью transfer-encoding: chunked
(правда?) Я думал, что смогу сначала отобразить макет страницы и остальные данные после задержки.Потоковые ответы Http с NodeJS
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {
'Content-Type': 'text/html'
, 'Transfer-Encoding': 'chunked'
});
res.write('<html>\n');
res.write('<body>\n');
res.write('hello ');
res.write('</body>\n');
res.write('</html>\n');
setTimeout(function() {
res.end('world');
},1500);
}).listen(3000, '127.0.0.1');
Дело в том, что кажется, если ответ не отправляется, пока res.end('world')
, если уже записанные данные не достаточно долго, так что, например, res.write(new Array(2000).join('1'))
вместо этого res.write('hello')
, будет делать трюк.
Устанавливает ли Node буферизацию моих записей до тех пор, пока данные не будут достаточно значительными для отправки? Если это так, настраивается ли размер блока?
Выходной сигнал .write() является «истинным» оба раза. Этот связанный с вами вопрос связан с тем, что это специфическая платформа, любая идея относительно того, что это будет означать? Контроллер хрома выводит только завершенное время отклика, то же самое для обоих случаев. Данные также отображаются перед чтением закрывающих тегов, это то же поведение при использовании только обычного текста. – Daniel
Это конкретный браузер. Попробуйте в разных браузерах. Кроме того, на вкладке сети инспектора хрома вы должны увидеть, что данные в реальном времени обновляются, если вы перезагрузите страницу и щелкните первый элемент под вкладкой сети. Убедитесь, что вы выбрали вкладку предварительного просмотра на правой панели - вот что я говорю: http://imgur.com/8CJD1 – Straseus
Да, похоже, что браузер поддерживает буферизацию ответа. Я попробовал запустить запрос с завитком, и это вызвало ожидаемое поведение (хотя завиток, казалось, был буферным, если в ответе отсутствовали строки-окончания '\ n') – Daniel