Same islands, no LiveView
This is the plain-page twin
of /proxying: the
exact same two islands, the same modulepreload, the same load-stats
panel — but rendered by a plain controller, not a LiveView. Open both and compare the
first render
delta. It's a live illustration of when an island paints.
The first HTTP hit is a full server render — you see the page and the island's
placeholder
at once. The Svelte app only mounts when the KeenApp
hook fires, which can't happen until the socket connects
and the view mounts. That connect round-trip is the gap.
Same full server render + placeholder, but no socket phase:
mountStatic()
swaps the placeholder for the island the instant the deferred
app.js
parses. Same app, same bytes — it just mounts with
live: null.
Neither page ever shows a blank screen — the shell and placeholder are server-rendered. What differs is only when the island content appears.
:direct
browser → CDN
:proxy
browser → your app → CDN
Live load statistics (plain page)
Measured exactly like the LiveView page — the Performance API for request/load, a MutationObserver for first render. Times are milliseconds since the page started loading. Reload to watch them again.