Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Astro Islandsの 内部実装を 「日本で一番わかりやすく」 ざっくり解説!

Avatar for Wu Kenji Wu Kenji
March 23, 2026

Astro Islandsの 内部実装を 「日本で一番わかりやすく」 ざっくり解説!

Avatar for Wu Kenji

Wu Kenji

March 23, 2026
Tweet

Other Decks in Technology

Transcript

  1. Propsのシリアライズ Server JavaScript オブジェクト Browser HTML属性の文字列 { } count: 1,

    date: new Date(...), items: new Set([1,2]), tags: new Map([...]) props=' {"count": [0, 1], "date": [2, "2025-..."], "items": [4, [[0,1], [0,2]]], "tags": [5, [...]] }' → devalue by Rich Harris(Svelte作者)
  2. Viteによるコード分割 index.html 静的HTML Page.astro <Header /> → Counter.BxK3q.js コンポーネント本体 Search.Dm2r8.js

    コンポーネント本体 <Counter client:visible /> <Search client:idle /> <Footer /> client.Fj7nP.js レンダラー共有
  3. ちょうどいい仕組みだから Astroが使うのは Custom Elements API だけ Web Components Custom Elements

    Shadow DOM HTML Templates connectedCallback ブラウザが勝手に呼んでくれる → hydration の起点
  4. Astro Islandの内部 connectedCallback() this.getAttribute('client') "load" 即座に実行 "idle" "visible" "media" matchMedia

    IdleCallback request Intersection Observer 条件を満たしたら import(renderer-url) fetch renderer → hydrate import(component-url) fetch component