JavaScript で高パフォーマンスのデータ ストレージを実装する

黄舟
リリース: 2017-02-20 14:29:02
オリジナル
1166 人が閲覧しました

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. スコープチェーンの変更

一般的に、実行環境のスコープチェーンは変更されません。

<1>with はスコープ チェーンを一時的に変更できます

width はオブジェクトのすべてのプロパティの変数を作成するために使用されます

function initUI(){
 with(document){
 var bd=body; 
 }
}
ログイン後にコピー



with でコードが実行されると、 実行環境が一時的に変更されました。新しい変数オブジェクトが作成され、パラメータで指定されたオブジェクトのすべてのプロパティが含まれます。 このオブジェクトはスコープ チェーンの 最初の位置 にプッシュされるため、この時点ではすべてのローカル変数が 2 番目のスコープ チェーン オブジェクトにあるため、アクセス コストが高くなります。

<2>try-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) をご覧ください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!