ホームページ > 記事 > ウェブフロントエンド > JavaScript で高パフォーマンスのデータ ストレージを実装する
1. JavaScript には、リテラル、ローカル変数、配列要素、オブジェクト メンバーという 4 つの基本的なデータ アクセス場所があります。
一般的に言えば: [リテラル、ローカル変数] 実行速度 > [配列、オブジェクト メンバー]
2. 内部プロパティには、関数が作成されるスコープ内のオブジェクトのコレクションが含まれます。このセットはスコープ チェーンと呼ばれます。
3. 関数を実行します - > 実行環境の作成 - > アクティブなオブジェクト (つまり、関数ランタイム変数オブジェクト) を作成します。
そのため、同じ関数を複数回呼び出すと、複数の実行環境が作成されることになります。
4. 関数実行プロセス
変数が見つかるたびに、データを取得または保存する識別子解決プロセスが実行されます。このプロセスは、実行環境のスコープ チェーンを検索します。パフォーマンスに影響を与えるのはこの検索プロセスです。
5. 識別子解決のパフォーマンス
グローバル変数は常に実行環境スコープの末尾に存在します。ローカル変数が最初に解決されます。
経験則: 関数内でクロススコープ値が複数回参照される場合は、それをローカル変数に保存します。
例:
function initUI(){ var bd=document.body; //后面有多次doucument这个全局对象的调用 } //->优化后 function initUI(){ var doc=document; bd=doc.body; //把doucument这个全局对象的引用存储到局部变量doc中 }
6. スコープチェーンの変更
一般的に、実行環境のスコープチェーンは変更されません。
1bad7d6cfeb23be489e797f09e4e93a7try-catch
try ステートメントでエラーが発生すると、実行プロセスは自動的に catch にジャンプします。 次に、例外オブジェクトを変数オブジェクトにプッシュし、スコープの先頭に置きます。
注: catch サブステートメントが実行されると、スコープ チェーンは前の状態に戻ります。
7. クロージャーによって引き起こされるパフォーマンスの問題
クロージャーは JavaScript の最も強力な機能の 1 つです。
クロージャには、環境のスコープチェーンを実行する同じオブジェクトへの参照が含まれているため、関数のアクティブなオブジェクトは破棄されず、メモリオーバーヘッドが増加します。
パフォーマンスに関する懸念点: クロススコープ識別子が頻繁にアクセスされる場合、アクセスのたびにパフォーマンスが低下します。
Start:19:41:45 2015-11-21 Aaron より引用:/content/3493261.html
8. メモリ リーク
メモリ リークとは、割り当てられたメモリの一部が使用できないこと、または使用できないことを意味します。 used ブラウザのプロセスが終了するまでリサイクルします。 C++ では、メモリが手動で管理されるため、メモリ リークがよく発生します。現在、C# や Java などの人気のある言語は、自動ガベージ コレクション方式を使用してメモリを管理しており、通常の使用ではメモリ リークはほとんど発生しません。ブラウザも自動ガベージ コレクションを使用してメモリを管理しますが、ブラウザのガベージ コレクション方法のバグにより、メモリ リークが発生する可能性があります。
メモリリークのいくつかの状況
循環参照
Javascript クロージャ
DOM 挿入順序
DOM オブジェクトは Javascript オブジェクトによって参照され、同時に同じまたは別の Javascript オブジェクト、つまりこの DOM を参照しますオブジェクトはメモリ リークを引き起こす可能性があります。この DOM オブジェクトへの参照は、スクリプトの停止時にガベージ コレクターによって再利用されません。参照サイクルを中断するには、DOM 要素を参照するオブジェクト、または DOM オブジェクトへの参照に null を割り当てる必要があります。
詳細については詳しく説明します。概要は次のとおりです
JS でのメモリ リーク、要素が DOM から削除されるのも不思議ではありませんが、DOM オブジェクトを参照する変数またはオブジェクトがまだ存在します。その後、メモリから削除することはできません。これにより、ブラウザのメモリ使用量が高くなります。このメモリ使用量は、ブラウザが更新されると自動的に解放されます。
もう 1 つの状況は、DOM オブジェクトと JS オブジェクトが相互参照することです。これにより、リフレッシュしてもメモリが減りません。これは厳密な意味でのメモリ リークです。
上記は、JavaScript での高性能データストレージの実現に関する内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。