§ 02 — Lab
SPA で避けて通れない 4 種類のメモリリーク (Timer / Listener / Detached DOM / Closure) を 意図的に再現し、`performance.memory` の階段状の増加で観察します。 対策の切替で「直したときに本当に直るか」も手元で確認できる稽古場です。
5 ステップのガイド付き。リーク 1 種類ずつ作って直す。初見ならこちらから。
開くリーク種別・対策・保持サイズ・サイクル数を自由に組み合わせて実験できます。
開くメモリリークは記事を読むだけでは腑に落ちにくい領域です。 「setInterval の cleanup を忘れるとリークする」という文字情報は覚えられても、 ヒープが階段状に積み上がる様子 は実機で見ないと身体化しません。
この稽古場では、意図的に 4 種類のリーク(Timer / Listener / Detached DOM / Closure)を
作り出し、それぞれの「直し方」を切り替えながら performance.memory の推移を観察します。
performance.memory は Chromium 系(Chrome / Edge 等)だけで使える非標準 API です。
cross-origin isolated な文脈(COOP/COEP が効いている)や
--enable-precise-memory-info フラグが有効な環境でない限り、
値はバケット化され、更新頻度も数十秒単位に抑制されます。
そのため短時間の変動はそのまま画面に反映されないことがあります。
傾向(増えているのか、平らなのか)を見る目的には十分ですが、
厳密な数値が必要な場合は Chrome DevTools の Memory パネル(Heap Snapshot)で
実測してください。
performance.memory は Chromium のみ)— 表示になりますsetInterval / setTimeout を cleanup せずにコンポーネントを unmount するaddEventListener しか呼ばず removeEventListener を忘れるremoveChild した要素を JS 変数が握り続けるこの稽古場はいかがでしたか?