↗☻【高機能ウェブサイト建設のための階段案内書葃BOOK葃】第7章で効率的なJavaScriptを作成します.

39039 ワード

JavaScriptでは、スコープおよびスコープチェーンをどのように管理するかが重要である.なぜなら、スコープ内で検索する対象の個数が、識別子解析の性能に直接的に影響するからである.識別子は、スコープ内の位置が深いほど、検索およびアクセスに必要な時間が長くなる.役割ドメインの管理が間違っていると、スクリプトの実行時間に悪影響を与えます.
これまでのところ、局所変数はJavaScriptの中で最も速く読み書きできる識別子である.これらは実行関数のアクティブオブジェクトに存在するので、解析識別子は、作用するドメインチェーン内の単一のオブジェクトのみを検索する必要がある.変数値の読み取りの合計時間は、ルックアップされたスコープチェーンの階層ごとの深さとともに増加していくので、識別子が深いほどアクセス速度が遅くなります.このような現象はほとんどすべてのブラウザに存在します.V 8 JavaScriptエンジンに基づくGoogle ChromeとNitro JavaScriptエンジンに基づくSafari 4+例外だけがあります.それらのアクセス速度が速くて、識別子の深さの影響は微々たるものです.
いずれの非局所変数も、関数内での使用が一回を超えると、局所変数としてデータアクセス時に関数に一度以上のオブジェクト属性または配列要素を使用して局所変数として保存するのが良い方法です.
var doc=document;
var count=data.com unt;
valueが9の場合、実行完了時間はvalueが0の時より長いです.条件を周波数順に並べて条件をいくつかの分岐に分割すると判断する必要があるからです.
一つ二つの条件だけを判断する場合、if文はswitch文より速くなります.二つ以上の条件があり、条件が比較的簡単な場合、switch文はより速くなります.これは、多くの場合、switch文で単一条件を実行するのに要する時間がif文より短いため、大量の条件判断がある場合は、switch文を使うのが適切であるからです.
if文を使う場合:二つの内の離散値は、大量の値が異なる区間範囲に容易に分けられると判断する必要があります.
switch文を使う場合は2つを超えて10個未満の離散値を判断するために条件値は非線形であり、区間範囲を分離することができません.
配列クエリを使用する場合、10個以上の値を使用すると、条件に対応すると判断されます.一連の動作ではなく、単一の値です.
ループを展開し、大きな行列を処理します.
最も一般的なペース実行時間が長い理由は、多すぎるDOM相互作用の多すぎるサイクルの再帰性を含む.
タイマーは、ブラウザでJavaScriptコードを実行するための慣用的な方法を分割します.台本を書くには時間がかかりすぎます.
小さな遅延に注意するとブラウザが応答しないこともあります.ミリ秒の遅延は推奨されていません.すべてのブラウザはこのような短い時間で正確にページ表示を更新できないからです.一般的には、50~100ミリ秒の遅延が適切で、ブラウザが必要なページの更新を実行する時間を持つのに十分です.
 
<!doctype html>

<html lang="zh-CN">

<head>

    <meta charset="utf-8" />

    <title></title>

</head>

<body>

    <script>

        var result = (function() {

            switch (6) {

                case 0:

                    return 'result0';

                case 1:

                    return 'result1';

                case 2:

                    return 'result2';

                case 3:

                    return 'result3';

                case 4:

                    return 'result4';

                case 5:

                    return 'result5';

                case 6:

                    return 'result6';

                case 7:

                    return 'result7';

                case 8:

                    return 'result8';

                case 9:

                    return 'result9';

                case 10:

                    return 'result10';

            }

        })();

        console.log(result);

        var results = ['result0', 'result1', 'result2', 'result3', 'result4', 'result5', 'result6', 'result7', 'result8', 'result9', 'result10'];

        result = results[9];

        console.log(result);

        var length = results.length;

        var html = '';

        for (var i = length; i--;) {

            html = results[i] + html;

        }

        console.log(html);

        function process(value) {

            console.log(value);

        }



        for (var i = length; i--;) {

            process(results[length - 1 - i]);

        }



        //     

        var iterations = Math.ceil(length / 8);

        var startAt = length % 8;

        var i = 0;

        do {

            switch (startAt) {

                case 0: process(results[i++]);

                case 7: process(results[i++]);

                case 6: process(results[i++]);

                case 5: process(results[i++]);

                case 4: process(results[i++]);

                case 3: process(results[i++]);

                case 2: process(results[i++]);

                case 1: process(results[i++]);

            }

            startAt = 0;

        } while (--iterations > 0);



        var buffer = [],

            i = 0;

        buffer[i++] = 'Hello';

        buffer[i++] = ' ';

        buffer[i++] = 'World!';

        console.log(buffer.join(''))



        function trim(text) {

            return text.replace(/^\s+|\s+$/g, '');

        }

        function trim(text) {

            return text.replace(/^\s+/, '').replace(/\s+$/, '');

        }

        function trim(text) {

            text = text.replace(/^\s+/, '');

            for (var i = text.length -1; i >=0; i--) {

                if (/\S/.test(text.charAt(i))) {

                    text = text.substring(0, i + 1);

                    break;

                }

            }

            return text;

        }

        window.onload = function() {

            setTimeout(function() {

                console.log(buffer.join(''))

                setTimeout(function() {

                    console.log(buffer.join(''))

                }, 100);

                console.log(buffer.join(''))

            }, 100);

        };



        function chunk(array, process, context) {

            setTimeout(function() {

                var item = array.shift();

                process.call(context, item);

                if (array.length > 0) {

                    setTimeout(arguments.callee, 100);

                }

            }, 100);

        }

        var names = ['Nicholas', 'Steve', 'Doug', 'Bill', 'Ben', 'Dion'],

            todo = names.concat();

        chunk(todo, function(item) {

            console.log(item);

        });



        function sort(array, onComplete) {

            var pos = 0;

            (function() {

                var j, value;

                for (j = array.length; j > pos; j--) {

                    if (array[j] < array[j - 1]) {

                        value = array[j];

                        array[j] = array[j - 1];

                        array[j - 1] = value;

                    }

                }

                pos++;

                if (pos < array.length) {

                    setTimeout(arguments.callee, 100);

                } else {

                    onComplete();

                    console.log(array);

                }

            })();

        }

        sort([2,1,5,3,9,7], function() {

            console.log('Done!');

        });

    </script>

</body>

</html>