Qwik de Builder.io propone modelo radically distinto: resumability en lugar de hydration. En SPA tradicional (React, Vue, SvelteKit), el browser descarga JS bundle + “hydrates” state de HTML. Qwik serializa state en HTML y resumes desde donde el server quedó. Bundle inicial cercano a cero. Si esto suena revolutionary, es porque lo es — aunque con trade-offs.
Qué es resumability
Modelo tradicional (hydration):
Server: renderiza HTML
Cliente: download HTML + JS bundle (100-300KB)
Cliente: parse JS, reconstruct state, attach handlers
Cliente: ahora interactive
Modelo Qwik (resumability):
Server: renderiza HTML + serializes state y event handlers
Cliente: download HTML (no JS upfront)
Cliente: HTML is interactive immediately — listens to events
Cliente: cuando evento ocurre, download JUST el code needed
Resultado: Time to Interactive near zero.
Ejemplo componente
import { component$, useSignal } from '@builder.io/qwik';
export const Counter = component$(() => {
const count = useSignal(0);
return (
<button onClick$={() => count.value++}>
Count: {count.value}
</button>
);
});
El $ en onClick$ es símbolo crítico — señala que es lazy-loaded. Optimizer splits en chunks separados.
Performance medido
Benchmark típico blog page:
| Metric | Qwik | React SPA | Next.js |
|---|---|---|---|
| TTI | 0.3s | 2.5s | 1.5s |
| Bundle inicial | 0KB JS | 150-300KB | 80-150KB |
| FCP | 0.4s | 0.8s | 0.6s |
| LCP | 0.6s | 1.5s | 1.2s |
| Lighthouse perf | 100 | 70-85 | 80-95 |
Particularmente dramatic en mobile con network slow.
Qwik City
Framework sobre Qwik (como SvelteKit sobre Svelte):
- File-based routing.
- Loaders y actions como SvelteKit.
- SSR default.
- Adapters: Vercel, Cloudflare, Netlify, Node, static.
- Islands-like pero diferente concept.
// src/routes/users/[id]/index.tsx
import { component$ } from '@builder.io/qwik';
import { routeLoader$ } from '@builder.io/qwik-city';
export const useUser = routeLoader$(async (requestEvent) => {
return await db.user.findById(requestEvent.params.id);
});
export default component$(() => {
const user = useUser();
return <h1>{user.value.name}</h1>;
});
Developer Experience
- React-like: JSX, components, hooks analogues.
- Migration from React: conceptual similar pero code changes substantial.
- TypeScript first-class.
- Vite-based: fast HMR.
- DevTools: standard Chrome.
Qwik vs Astro
Both edge-first con performance:
| Aspect | Qwik | Astro |
|---|---|---|
| Full SPA feel | Sí | Islands only |
| React components | Conversión needed | Direct (via integration) |
| Approach | Resumable | Static + islands |
| Use case | Full apps | Content-heavy |
Astro for content sites. Qwik para apps with significant interactivity pero optimal TTI.
Donde Qwik brilla
- E-commerce: performance = revenue.
- Content with interactivity: news sites, blogs con comments.
- Mobile-first: where TTI matters most.
- SEO: LCP impact ranking.
- Low-bandwidth users: bundle zero is game-changer.
Donde no encaja
- Team con mucha inversión React: migration cost.
- Ecosistema React-dependent: libraries work with care.
- Apps muy cliente-heavy: still load code eventually.
- Realtime collab tools: streaming state flows differently.
Builder.io integration
Qwik creado por Builder.io, integra con su visual CMS:
- Visual editing: no-code-like.
- A/B testing: built-in.
- Content management: headless CMS.
Para teams non-technical + devs, combo atractivo.
Ecosystem
Fewer libraries que React pero growing:
- Component libraries: Qwik UI, Modus.
- Forms: modular-forms.
- State management: built-in signals sufficient most cases.
- Testing: Vitest + Playwright.
Gaps comparado con React pero sufficient para many apps.
Limitations
Honest:
- Mental model shift:
$syntax, lazy boundaries. - Debugging: async boundaries pueden confundir.
- Small ecosystem: todavía.
- Hiring: pool small.
- Library compatibility: React libs need integration layers.
- Risk: bet on new paradigm.
Cuándo adoptar
- Performance-critical projects greenfield.
- Teams open a new paradigms.
- Builder.io customers natural integration.
- Edge deployment where cold start matters.
Cuándo esperar
- Enterprise stable stacks: too new.
- Hiring challenges: limited pool.
- Complex state apps: not yet battle-tested al mismo nivel.
Comparación detallada con SvelteKit
Both React alternatives pero different:
- Svelte: compiler approach, smaller bundles pero still hydration-based.
- Qwik: resumability approach, even smaller initial.
- Both: excellent DX, SSR, deploy anywhere.
Para performance extreme, Qwik. Para ecosystem más maduro, SvelteKit.
Deployment
npm create qwik@latest my-app
cd my-app
npm install
npm run dev
# Deploy
npm run build
npm run deploy.cloudflare # or vercel, etc
Adapters reliable.
Casos reales
- Builder.io: marketing site en Qwik.
- Daily.dev: partial adoption.
- Some e-commerce migrations reporting performance wins.
- OSS showcase en qwik.dev.
Still early adoption.
Conclusión
Qwik es la propuesta más radical de optimization frontend performance en años. Para projects greenfield con performance obsesivo, es válida elección. La “bundle zero” es real y dramatic en real-world metrics. Limitaciones en ecosystem y mental-model shift son reales costs. Para maioría de proyectos SPA, SvelteKit o Astro siguen siendo elecciones más seguras en 2024. Pero Qwik es playground interesante que influirá mainstream frameworks — resumability concept está siendo adoptado por otros también.
Síguenos en jacar.es para más sobre Qwik, frameworks frontend y performance web.