メモ[4~6]

4435 ワード

四:アルゴリズムとフロー制御
を選択します.
for
whileと
do-whileはサイクル性能が似ていますので、他のタイプより明らかに速いサイクルはありません.
-使用を避ける
for-i-nサイクルは、属性の数が未知のオブジェクトを遍歴する必要がない限り(プロトタイプチェーンを循環するので、不必要な性能損失が発生します.)
-循環性能を改善するための最良の方法は、反復毎の演算量を低減し、循環反復回数を低減することである.
-通常は、
switchはいつも比べます
if-elseは速いが、いつも一番いい解決策ではない.
-判断条件が多く、キーと値の間に論理マップがある場合は、テスターを探します.
switchと
if-elseの方が速いです.キーと値が離散している場合、
switchと
if-elseの方が適用されます
-ブラウザの呼び出しスタックサイズは、再帰的アルゴリズムのJavaScriptでのアプリケーションを制限しています.スタックオーバーフローエラーは他のコードの運転を中断します.
-スタックオーバーフローのエラーが発生した場合、方法を反復アルゴリズムに変えたり、Memoizationを使って反復計算を回避したりできます.
循環体を使って配列を遍歴する時、まず配列の長さを局所変数に保存して、複数回操作する性能損失を覚えてください.
まだ合格できます
配列の順序を逆にして循環性能を向上させる.
for (var i = array.length; i--; ) {

//   

}
このように循環の必要な操作を減らすことができます.
 + 制御条件の比較(
i==true)
 + 減算操作(
i--)
避けました
forループで数値の大きさを判断する操作です.
条件語句について
if-elseと
switchの性能の違い.
ほとんどの場合
switch比
if-elseは速く運行していますが、判断の条件が大きい時だけ明らかな差があります.
これは主に多くの言語が正しいからです.
switch文の実現は全部brancch tableを採用して最適化を実現します.
JavaScriptは特別なところがあります.使うからです.
switchの場合、すべての判断はすべてオペレータ(===)を通じて行われます.このようにタイプ変換のロスは避けられます.直接に等号(=)で判断することに慣れていますが、JavaScriptでは違いがあります.判断する前にタイプ変換を行います.
だから: 
123 == "123"; //true

 
五:文字列と正規表現
-リンク数が大きい、またはサイズが大きい文字列の場合、配列項目リンクは唯一IE 7およびより早いバージョンで性能的に合理的な方法である.
-IE 7およびより早いバージョンの性能を考慮する必要がない場合は、配列項目リンクは最も遅い文字列リンク方法の一つであり、単純な+と+=操作子の代替を推奨し、不要な中間文字列を避ける.
-トレースは、正規表現のマッチング機能の基本構成部分であり、正規表現の非効率の源でもある.
-遡及暴走は、正規表現に素早くマッチするはずの場所で発生しましたが、特定の特殊な文字列マッチング動作により、ブラウザがクラッシュしても動作が遅くなります.この問題を避ける方法は、隣接する文字要素を相互に反発させ、ネストされた量詞が同じ文字列の同じ部分に何度もマッチすることを避け、複製利用して前に見た原子グループを利用して不要なトレースを除去することです.
-正規表現の効率を向上させる様々な技術的手段は、正規表現のより速く一致し、非整合位置でより少ない時間を費やすことに役立つ.
-正規表現は常に作業を完了するための最適なツールではなく、特に文字列だけを検索する場合.
-文字列の最初の空白を取り除く多くの方法がありますが、2つの簡単な正規表現(頭の空白を処理し、もう一つの処理の最後の空白)で大量の文字列の内容を処理すると、簡単でブラウザをまたぐ方法が提供されます.文字列の末尾から最初の空白文字でない文字を循環的に検索するか、または正規表現と結合します.より良い解決方法が提供されます.文字列の長さに影響されることは少ないです.
IE以外に、他のブラウザには以下のような状況があります.
str = str + "one";  //        "one"    str .

str = "one" + str;  //      str      "one"  .
strが大きいと、コピープロセスがメモリを占有する場合が多いです.
また、
str = str + "one" + "two" 
比較 
str += "one" + "two" 
より優れている.
後者は一時的な文字列を生成して「onetwo」を保存します.後者は直接に後の文字列をstrに追加します.
正規表現の部分については、システムの勉強をしたことがないので、混乱しているように見えます.
ネットで調べたら、多くの人が正則のこの部分の翻訳が下手だと批判しました.
六:クイックレスポンスのユーザーインターフェース
JavaScriptを実行し、ユーザーインターフェースを更新するためのプロセスを共有することを一般に「Java Script」といいます.
The Browser UI Thread.
ブラウザUIスレッドは簡単な列システムであるため、作業時間がかかりすぎると、ページに「仮死」の状態が発生する.
したがって、ブラウザはこの場合によって、それぞれの処理方法があります.
コールスタックのサイズ制限と
スクリプト制限を長時間実行します.
+IEは第4版から、デフォルトでは500万語の文を制限します.
+Firefoxはデフォルトで10秒に制限されます.
+Safariはデフォルトで5秒に制限されます.
+Chromeには単独のロングランスクリプト制限がありません.代替方法は、一般的な崩壊監視システムに依存してこのような問題を処理します.
+Operaにはスクリプトの制限がありません.最後までコードを実行します.
長い間実行されているスクリプトは避けるべきです.単一JavaScript操作にかかる総時間
100ミリ秒を超えるべきではない.
インタフェースが100ミリ秒以内にユーザーの入力に応答すると、ユーザーは自分が「直接操作インターフェース内のオブジェクト」と考えるからである.
100ミリ秒を超えると、ユーザーは自分とインターフェースの関係がなくなると感じることを意味します.
実は全章の本はどのように単一のJavaScriptを100ミリ秒以内にコントロールするかをめぐっています.タイマー処理はとてもいい方法です.
function timedProcessArray(tiems, process, callback) {

	var todo = items.concat(); //     

	setTimeout(function() {

		var start = +newDate(); //      

		do {

			process(todo.shift());

		} while (todo.length > 0 && (+new Date() - start < 50));  //      50    



		if(todo.length > 0) {

			setTimeout(arguments.callee, 25);

		} else {

			callback(items); 

		}

	}, 25);

}
以上は、各操作配列の時間を50ミリ秒以内に制御し、25ミリ秒を「一時停止」させ、UIをリフレッシュさせてから、配列を継続させるタイマーの配列処理方法である.
なぜ25ミリ秒の間隔を設定しますか?
これは、ブラウザとオペレーティングシステムの違いを考慮して、この値は共通の有効値です.遅延の最小値は25ミリ秒を推奨します.
配列毎の実行時間を50ミリ秒に抑えるというのが本書の著者の意味です.しかし、できるだけ100ミリ秒近くに値を設定しないことをお勧めします.ブラウザ間に違いがありますので、ユーザーの体験の一致を保つようにします.
最後にWebワーカーという新しい特性も紹介しましたが、サポートしているブラウザは限られていますので、ここでは紹介しません.
<高性能JavaScript>メモ[1~3]:http://www.cnblogs.com/maplejan/archive/2012/10/20/2731951.html
本論文のリンク:http://www.cnblogs.com/maplejan/archive/2012/10/20/2731995.html