大規模CSVファイルの変換:パフォーマンスのヒント

ブラウザで大規模なCSVからJSONへの変換を効率的に処理する方法。ストリーミングパーサー、チャンク処理、メモリ管理、Web Worker戦略を解説。

Performance

詳細な説明

大規模CSVファイルのパフォーマンス

CSVファイルが数メガバイトを超えると、単純な解析戦略ではブラウザタブがフリーズしたり、メモリ枯渇でクラッシュしたりする可能性があります。

サイズのしきい値

ファイルサイズ 戦略 備考
< 1 MB 一括処理 特別な処理不要
1-10 MB チャンク処理 バッチに分割し、チャンク間でUIに制御を返す
10-100 MB ストリーミング + Web Worker ワーカースレッドで解析、結果をストリーム
> 100 MB サーバーサイドまたは専用ツール ブラウザでは不適切な場合がある

チャンク処理

ファイル全体を一度に解析する代わりに、1,000-5,000行のチャンクで処理し、チャンク間でブラウザに制御を返します:

async function parseChunked(csv, chunkSize = 2000) {
  const lines = csv.split("\n");
  const headers = lines[0].split(",");
  const results = [];
  for (let i = 1; i < lines.length; i += chunkSize) {
    const chunk = lines.slice(i, i + chunkSize);
    // チャンクを処理
    await new Promise(resolve => setTimeout(resolve, 0));
  }
  return results;
}

Web Workerアプローチ

10 MBを超えるファイルの場合、メインスレッドの応答性を維持するために解析をWeb Workerに移動します。

メモリ最適化

  • 生のCSV文字列と解析済みJSONを同時に保存するのを避ける
  • ストリーミング出力を使用する(JSON Lines形式)
  • プレビュー行を制限する(UIでは最初の100行のみ表示)

ユースケース

アナリストが数百万行のCSVログファイルをブラウザに直接アップロードし、ページのフリーズなしに即座のフィードバックを必要とするデータ分析ダッシュボードを構築する場合に使用します。

試してみる — CSV ↔ JSON Converter

フルツールを開く