JavaScriptのWeakMap
詳しくはドキュメントを参照してもらうとして、簡単に説明すると- WeakMapが行うのはキーへの弱参照
- キーへの参照がなくなったときにマップのエントリがGCの対象になる
const wm = new WeakMap(); function foo() { const key = {}; const value = {}; wm.set(key, value); // この関数が終わったらkeyへの参照がなくなるので、このエントリがGC対象となる } foo();そもそも弱参照って何かって?ホラあれだ、えーと、参照カウントを増やさない参照のことよ。詳しくは各自しらべてね。
ほしいもの
で、ほしいのは、キーへの弱参照ではなく値への弱参照を行うマップ。つまり、
key
ではなくvalue
への参照がなくなったらエントリがGC対象になるやつ。誰も使っていなければエントリが破棄されるので、巨大なキャッシュを作るときに便利なんです。
特にWebサーバとして動くときは、1つのリクエストで使うメモリはなるべく抑えたいしね。
Pythonでは?
Pythonには、キーへの弱残照マップ(WeakMap相当)にWeakKeyDictionaryが、値への弱参照(この記事で書いてるほしいやつ)にWeakValueDictonaryがあります。Pythonマジできるやつ。
JavaScriptでエミュレートできない?
誰か作ってないかなと思ってnpmパッケージを調べてみたら…
あったよ!
weak-value-map
どうやって実装してるんだろうと思って中を除いたらC++でコア部分を作ってた。すげー。てことはやっぱりPure JavaScriptでは実装できないのかな。
JavaScriptの言語仕様に取り込むのは難しいかもしれないけど、せめてNodeで取り込んでくれないかな… |д゚)チラッ
おもしろそう。あとで試してみよっと。
0 件のコメント:
コメントを投稿