0

約 100 万行、約 20 列の「大きな」csv 文字列を解析しようとすると、Papa Parse が原因で Chrome と Opera がクラッシュするようです (Windows 7)。同じページが Firefox で正常に読み込まれる場所。大きな csv 文字列を定義し、papaparse.js ライブラリに <script> タグを含めると、Parse を呼び出す前でも Chrome と Opera がクラッシュします。papaparse.js の <script> タグを含めない場合、大きな csv 文字列を作成するのに問題はありませんが、それらを解析できません。私の実際の使用例では、大きな csv 文字列を JavaScript で生成するのではなく、zip アーカイブから取り出しています。ステップ関数またはチャンク関数を使用しても、違いはないようです。ここでテスト ケースを実行できます。 テスト ケース 問題コード。

<!doctype html>
<html>

<script src="http://papaparse.com/resources/js/papaparse.js"></script>

<body>

<script>

 function my_createMockCSV(rows) {
  var my_csv="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v\r\n";
  for (var i=1; i<rows; i++) {
   my_csv+= i+","+ i+","+ i+","+ i+","+ i+","+ i+","+ i+","+ i+","+
            i+","+ i+","+ i+","+ i+","+ i+","+ i+","+ i+","+ i+","+
            i+","+ i+","+ i+","+ i+","+ i+","+ i+","+"\r\n";
   }
 return my_csv;
 }


function parseCSV(csv) {

 var rowcount=0;

 Papa.parse(csv, 
               {
               delimiter: ',', 
               worker: false,
               encoding: 'default',
               header: true, 
              chunk: function(results) {
                 rowcount+= results.data.length;
                console.log("Parsed rows: "+rowcount);
               },
             complete: function (results) { 
                 console.log("Complete - parsed: "+rowcount+" rows");
               }
            });

 }

function run_testcase() {
 rows=document.getElementById("rows").value;
 //parseCSV(my_createMockCSV(rows));  
 console.log("Begin Generating CSV ...");
 alert("About to generate Mock CSV");
 var my_csv=my_createMockCSV(rows);
 console.log("End Generating CSV ...");
 alert("About to parse Mock CSV");
 parseCSV(my_csv);
}

</script>

Papaparse test case script: Will crash Chrome, Opera<br/>

Rows: <input id="rows" type="number" value="1000000"> (Try around 1mil rows)
<button onclick="run_testcase();">Run</button>

</body>
</html>
4

1 に答える 1

0

Papa Parse が原因でブラウザがクラッシュすることはありません。

Chrome と Opera は、Firefox のように文字列を扱うと効率的ではありません。あなたが行っているようにメモリ内に 100 万行と 20 列の文字列を作成することはできず、ブラウザー タブが安定したままであることを期待します。

への呼び出しをコメントアウトするPapa.Parse()と、私の言いたいことがわかるでしょう。ブラウザはまだクラッシュします。

于 2015-05-12T12:45:24.643 に答える