Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ECMAScriptの視点で見るWeakRefの“正しい”使い方
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
uhyo
December 09, 2019
Programming
690
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ECMAScriptの視点で見る WeakRefの“正しい”使い方
Ginza.js#7のLTです。
uhyo
December 09, 2019
More Decks by uhyo
See All by uhyo
Baseline対応のDOMの型定義を作った
uhyo
3
770
AIのReact習熟度を測る
uhyo
2
830
React、まだ楽しくて草
uhyo
7
4.6k
TypeScript 7.0の現在地と備え方
uhyo
6
3.6k
React 19時代のコンポーネント設計ベストプラクティス
uhyo
20
10k
型定義でAIと会話する:型を通じてAIに意図を伝えるテクニック
uhyo
1
97
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
3
1.1k
ECMAScript仕様の最新動向: プロセスの変化と仕様のトレンド
uhyo
3
920
TypeScript 6.0で非推奨化されるオプションたち
uhyo
18
8.4k
Other Decks in Programming
See All in Programming
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
170
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
210
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
共通化で考えるべきは、実装より公開する型だった
codeegg
0
250
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
960
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
510
AIエージェントで 変わるAndroid開発環境
takahirom
2
680
act1-costs.pdf
sumedhbala
0
230
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
400
Claude Team Plan導入・ガイド
tk3fftk
0
210
symfony/aiとlaravel/boost
77web
0
130
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
500
Featured
See All Featured
Side Projects
sachag
455
43k
GitHub's CSS Performance
jonrohan
1033
470k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Practical Orchestrator
shlominoach
191
11k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
We Are The Robots
honzajavorek
0
280
Transcript
&$."4DSJQUך鋔挿ד鋅 8FBL3FGךˑ姻׃ְ˒⢪ְ倯 (JO[BKT!VIZP@
荈䊹稱➜ ؿٗٝزؒٝسؒٝآص،!-*/&吳䒭⠓爡 +BWB4DSJQU娖䎃ְֻ 2JJUB蔓➂&$."4DSJQUةؚDPOUSJCVUJPO侧⡘ չ+BWB4DSJQUך \^椚鍑ׅպ չ➙ַד鷄ְאֽ
+BWB4DSJQUךչ垥彊ٓ؎ـٓٔպ㷕עպ չ+BWB4DSJQUח䱰欽ֲׁז0QUJPOBM$IBJOJOH➙ׁ䗡䎿鍑铡պ זו !VIZP@
!VIZP@ 5BCMFPG$POUFOUT 8FBL3FGך䗁统 &$."4DSJQUהؖك٦آ؝ؙٖءّٝךꟼ⤘ 8FBL3FGכ➬圫חוך״ֲח剅ַךַ 8FBL3FGָ䧮ղח♷ִ⥂鏾כ⡦ַ
!VIZP@ 8FBL3FGך䗁统 4UBHFفٗه٦ؠٕ 8FBL3FGؔـآؙؑزפך䓲撑⡲䧭דֹװא 'JOBMJ[BUJPO(SPVQؔـآؙؑزָؖك٦آ؝ؙٖز ׁ؝٦ٕغحؙㄎדֻװא ˟DG8FBL3FG+BWB4DSJQUח䓲撑ָװגֻאְדח'JOBMJ[BUJPO 2JJUB 㹑⠗
!VIZP@ 8FBL3FGך⢽ const ref = new WeakRef(new ArrayBuffer(1024 ** 3));
console.log(ref.deref()); // ArrayBuffer setTimeout(()=> { gc(); console.log(ref.deref()); // undefined }, 100); new WeakRef ⦼ ד⦼פך䓲撑⡲䧭 䓲撑ך⚥魦כderef ًاحسד铣 ($ח״ג䓲撑ָ ⥂䭯ׅؔـآؙؑز ָ嶊ִ
!VIZP@ 8FBL3FGך⢽嶊ִזְ㜥さ const buf = new ArrayBuffer(1024 ** 3); const
ref = new WeakRef(buf); console.log(ref.deref()); // ArrayBuffer console.log(ref.deref() === buf); // true setTimeout(()=> { gc(); console.log(ref.deref()); // ArrayBuffer console.log(buf.byteLength); // 1073741824 }, 100); 㢌侧CVGח⦼Ⰵ 䓲ֻזְ撑 䓲撑ך⚥魦כ 床׃⦼הずׄ ($䖓嶊ִגְזְ 㢌侧buf鸐ׄג⦼ח ،ؙإأ〳腉זךד
!VIZP@ 'JOBMJ[BUJPO(SPVQך⢽ const group = new FinalizationGroup( iterator => console.log([...iterator]));
let obj = new ArrayBuffer(1024 ** 3); group.register(obj, 'דְַر٦ة’); obj = null; gc(); // [‘דְַر٦ة’] ה邌爙ׁ ؔـآؙؑزָ($ׁ הֹחㄎעꟼ侧床ׅ 'JOBMJ[BUJPO(SPVQך 湊鋔㼎韋ח obj鷄⸇ objפך撑嶊ׅ objָ($〳腉חז objָ($ׁג؝٦ٕ غحָؙㄎל
&$."4DSJQUה($
!VIZP@ &$."4DSJQUה($ 2הֿדծ+4ך鎉铂➬圫&$."4DSJQUדכ ($כֿתדוֲ䪔גְך ˟&$."4DSJQU +BWB4DSJQUך鎉铂➬圫㹀㕂ꥷ鋉呓կ չ+BWB4DSJQUպהչ&$."4DSJQUպך麩ְחכ长铡ָ֮ծ娖〷涸穗箮דせָ麩ֲֽד䊴殯כ זְהְֲךָ涪邌罏ך䭯锷կ
!VIZP@ &$."4DSJQUה($ 2הֿדծ+4ך鎉铂➬圫&$."4DSJQUדכ ($כֿתדוֲ䪔גְך " ⡦㹀纏ׁגְתׇד׃ ˟8FBL.BQך眍ח׳הֽ($פך鎉⿹ָָ֮/05&玎䏝 ˟&$."4DSJQU +BWB4DSJQUך鎉铂➬圫㹀㕂ꥷ鋉呓կ չ+BWB4DSJQUպהչ&$."4DSJQUպך麩ְחכ长铡ָ֮ծ娖〷涸穗箮דせָ麩ֲֽד䊴殯כ
זְהְֲךָ涪邌罏ך䭯锷կ
!VIZP@ &$."4DSJQUה($ 2ז⡦㹀纏ׁגְזַך " ($כفؚٗٓيך䮙⹛חⰋֻ䕦갟⿹רׁזְַ ($כⳢ椚禸ח״剑黝⻉חֺׅזְ湡涸ًٌٔ⢪欽ꆀ幾 剑黝⻉דفؚٗٓيך䮙⹛ָ㢌ץֹדכזְ ˟($ָ䮠תְׇדفؚٗٓيךػؿؓ٦وٝأָ衅ַׅ׃זְָծ ػؿؓ٦وٝأכ鎉铂➬圫ד⥂鏾ׁגְזְךד➙㔐כ莆ז׃
!VIZP@ 8FBL3FGך&$."4DSJQUפך䕦갟 2ד8FBL3FGכفؚٗٓيך䮙⹛ח䕦갟ׅ״י
!VIZP@ 8FBL3FGך&$."4DSJQUפך䕦갟 2ד8FBL3FGכفؚٗٓيך䮙⹛ח䕦갟ׅ״י " ֲדׅי אְח&$."4DSJQUחؖك٦آ؝ؙٖءّٝך嚊䙀ָ
!VIZP@ 8FBL3FG➬圫ח鋅($ IUUQTUDFTQSPQPTBMXFBLSFGT ״䒷欽
!VIZP@ 8FBL3FG➬圫ח鋅($ ˑֿך➬圫כؖك٦آ؝ؙٖءّٝח㼎׃ג⡦ך⥂鏾遤זְ˒ IUUQTUDFTQSPQPTBMXFBLSFGT ״䒷欽
!VIZP@ ؖك٦آ؝ؙٖءّٝך➬圫♳ך㹀纏 Ⳣ椚禸כ⟣䠐ךة؎ىؚٝדˑMJWFדזְ˒ؔـآؙؑز8FBL3FGַ 嶊׃ג葺ְ⥂鏾כ搀ְ宕黅ח嶊ׁזְ〳腉䚍֮ • ˑMJWFדזְ˒ؔـآؙؑزؖك٦آ؝ؙٖءّٝך㼎韋ח ז䖤ؔـآؙؑزך䬄韋涸ז邌植
!VIZP@ MJWFזؔـآؙؑزך㹀纏 㼛勻涸ח8FBL3FG⟃㢩ך䩛媮דفؚٗٓيַ錁庠 ֿׁה ךזְؔـآؙؑز
!VIZP@ MJWFזؔـآؙؑزך㹀纏 㼛勻涸ח8FBL3FG⟃㢩ך䩛媮דفؚٗٓيַ錁庠 ֿׁה ךזְؔـآؙؑز 錁庠הכ!!!!!!!!!! ˟הׯה׃㹀纏ח׃״ֲהְֲ陽锷כ֮תׅ
תה
!VIZP@ ➬圫חֶֽ8FBL3FGך⥂鏾 ($ָ饯ֿ⥂鏾כ搀ְⳢ椚禸⣛㶷 ($㼎韋הזؔـآؙؑزך⿑㺘ז㹀纏Ⳣ椚禸⣛㶷 ׃8FBL3FGכ⥂鏾幾ׅ չفؚٗٓيָ⥂䭯ׅؔـآؙؑزכ($ׁזְպהְֲ⥂鏾PQUPVU〳腉
!VIZP@ 8FBL3FGך䠐纏 8FBL3FGכ⥂鏾幾ׅ Ⳣ椚禸ךⵖ秈ָ幾 剑黝⻉ך堣⠓ָ㟓⸇ Ⱗ⡤涸חכًٌٔך⢪欽ꆀ幾
!VIZP@ תה 8FBL3FGכ剑黝⻉ָך㈓♧ך㶷㖈䠐纏ד֮ծ ➭ך湡涸ד⢪ֲךכ⡦ַָ呎劤涸חֶַ׃ְךד 罋ִ湫׃ת׃׳ֲ 'JOBMJ[BUJPO(SPVQず圫