跪拜 Guibai
← All articles
Frontend

Qwik 2.0 Deletes HTML Comments to Defend Resumability, and the Bundle Pays for It

By 涛涛ing ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

Framework choice is now a measurable tradeoff between bytes and startup execution: Qwik 2.0 pays more transfer to remove runtime markers, while Remix 3 and SvelteKit 3 subtract weight in different places. Streaming is becoming a platform expectation, so the cost each framework accepts matters more than its pitch.

Summary

Qwik 2.0 RC landed on npm at 15:49 UTC on October 1, 2026, and within seven hours SvelteKit 3 and Remix 3.0.0 followed. The release notes spend their most interesting words on deletion: v1 carried resumability state inside HTML comments, with markers like <!--qv--> for component boundaries and <!--t=8--> for signal-driven text nodes. Those markers, the Qwik team says, required one ordered pass to write, taxed CPU and memory, slowed reactive updates, blocked out-of-order streaming, and let a slow fetch stall everything below it.

v2 moves that data into two script blocks at the end of the document, qwik/state and qwik/vnode, and body comments drop from 60 to 0. Structural payoffs include out-of-order streaming as an experimental feature, updates that work from in-memory vnodes instead of reparsing HTML, and a scheduler that yields every 15 ms so long tasks do not block interaction. Bundle size is the visible cost: JavaScript that has to run before load falls from 59 KB to 9 KB, but total transferred bytes go up. Qwik's position is that startup JS matters more than total bytes; a worse-network scenario is the obvious countercase.

Takeaways
— Qwik 2.0 RC published to npm at 15:49 UTC on October 1, 2026; SvelteKit 3 and Remix 3.0.0 followed within seven hours.
— Qwik v1 serialized component boundaries and state into HTML comments such as <!--qv--> and <!--t=8-->.
— Qwik 2.0 drops body comments from 60 to 0 and moves boundary, state, and text-update data into trailing qwik/state and qwik/vnode script blocks.
— The removal enables out-of-order streaming as an experimental feature, lets updates run from in-memory vnodes without reparsing HTML, and allows the scheduler to yield every 15 ms.
— JavaScript that runs before load falls from 59 KB to 9 KB, but total bundle size increases.
— The same-day Remix 3 release drops React and becomes a single package built on Request/Response primitives; SvelteKit 3 pushes logic into compilation to minimize runtime.
Conclusions

Qwik v1's marker format contradicted its own premise: a framework promising less browser work depended on HTML that had to be written in one ordered pass. Moving state to trailing scripts removes that contradiction and shifts the cost to upfront bytes.

Same-day releases show three competing answers to where framework weight should live: Qwik removes runtime markup, Remix removes the React binding, SvelteKit removes runtime through compilation. The shared question is where the weight sits.

An explicit tradeoff is more useful than benchmark charts. Qwik's claim that startup JS matters more than total bytes is testable, and a weak-network environment is the clear counterexample.

Concepts & terms
Hydration
The browser-side process of re-downloading and re-executing a server-rendered app's component code to rebuild state and attach event listeners, which makes startup cost scale with total code size.
Resumability
Qwik's execution model: component work pauses on the server and resumes in the browser. State and component boundaries are serialized into HTML, and listeners reference chunk URLs, so the browser only runs code for interactions that actually happen.
Qwikloader
A small browser-side script that attaches one global listener and loads interaction-specific chunks on demand, avoiding hydration.
Out-of-order streaming
Sending HTML chunks as soon as their data is ready instead of waiting for the slowest request, so a page can start rendering before all content is resolved. Qwik v1's comment markers made this physically impossible; Qwik 2.0 enables it experimentally.
qwik/state and qwik/vnode
Two script blocks appended to the end of Qwik 2.0 HTML that store serialized application state and virtual node data, replacing the HTML comment markers used in v1.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗