まず、メモリ解放の例を見てみましょう。 <スクリプト言語="JavaScript"> <!-- strTest = "1"; ( var i = 0; i < 25; i ++ ) の場合 { strTest += strTest; } アラート(strTest); strTest を削除します。 ゴミを収集します(); //--> </スクリプト> CollectGarbage は IE の固有のプロパティで、メモリを解放するために使用されます。変数または参照オブジェクトを null に設定するか削除してから解放するために使用します。CollectGarbage を実行する前に、次の 2 つの条件が満たされている必要があります。 - オブジェクトは、それが存在するコンテキスト外では無効になります。 //-------------------------------------------------------- // JavaScript オブジェクトが無効になるのはいつか //-------------------------------------------------------- 関数testObject() { var _obj1 = 新しいオブジェクト(); } 関数testObject2() { var _obj2 = 新しいオブジェクト(); _obj2 を返します。 } // 例1 テストオブジェクト(); // 例 2 テストオブジェクト2() // 例3 var obj3 = testObject2(); obj3 = null; // 例4 var obj4 = testObject2(); var arr = [obj4]; obj3 = null; arrr = []; 次の 4 つの例では、 - 「例1」では関数testObject()内で_obj1を構築しますが、関数が終了すると、 - 「例 2」では、オブジェクト _obj2 も構築され、testObject2() に渡されるため、オブジェクトには「関数の外部」のコンテキスト環境 (およびライフ サイクル) があります。ただし、関数の戻り値は他の変数によって「保持」されないため、_obj2 はすぐに無効になります。 - 「例 3」では、testObject2() によって構築された _obj2 が外部変数 obj3 によって使用されます。 - 例 3 と同じ理由で、例 4 の _obj2 は "arr = []" の行以降は無効になります。 ただし、オブジェクトの「無効化」は、それが「解放」されることを意味するものではありません。 JavaScript ランタイム内では、オブジェクトがいつ解放されるかをユーザーに正確に伝える方法はありません。これはJavaScriptに依存しています 前述の Excel 操作サンプル コードでは、オブジェクトの所有者、つまりプロセス「EXCEL.EXE」は、「ActiveX オブジェクト インスタンスが解放された」後にのみ実行できます。ファイル ロックとオペレーティング システムのアクセス許可資格情報は、プロセスに関連しています。したがって、オブジェクトが「解放」されるのではなく「無効化」されるだけの場合、 ——これは JavaScript または COM メカニズムのバグだと言う人もいます。実は違います。これは OS と IE です。 Microsoft は、この問題を解決するための戦略として、メモリのリサイクル プロセスを積極的に呼び出すことを公開しました。 (Microsoft の) JScript では、CollectGarbage() プロシージャ (通常は GC プロシージャと呼ばれます) が提供されています。 上記の例で GC プロセスを呼び出すコードは次のとおりです。 //-------------------------------------------------------- // ActiveX オブジェクトを処理する場合、GC プロセスの標準呼び出し方法 //---------------------------------------------------------------------- 関数writeXLS() { //(わずかに...) excel.Quit(); エクセル = null; タイムアウトを設定します(ガベージ収集、1); } コードの最初の行は excel.Quit() メソッドを呼び出して、Excel プロセスを終了し、終了します。 2 行目のコードでは、Excel を null にしてオブジェクト参照をクリアし、オブジェクトを「無効」にします。ただし、オブジェクトはまだ関数コンテキスト内にあるため、GC プロセスが直接呼び出されると、オブジェクトはクリーンアップされません。 3 行目のコードでは、setTimeout() を使用して CollectGarbage 関数を呼び出し、時間間隔を '1' に設定して、writeXLS() 関数の実行後にのみ GC プロセスが発生するようにします。このようにして、Excelオブジェクトは「 ActiveX オブジェクトを使用する JS 環境では、GC プロセスの使用が非常に効果的です。潜在的なActiveX 実際、GC プロセスを使用しても、上記の Excel の問題は完全に解決されません。 IE も権限資格情報をキャッシュするためです。ページの資格情報を更新する唯一の方法は、「新しいページに切り替える」ことです。 //-------------------------------------------------------- //ActiveX オブジェクトの処理時に使用するページ切り替えコード//---------------------------------------------------------------------- 関数writeXLS() { //(わずかに...) excel.Quit(); エクセル = null; // 次のコードは、MSDN で提供されているメソッドを使用して Excel を呼び出し、IE のバグを解決するために使用されます。 // SetTimeout(CollectGarbage, 1); // Web ページの信頼された状態はクリア (または同期) できないため、SaveAs() などのメソッドは次回呼び出されたときに無効になります。 場所を再読み込みします。 } 削除演算子についてはマニュアルに記載されています 参考文献 オブジェクトからプロパティを削除するか、配列から要素を削除します。 式を削除 式パラメータは有効な JScript 式であり、通常はプロパティ名または配列要素です。 例示する 式の結果がオブジェクトであり、式で指定された属性が存在し、オブジェクトが削除を許可していない場合は、false が返されます。 それ以外の場合は true を返します。 最後に、GC に関する補足事項: IE ウィンドウが最小化されると、IE は CollectGarbage() 関数を 1 回アクティブに呼び出します。これにより、IE ウィンドウが最小化された後のメモリ使用量が大幅に改善されます。 JavaScript CollectGarbage 関数の詳細なケースに関するこの記事はこれで終わりです。より関連性の高い js CollectGarbage 関数の内容については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Linux システム MySQL8.0.19 クイックインストールと構成チュートリアル図
>>: Linux に MySQL 8.0.19 をインストールするための詳細な手順と問題解決方法
この記事ではjQueryを使用して、階段のスライド効果を実装し、フロアをスクロールし、フロアボタンを...
オンライン MySQL トランザクションの問題の記録先週の金曜日、大きなテーブルを削除する操作を実行...
最近のブラウザでは、CSS 内で JavaScript を実行することはできなくなりました。以前は、...
日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...
背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...
もちろん、ページ パフォーマンスの最適化に関する個人的な経験も含まれています。ここでいくつかの点につ...
使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要...
Mysql マスタースレーブ同期の Last_IO_Errno:1236 エラーの原因は何ですか? ...
Tomcat のデフォルトのログは java.util.logging を使用しますが、これにはい...
目次1. コンポーネントの紹介2. ソースコード分析2.1 テンプレート2.2 スクリプト2.3 実...
目次導入ログ分類パラメータファイルエラーログファイル完全なログファイルスロークエリログバイナリログフ...
画像の周囲にテキストを折り返すとは何ですか?これは次の図の効果です。 エフェクトのCSSコードはここ...
目次1. データベース操作1.1 データベースの表示1.2 データベースを作成する1.3 データベー...
inode番号でファイルを削除するまずls -iを使用して、削除するファイルのinode番号を見つけ...
はじめに:ナビゲーション バーなどのコンポーネント ベースのアイデアを使用して機能モジュールを完全に...