Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ECMAScriptの視点で見るWeakRefの“正しい”使い方
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
uhyo
December 09, 2019
Programming
700
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
Transcript
22 slides
&$."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ず圫
More Decks by uhyo
See All by uhyo
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
650
Reactの設計論
uhyo
26
18k
型があると何が嬉しいか
uhyo
3
180
Baseline対応のDOMの型定義を作った
uhyo
3
1k
AIのReact習熟度を測る
uhyo
2
1.1k
React、まだ楽しくて草
uhyo
7
5.3k
TypeScript 7.0の現在地と備え方
uhyo
6
4k
React 19時代のコンポーネント設計ベストプラクティス
uhyo
20
11k
型定義でAIと会話する:型を通じてAIに意図を伝えるテクニック
uhyo
1
140
Other Decks in Programming
See All in Programming
Next.js: The final boss of Web Performance
guaca
0
410
Modernizing iOS Apps
seyfoyun
0
150
Seven New Principles of Software Engineering
yegor256
0
490
Claude Code ハーネスDeep Dive – 君はどこまで制御する? -
takateeen_knj
6
5.7k
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.3k
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
370
Goコンパイラを作ってGoをもっと理解する / Build a Go compiler to better understand Go
ikura_hamu
0
130
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
320
Spec-driven Development with AI
simas
PRO
0
2.3k
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
240
はじめてのPLATEAU
nokonoko1203
1
650
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
390
Building Adaptive Systems
keathley
44
3.3k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
630
Rails Girls Zürich Keynote
gr2m
96
14k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
GitHub's CSS Performance
jonrohan
1033
470k
The agentic SEO stack - context over prompts
schlessera
0
1k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
350
Deep Space Network (abreviated)
tonyrice
0
410
Rebuilding a faster, lazier Slack
samanthasiow
85
9.8k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
640
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k