複雑な視覚化を作成するためのログ分析スクリプトがあります。
アクティビティオブジェクトの配列(元々は「ログ」と呼ばれます)を想像してください。各オブジェクトは次の形式になっています。
{
name:foo,
activities:[
{time:t, action:a},
{time:t, action:a},
{time:t, action:a},
...
]
}
配列には最大75のアクティビティオブジェクトがあり、それぞれに400〜600のアクションの配列が含まれます(前日の深夜から5分ごとに1つのタイムスロット)。
既知のアクティビティ名(上記のfoo)と、アクティビティ配列にすでに存在する時刻を指定して、関連するアクションを更新する必要があります。
それぞれの名前は一意であり、毎回正確に5分刻みで配列の昇順になります。
グラフが更新されるたびにこれを1000回強行う必要があるため(つまり、更新する値は平均1000回、プロットする値は1000 * 500 * 60ポイント)、パフォーマンスはかなり重要な問題です...
jqでのループは、私が書くことができるものよりもはるかに効率的であるため、現時点では、
n = "foo";
t = new Date(y,mm,d,h,m).toLocaleString() // matches a time stamp in the log
$.grep($.grep(log, function(n, i)
{
return (n.name == n)
}
)[0].activities, function(n, i)
{
return (n.time == t)
}
)[0].action = "bar";
それはうまくいっているように見えますが、それは私にとても時間がかかり、私は自信がないほど多くの議論をしました。
私はより良い方法を逃していますか?