大規模な CSV 応答を作成する Perl モジュールのセクションで作業しています。サーバーは Plack で実行されますが、これについては私は専門家ではありません。
現在、私は次のようなものを使用して応答を送信しています:
$res->content_type('text/csv');
my $body = '';
query_data (
parameters => \%query_parameters,
callback => sub {
my $row_object = shift;
$body .= $row_object->to_csv;
},
);
$res->body($body);
return $res->finalize;
ただし、そのquery_data
関数は高速ではなく、多くのレコードを取得します。そこでは、各行を連結し$body
、すべての行が処理された後、応答全体を送信しています。
私がこれを好まない理由は 2 つあります。1 つ目は、$body
が破棄されるまで大量の RAM を消費することです。第 2 に、そのメソッドが動作を終了し、実際に$res->body($body)
.
必要なものを見つけずに、ドキュメントでこれに対する答えを見つけようとしました。
また$res->body($row_object->to_csv)
、コールバック セクションを呼び出してみましたが、最後に行った呼び出しのみを送信し$res->body
、以前の呼び出しをすべて上書きしてしまうようです。
各行のコンテンツをフラッシュするPlack応答を送信する方法はありますか?そのため、ユーザーはデータが収集されるとリアルタイムでコンテンツを受信し始め、最初にすべてのデータを蓄積する必要はありませんか?
コメントをお寄せいただきありがとうございます。