7

単純なNodeJSHTTPサーバーからのさまざまな応答を試しています。私が達成しようとしている効果は、Webページのより高速な視覚的レンダリングです。応答はtransfer-encoding: chunked(右?)でブラウザにストリーミングされるので、最初にページレイアウトをレンダリングし、遅延後に残りのデータをレンダリングできると考えていました。

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')、トリックを実行することです。

データが送信されるのに十分なサイズになるまで、ノードは書き込みをバッファリングしていますか?その場合、チャンクサイズは構成可能ですか?

4

1 に答える 1

3

終了タグが読み取られるまで、ブラウザがデータをレンダリングしていない可能性があります。これをテストするには、htmlタグの代わりにプレーンテキストを出力してみてください。

Firebug / chrome inspectorに入力が入ってくるのを見ますか?

関連する質問

http://nodejs.org/api/stream.html#stream_stream_write_string_encoding_fd

指定されたエンコーディングで文字列をストリームに書き込みます。文字列がカーネルバッファにフラッシュされている場合はtrueを返します。falseを返し、カーネルバッファがいっぱいであり、データが将来送信されることを示します。

したがって、.write()メソッドの結果を出力します。trueまたはfalseを返すかどうかを確認します。

于 2012-03-17T17:07:26.283 に答える