Performance: svelte:window for window events
This affects how efficiently window-level events are handled and how they impact page responsiveness and rendering.
<script> let width = 0; </script> <svelte:window on:resize={() => width = window.innerWidth} /> <p>Window width: {width}</p>
<script> import { onMount, onDestroy } from 'svelte'; let width = 0; function updateWidth() { width = window.innerWidth; } onMount(() => { window.addEventListener('resize', updateWidth); }); onDestroy(() => { window.removeEventListener('resize', updateWidth); }); </script> <p>Window width: {width}</p>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Manual addEventListener/removeEventListener | Multiple listeners if not cleaned | Multiple reflows on each event | High paint cost on frequent events | [X] Bad |
| Using svelte:window event binding | Single reactive update | Reflow only if state changes affect layout | Lower paint cost due to optimized updates | [OK] Good |
svelte:window in a Svelte component?svelte:window usagesvelte:window is a special element in Svelte used to listen to events on the browser window object.svelte:window listens to window events [OK]svelte:window listens to window events only [OK]svelte:window?on:eventName={handler} syntax.svelte:window<svelte:window on:resize={handleResize} />.on:event on svelte:window [OK]on:event syntax on svelte:window [OK]window tag which doesn't existbind: instead of on:div instead of svelte:windowwidth after resizing the browser window?
<script>
let width = 0;
function updateWidth(event) {
width = event.currentTarget.innerWidth;
}
</script>
<svelte:window on:resize={updateWidth} />
<p>Window width: {width}</p>
updateWidth function sets width to event.currentTarget.innerWidth, which is the window's width.svelte:window event behaviorupdateWidth runs, updating width reactively. <script>
let scrollY = 0;
function onScroll() {
scrollY = window.scrollY;
}
</script>
<svelte:window on:scroll={onScroll}></svelte:window>
<p>Scroll position: {scrollY}</p>
svelte:window tag usagesvelte:window is a special element that must be self-closing when used to listen to events.<svelte:window></svelte:window>, which is invalid syntax for this element.svelte:window must be self-closing [OK]svelte:window when listening to events [OK]svelte:windowbind: is needed for event valueswindow.scrollY is inaccessible in handlersvelte:window. Which code snippet correctly updates both values on resize events?event.currentTarget and event.target may not reliably provide innerWidth and innerHeight. Using window.innerWidth and window.innerHeight is safer.<script>
let width = 0, height = 0;
function updateSize(event) {
width = event.currentTarget.innerWidth;
height = event.currentTarget.innerHeight;
}
</script>
<svelte:window on:resize={updateSize} /> uses event.currentTarget which may not always be the window. <script>
let width = 0, height = 0;
function updateSize() {
width = window.innerWidth;
height = window.innerHeight;
}
</script>
<svelte:window on:resize={updateSize} /> uses window.innerWidth and window.innerHeight directly, which is correct. <script>
let width = 0, height = 0;
<svelte:window bind:innerWidth={width} bind:innerHeight={height} />
</script> tries to bind non-bindable properties. <script>
let width = 0, height = 0;
function updateSize(event) {
width = event.target.innerWidth;
height = event.target.innerHeight;
}
</script>
<svelte:window on:resize={updateSize} /> uses event.target which is unreliable.window.innerWidth in handler [OK]window.innerWidth inside handler, not event properties [OK]Pass the test and this pattern moves unknown