Firefox (13.0.1) 内での JavaScript の奇妙な動作により、パフォーマンスの問題が発生しています。最新の Chrome は同じ動作を示します。
以下のコード スニペットのような JavaScript コードを実行すると、結果がかなり遅くなります。ただし、「j」を介して外側のループのコンテンツを単純にインライン化すると、約 10 倍のスピードアップが得られます。私のサンプル アプリケーションでは、'm' は 2 に等しいので、'j=0' と 'j=1' の固定値をそれぞれ 2 回書いているだけです。もちろん、'm は必要ありません。 ' ハードコーディングする必要があるため、実際のループを使用すると、この速度低下の正確な原因は何ですか?
誰かアイデアがありますか?
Web ワーカー内でコードを実行しています。奇妙なことに、ワーカーのコンテキストではなく、メインの JavaScript コンテキストで同じものを実行すると、インライン化のプラスの効果は発生しません。それにもかかわらず、'j' の 1 つの値に対してのみループ コンテンツを実行すると、すべてのケースで大幅な高速化に役立ちます。これもメモリ管理と関係がありますか?
よろしくお願いします!
//m: very small, 1-2
for (j = 0; j < m; ++j) {
var attrib = attributes[j];
//n: very large, ~3*10^6 elements
for (i = 0; i < n; ++i) {
var data = largeBuffer[i];
//nc: very small, 2-3
for (c = 0; c < nc; ++c) {
var component;
//compute 'component
//..
attrib.typedArray[baseIdx + c] |= component;
}
baseIdx += nc;
}
}