『高性能JavaScript』学習ノート(一)
1901 ワード
一、ロードと実行
1.スクリプトの位置 -- Javascriptはロード後すぐに実行されます.スクリプトの実行が終わってからページがレンダリングされます.最初から実行するスクリプトではなく、bodyタグの一番後ろに置いてロードすることができます.
2.組織スクリプト -- ページスクリプトのロード数を減らす(a.同じサイズの単一ファイルと複数ファイルの場合、単一ファイルのロードがより速い;b.HTTP要求数を減らすことができる).ページに埋め込まれたスクリプトの数を減らします.彼らもページのレンダリング速度に影響を与えます.
3.ブロックなしのスクリプト -- ページのレンダリングが完了したら、スクリプトのロードができます.(a.defer;b.ダイナミックscriptタグを使用します.c.XHRスクリプト注入)
二、データアクセス
1.管理スコープ -- オブジェクト呼び出し方法を使用する場合、例えば、getNum().JavascriptはgetNumの方法で唯一無二の「運行期間文脈」を作成します.
「実行中のコンテキスト」は、ロールドメインチェーンを含み、ロールドメインチェーンの第1順位は、「アクティブオブジェクト」として、メソッドに含まれるオブジェクトを保存するために使用され、後続の順位は、全ローカルに至るまで、レベル別のロールドメインオブジェクトを保存します.
この方法で変数に出会うと、その変数が見つからない場合はundefinedに戻ります.
二つの変数名が同じである場合、最初に見つけた変数は二つ目を覆います.
したがって、局所宣言の変数は、その作用範囲外の変数をカバーすることができる.
同時に、トップクラスのオブジェクトを呼び出し続けると、Windowsなど、効率が低下します.良い方法はwindowオブジェクトを一部の変数として保存して使うことです.
with&try-catchは、コンテキスト作用ドメインチェーンを変更することができる.withを使うことを勧めません.複雑になるかもしれません.
クローズドについて:クローズドを実行する際に、親ドメインで参照されたオブジェクトは破棄されませんでした.スコープチェーンを作成するときは、2番目の順位に保存されます.メモリを使わないだけでなく、性能にも影響します.
2.対象メンバー
JavaScriptの継承は原型に基づいており、対象は内部属性_を通じている.プロトその原型に結び付ける.
オブジェクトの例がプロトタイプのメソッドを呼び出すとき、プロトタイプチェーンと同様に、プロトタイプのオブジェクトを検索し、プロトタイプのオブジェクトを見つけて実行します.
hasOwnProperty()は対象に特定の属性があるかどうかを判断する.
inは原型に特定の属性があるかどうかを判断します.
1)入れ子メンバーが一つの方法で呼び出すと、使用するポイントが多くなります.aObj.bObj.cObj.dFnc()のように、効率が悪いのは間違いないです.
なぜなら、エンジンは最初からaObjでbObjを検索し、bObjからcObjを検索し、cObjでdFnc()を見つけて実行するからです.このように層を重ねると、性能の消耗は相当なものである.
dFunnc()がcObjにない場合、エンジンはプロトタイプチェーンを検索する必要があります.it gets more time…
良い解決策は「点鎖」をキャッシュすることです.
var cTmpObj = aObj.bObj.cObj;
cTmpObj.dFunc();
これにより、cObjの繰り返し読み取りにおける方法の性能を向上させることができる.