2016-04-15 9 views
1

7列と300k行以上のExcelファイルを解析しています。Javascriptオブジェクトの作成 - 多数のオブジェクトの作成

オブジェクト(Nodejs側)を作成し、データベースに一括挿入する必要があります。

私は、この目的のために大量のオブジェクトを作成する最良の方法が何であるか疑問に思っています。

私は3つのアプローチが出ている、とない1は、速度とメモリの面で巣をされるであろうことを確認:

まず:

var bulkObjects = []; 
worksheet.eachRow({includeEmpty: true}, function (row, rowNumber) { 
    var currentObject = createRowObject(row.values);  
    bulkObjects.push(currentObject); 
}); 

function createRowObject(row) {  

    return { 
     Row1: row[1], 
     Row2: row[2], 
     Row3: row[3], 
     Row4: row[4], 
     Row5: row[5], 
     Row6: row[6] 
    } 
} 

第二:

var bulkObjects = []; 
worksheet.eachRow({includeEmpty: true}, function (row, rowNumber) { 
    var currentObject = **new** createRowObject(row.values);  
    bulkObjects.push(currentObject); 
}); 

function createRowObject(row) { 

    this.Row1: row[1], 
    this.Row2: row[2], 
    this.Row3: row[3], 
    this.Row4: row[4], 
    this.Row5: row[5], 
    this.Row6: row[6]  
} 

第3:

var bulkObjects = []; 
worksheet.eachRow({includeEmpty: true}, function (row, rowNumber) { 
    var currentObject = createRowObject(row.values); 
    bulkObjects.push(currentObject); 
}); 

function createRowObject(row) { 

    var o = new Object(); 
    o["Row1"] = row[1]; 
    o["Row2"] = row[2]; 
    o["Row3"] = row[3]; 
    o["Row4"] = row[4]; 
    o["Row5"] = row[5]; 
    o["Row6"] = row[6]; 

    return o; 
} 

多量のオブジェクトを作成するのに最適なものはどれか。もう一つのアプローチはありますか?

+0

を試してみてください? –

+0

[JavaScriptでオブジェクトを作成するにはどの方法が最適ですか?オブジェクトの変数の前に "var"が必要ですか?](http://stackoverflow.com/questions/6843951/whichway-is-best-for-creating-an-object-in-javascript-is-var-necessary- befor) –

+1

メモリが問題になる場合は、バルクオブジェクトのバッチを複数回挿入するのではなく、一度に複数回挿入するのが最善の方法です。すでに挿入されているすべてのオブジェクトをガベージコレクションできます。オブジェクトの作成に関しては、オブジェクトにメソッドがないため、3つのアプローチのすべてが同じスピードでなければならないので、より単純なもの、最初のものに進みます。関数呼び出しを削除し、オブジェクトを直接押すだけで簡単にすることもできます。 – Shilly

答えて

1

サーバー側でノードjsを使用している場合は、高速かつエラーのないオブジェクト変換のためにLoadashライブラリを試すことをお勧めします。

は、あなたがテストを設定し、プロファイリングJavaScriptのパフォーマンスをチェックしませんなぜこの

var objectMappingHeaders = ['Row1','Row2','Row3','Row4','Row5','Row6','Row7']; 
var data = [[1,2,3,4,5,6,7],['a','b','c','d','e','f','g']]; 

var output = _.reduce(data, function(result, val) { 
    result.push(_.zipObject(objectMappingHeaders, val)); 
    return result; 
}, []) 
関連する問題