2010-12-30 19 views
1

私はJavaScriptでゲームを書いています(ウェブゲームではなく、JavaScriptをスクリプト言語として使用するゲームエンジンを使用しています)。残念ながら、ゲームエンジンのJavaScriptエンジンはSpiderMonkeyの古典版です。私のゲームは少し遅れています。それはそれほど遅くはありませんが、私は少しの最適化をすることにしました。JavaScriptの最適化

私はいくつかの基本的な最適化を知っていますが、グローバルではなくローカル変数を使用しています(とにかく良いアイデアです)。後置インクリメント/デクリメントの代わりにプレフィックスを使用し、ループの代わりにカウントダウンします。 ?

+4

ループカウンターのようなマイクロオプティマイゼーションで何かをやめ始める前に、あなたのコードをプロファイル、プロファイル、プロファイル、プロファイル、プロファイリングしてください。 – Pointy

+0

最近、JSエンジンは激怒しているので、ゲームでもっと新しいエンジンを使用した場合、パフォーマンスの問題が解決される可能性があります。それは本当に質問から外れていますか? –

+0

悲しいことに、はい、新しいJSエンジンを使用することは問題になりません。それは複雑ですが、私はエンジンが書かれているものであるC++を吸っています.SpiderMonkeyのバージョンは古く、新しいバージョンとの間でAPIの変更が行われているため、 DLLを置き換え、代わりにソースを編集する必要があります。 –

答えて

1

私はあなたのコードが構成されている方法を知っているが、のは、それの一部が頻繁に介して実行され、機能やループ内に存在すると言うことはできません。

  • 可能
? :if()を置き換えます

if (expr) a = 1; 
else a = 2; 

  • 可能な場合はsubstr()を使用する場合

    a = expr ? 1 : 2; 
    
      は、 switch()に1が埋め込まれたブラウザI上(高速です substring()または slice()チェックを if() Sシリーズを回し
    • なり、一度要因3の違いが気付いたのは です)。しかし、それらのパラメータに注目してください!
    • 回避値の再計算やそれだけだとしても、再び同じパラメータで同じ関数を呼び出すマイナー1
    • あなたは何度も何度も、配列の同じ要素にアクセスする場合は、ローカル変数に格納し
    • eval()は非常に遅いです(悪いということ以外に)
    • JavaScriptエンジンはシングルスレッドであることに注意してください。並行して実行されるものではなく、タイマーや間隔のものでもありません。

    コードが読みにくい場合は、コメントを書き込みます。

  • 2

    ソースコードを台無しにするのではなく、Closure Compilerに試しましたか?これは、いくつかの最適化を行うjavascriptからjavascriptへのコンパイラです。主にサイズ用ですが、結果として得られるjsも頻繁に高速に実行されます。しかし、最適化がV8固有であるかどうかは考えられません。

    +0

    私はそれを試してみましょう、ありがとう。 –