メインコンテンツへ移動

効率的なJavaScriptのコーディング

無料2015-11-27#JS#JavaScript性能优化#js优化原则#js编码技巧

いくつかのコーディング習慣によってコードの実行速度を向上させることができます。本記事では、あまり一般的ではない最適化の原則をいくつか補足します。

1. 最速の条件判定

if文の適用シーン

  • 2つ以内の離散的な値の判定が必要な場合

  • 大量の値を異なる範囲(レンジ)に容易に分割できる場合

switch文の適用シーン

  • 2つを超え10個未満の離散的な値の判定が必要な場合

  • 条件値が非線形であり、範囲を分離できない場合

配列によるルックアップの適用シーン

  • 10個を超える値の判定が必要な場合

  • 条件に対応する結果が、一連の操作ではなく単一の値である場合

2. 文字列操作

文字列の結合

モダンブラウザはすでに文字列の最適化を行っています。文字列が短く(20文字未満)、かつ数が少ない(1000個未満)場合、すべてのブラウザで + 演算子を使用して1ms以内に完了できます。

そのため、push + join を使って文字列結合を最適化する必要はもはやありません。ほとんどのシーンでは、直接 + を使うのが適切です。

文字列のトリミング

ES5ではネイティブの trim が提供されています。環境にない場合は、以下の最も高速な trim 実装を使用できます:

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;
}

あるいは、高速ではありませんが、よりシンプルなバージョン:

function trim(text) {
    return text.replace(/^\s+/, '').replace(/\s+$/, '');
}

3. データアクセス

効率を確保するための原則は以下の通りです:

  • 頻繁にアクセスする必要がある値をローカル変数にキャッシュする

    例えば arr.lengthDOMNode List など。

  • スコアチェーンを短くする

    with 以外にも、try-catchcatch もスコープチェーンを長くします(スコープチェーンの先頭に例外オブジェクトを含むオブジェクトが追加されます)。そのため、パフォーマンスへの影響を抑えるために、catch ブロック内にはあまり多くのコードを含めないようにしてください。

参考文献

  • 『ハイパフォーマンスWebサイト ―高速サイト構築のための進階ガイド』(原題: Even Faster Web Sites)

コメント

コメントはまだありません

コメントを書く