私のノードアプリケーションに2つの大きな配列があります。JavaScriptのフィルタが遅い
var styles = [{itemID:..., styleID:..., styleNum:..., otherFields...}]; // 42455 items
var products = [{productID:..., styleNum:..., otherFields...}]; // 72K items
私は製品をループし、スタイル配列から関連するstyleIDを取得し、新しい項目を新しい配列に追加する必要があります。 styles配列はstyleNumでソートされます。ここで私が試したものです:
var i=0, len = products.length, items = new Array(products.length);
for (i = 0; i < len; i++)
{
var workingItem = products[i];
var styleID = filterStyles(workingItem.styleNum)[0].styleID;
var item = {styleID:..., other fields};
items[i]=item;
}
...
function filterStyles(styleNum)
{
var results = [];
var item;
for (var i = 0, len = createdStyles.length; i < len; i++)
{
item = createdStyles[i];
if (item.styleNum == styleNum) results.push(item);
}
return results;
}
これは私の物の配列から100以上のアイテムを反復するために1秒を要し、非常に遅いです。私はasyc.eachを使って同じことを試みましたが、同じ応答時間を得ました。 フィルタ機能を削除すると、高速に点灯します。フィルタ機能を改善する方法はありますか?
はなぜネイティブ 'Array.prototype.filter'機能を使用しないで行うことができますか? –
@MikeMcCaughanパフォーマンスがどのように役立つでしょうか? –
@MikeMcCaughanネイティブフィルタ機能が遅い。 –