現在、私が書いているJavaScriptゲームエンジンで「極端な」最適化を行っています。そして私は数学関数をたくさん使うことに気付きました!私は現在、それらを使用する関数ごとにローカルにキャッシュしています。そこで、以下のコードを使用して、ウィンドウオブジェクトのグローバルレベルでそれらをキャッシュします。JavaScriptの最適化:グローバルに数学関数をキャッシュする
var aMathFunctions = Object.getOwnPropertyNames(Math);
for (var i in aMathFunctions)
{
window[aMathFunctions[i]] = Math[aMathFunctions[i]];
}
これに重大な問題や副作用はありますか?ウィンドウ内の既存の関数を上書きすることはできますか?私はメモリフットプリントを劇的に増やしますか?それ以外に何がうまくいかないでしょうか?
編集:以下は私がこれを試してくれるJavaScript最適化について読んだことの抜粋です。
プロパティ深
ネストオブジェクトのドット表記を使用するために 名前空間に最適な方法ですし、あなたのコードを整理します。 Unfutnately、 のパフォーマンスに関しては、これは少し問題になる可能性があります。この種のシナリオで値が にアクセスされるたびに、インタープリターは、その値に到達するためにネストしたオブジェクト をトラバースする必要があります。 の値が深いほど、トラバーサルが増えるほど待ち時間が長くなります。したがって、 名前空間は優れた組織ツールですが、できるだけ浅いものを維持することが、より速いパフォーマンスでは最大の賭けとなります。 YUIライブラリの最新の は、名前空間から入れ子になっている のレイヤ全体を削除するように進化しました。たとえば、YAHOO.util.Animは現在 Y.Animです。
参考:http://www.phpied.com/extreme-javascript-optimization/
あなたのゲームをスピードアップすれば驚くだろう。あなたはパフォーマンスの違いを測定しましたか? – RichieHindle
なぜこれを最初にやっていますか? –
したがって、唯一の違いは、たとえば次のようになります。 'Math.floor'の代わりに' floor'ですか?パフォーマンスの違いがあるかどうかはわかりません。 – pimvdb