В Узел веб-сервер, я хочу, чтобы очистить содержимое HTML в определенных точках следующим образом:Как очистить куски произвольных размеров в NodeJS
- первый кусок:
<html><head> ... </head>
- второй порции:
<body> ... </body>
- третьего кусок:
</html>
например:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<html><head> ... </head>');
setTimeout(function() {
res.write('<body> ... </body>');
setTimeout(function() {
res.end('</html>');
}, 2000);
}, 2000);
}).listen(8000);
Код выше отвечает <html><head> ... </head><body> ... </body></html>
после ~ 4s в один блок, однако я заметил, куски должны быть> = 4096bytes для того, чтобы промыть немедленно:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(Array(4097).join('*'));
setTimeout(function() {
res.write(Array(4097).join('#'));
setTimeout(function() {
res.end('done!');
}, 2000);
}, 2000);
}).listen(8000);
Отклик из кода выше, также занимает ~ 4s, но куски немедленно смываются. Я мог бы накладывать небольшие куски, чтобы заполнить как минимум 4096 байт, просто интересно, есть ли другой «не-хакерский» способ.
В PHP это может быть достигнуто за счет flush()
/ob_flush()
и отключение output_buffering
FWIW, я строю инструмент веб-сервер для эксперимента несколько конфигураций выхода куска HTML с заданной задержкой между ними для того, чтобы проанализировать, как современные браузеры обрабатывают его и выбирают оптимальную конфигурацию.
Благодаря
Спасибо! Похоже, что завиток по умолчанию забивает куски размером не менее 4 тыс., С другой стороны, для Chrome требуется, чтобы 1-й кусок был как минимум 1к, тогда предстоящие куски могут быть меньше этого. – marcelduran