3

Javascriptの主要な実装によると、変数と関数のルックアップはその場で始まり、グローバルオブジェクトまで上向きにトラバースします。

ここで、より大きなOOPベースのフレームワークを構築していて、あちこちで安全性チェックを呼び出す必要があるとしましょう。そのように呼び出すのは正しくないようです: "xapp.utils.isValidString(var)。同じことが定数にも当てはまります。 、通常どこでも発生する列挙とフラグ。

これが答えに影響を与えるかどうかはよくわかりませんが、私たちはすべてDojoで行っており、そのlang.mixinメソッドについてはかなり認識しています。

ただし、コンストラクターまたはプロトタイプを使用して、明白で最小限の関数とオブジェクトのセットをターゲットオブジェクトのローカルスコープにミックスインするという考え方です。これは合法的な方法だと思いますか?

それでは、それらの準備されたオブジェクトをキャッシュして再利用するのはどうですか?どの種類のバッファを選択しますか?私には、それはリングバッファのように見えます。

私はまだJSの最適化を学んでおり、あなたの考えに満足しています!

参考までに、教祖によって説明されたスコープ管理に関するいくつかの一般的なヒント:http: //googlecode.blogspot.com.es/2009/06/nicholas-c-zakas-speed-up-your.html

更新:IEを完全に除外して、最新のデスクトップおよびモバイルブラウザーのみに焦点を当てる必要があります。また、Dojoのビルドチェーンに精通しており、プラットフォームごとに条件付きコンパイルが可能です(それが重要な場合)。

4

1 に答える 1

0

識別子の解決、つまり直接参照については、厳密な言語(まだ行っていない場合)、別名「厳密なモード」に切り替えることをお勧めします。厳密な言語は静的スコープであるため、JSエンジンは識別子を静的にバインドできます。これにより、プログラム実行中のパフォーマンスが向上します(識別子はコンパイル中に既にバインドされています)。


プロパティルックアップに関しては、長いチェーンがある場合、例えば

foo.bar.baz.method1();
foo.bar.baz.method2();

通常の解決策(パフォーマンスだけでなく、コードの繰り返しを避けるため)は、右端のオブジェクトをローカル変数に格納することです。

var baz = foo.bar.baz;

baz.method1();
baz.method2();
于 2012-10-18T18:53:47.570 に答える