A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry below:

FinalizationRegistry - JavaScript | MDN

FinalizationRegistry

Baseline Widely available *

FinalizationRegistry オブジェクトにより、オブジェクトがガベージコレクションで回収されるときにコールバックを要求することができます。

解説

FinalizationRegistry は、レジストリーに登録されているオブジェクトが回収される (ガベージコレクションされる) 時にクリーンアップコールバックを要求する方法を提供します。(クリーンアップコールバックはファイナライザーと呼ばれることもあります。)

メモ: クリーンアップコールバックは、重要なプログラムロジックには使用しないでください。詳細は、クリーンアップコールバックに関する注意事項を参照してください。

コールバックで渡すレジストリーを作成します。

const registry = new FinalizationRegistry((heldValue) => {
  // ....
});

次に、 register メソッドを呼び出して、クリーンアップコールバックを行いたいオブジェクトを登録し、そのオブジェクトと保持値を渡します。

registry.register(theObject, "some value");

レジストリーがオブジェクトへの強い参照を保持すると、目的に反してしまうので、 (レジストリーが強い参照を保持していれば、そのオブジェクトは決して回収されない)、強い参照は保持はしません。

theObject が回収された場合、クリーンアップコールバックは、指定した保持値 (上記の "some value") で呼び出される可能性があります。保持値は、プリミティブでもオブジェクトでも、 undefined であっても構いません。保持値がオブジェクトの場合、レジストリーはその値への強い参照を保持します (これにより、後でクリーンアップコールバックに渡すことができます)。

オブジェクトの登録を解除したい場合は、三番目の値を渡します。 これは、後でレジストリのレジストリの unregister 関数を呼び出してオブジェクトの登録を解除する際に使用する登録解除トークンです。レジストリーは、登録解除トークンへの弱い参照のみを保持します。

よくオブジェクト自身が登録解除トークンとして使われ、これは良い結果になります。

registry.register(theObject, "some value", theObject);
// ...some time later, if you don't care about `theObject` anymore...
registry.unregister(theObject);

ただし、同じオブジェクトである必要はありません。異なるものでも構いません。

registry.register(theObject, "some value", tokenObject);
// ...some time later, if you don't care about `theObject` anymore...
registry.unregister(tokenObject);
コンストラクター
FinalizationRegistry()

新しい FinalizationRegistry オブジェクトを生成します。

インスタンスメソッド
FinalizationRegistry.prototype.register()

オブジェクトをレジストリーに登録して、オブジェクトがガベージコレクションされたときにクリーンアップコールバックが実行できるようにします。

FinalizationRegistry.prototype.unregister()

オブジェクトをレジストリーから登録解除します。

できるだけ使用しない

FinalizationRegistry を正しく使用するには慎重に検討する必要があるため、できるだけ使用しない方がいいでしょう。また、仕様で保証されていない特定の動作に依存しないようにすることも重要です。ガベージコレクションがいつ、どのように、どのように行われるかは、それぞれの JavaScript エンジンの実装に依存します。あるエンジンで観察された動作が、別のエンジンや同じエンジンの別のバージョンでは異なるかもしれませんし、同じエンジンの同じバージョンでも若干異なる状況になるかもしれません。ガベージコレクションは、 JavaScript エンジンの実装者がその解決策を常に改良し続けている難しい問題なのです。

ここでは、 FinalizationRegistry が含まれている WeakRef の提案の著者が、その説明文書に盛り込んだ具体的なポイントを紹介します。

ガベージコレクター は複雑です。アプリケーションやライブラリーが、ガベージコレクターによる FinalizationRegistry のクリーンアップやファイナライザー [クリーンアップコールバック] の呼び出しをタイムリーに予測可能な方法で行うことに依存している場合、期待を裏切られる可能性があります。クリーンアップが予想よりもずっと遅く行われたり、まったく行われなかったりすることがあります。変化する原因には次のようなものがあります。

クリーンアップコールバックに関する注意点

クリーンアップコールバックには、いくつかの注意点があります。

例 新しいレジストリーの生成

コールバックを渡すことでレジストリーを作成することができます。

const registry = new FinalizationRegistry((heldValue) => {
  // ....
});
クリーンアップのためにオブジェクトを登録

そして、クリーンアップコールバックを呼び出す任意のオブジェクトを登録するには、 register メソッドを呼び出して、そのオブジェクトと保持値を渡します。

registry.register(theObject, "some value");
仕様書 ブラウザーの互換性 関連情報

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4