0

Javascript でコーディングするときにメモリ リークが発生する可能性はありますか? もしそうなら、これはV8やIEのチャクラなどのJavascriptレンダリングエンジンに依存しています

大きなループ構成を反復処理すると、パフォーマンスが非常に低下するようです。

使用していない変数を「削除」する必要がありますか?

var myVar = 'very very long string';
delete myVar;
4

1 に答える 1

0

あなたが示した例myVarでは、グローバルスコープにない限り、関数の最後で単にガベージコレクションされます。

一般に、JavaScript ではメモリについて心配する必要はありません。メモリについて心配する必要があるのは、意図せずにオブジェクトへの参照を作成して忘れてしまった場合です。例えば:

function buttonClick() {
    var clicked = false;
    document.body.addEventListener('click', function(event) {
        if (clicked) return;
        if (event.target.nodeName !== 'button') return;
        clicked = foo();
    }, true);
}

上記のコードは、そもそも (イベント リスナーをクリーンアップしていない) 不適切なコードですが、JavaScript での「メモリ リーク」の例を示しています。が呼び出されると、関数を のイベントにbuttonClick()バインドします。がリスナーのバインドを解除するために呼び出されることはないため、関数によって使用されるメモリが再利用されることはありません。つまり、 が呼び出されるたびに、少しのメモリが「リーク」します。click<body>removeEventListenerbuttonClick()

ただし、その場合でも、リークされるメモリの量は非常に少なく、ほとんどのユース ケースで問題になることはありません。問題になる可能性が高いのは、コードがより頻繁に実行される可能性があり、プロセスがより長く存続するサーバーサイド JavaScript です。

于 2014-10-25T21:52:01.357 に答える