The web platform has evolved dramatically over the past few years. What was once a simple document delivery system has become the foundation for complex, interactive applications that rival native software. But with this power comes architectural complexity.
The Shift to Server-First
The pendulum has swung. After a decade of client-side rendering dominance, the industry is rediscovering the power of the server. Frameworks like Astro, Next.js, and SvelteKit have made server-side rendering the default, not an afterthought.
This isn't your grandfather's server rendering, though. Modern SSR is paired with selective hydration, islands architecture, and edge computing to deliver the best of both worlds: fast initial loads and rich interactivity where it matters.
"The best architecture is one where you only pay for the interactivity you actually need." — Ryan Carniato, SolidJS creator
Islands Architecture
The islands architecture pattern, popularized by Astro, treats interactive components as isolated "islands" in a sea of static HTML. Each island hydrates independently, meaning the majority of your page ships zero JavaScript.
- Static by default — HTML is rendered at build time with zero JS overhead
- Interactive on demand — Only interactive components ship client-side JavaScript
- Framework agnostic — Mix React, Svelte, and Vue on the same page
- Progressive enhancement — Pages work before JavaScript loads
A Practical Example
Consider a typical marketing page. The hero, features section, and footer are entirely static. Only the pricing calculator and contact form need interactivity. With islands, you ship JavaScript only for those two components.
<!-- Static Astro page with interactive islands -->
<Layout>
<Hero /> <!-- Zero JS -->
<Features /> <!-- Zero JS -->
<Calculator client:visible /> <!-- Hydrates when visible -->
<ContactForm client:idle /> <!-- Hydrates when idle -->
<Footer /> <!-- Zero JS -->
</Layout>
The Edge Changes Everything
Edge computing has shifted the conversation from "where do we render?" to "how close can we render?" With platforms like Cloudflare Workers and Deno Deploy, your server-side code runs in data centers worldwide, often within 50ms of the user.
This means server-rendered pages can be as fast as statically served files, while remaining fully dynamic. Personalization, A/B testing, and geo-specific content no longer require client-side JavaScript or complex CDN configurations.
Choosing the Right Architecture
There's no one-size-fits-all answer. The right architecture depends on your use case, team, and performance requirements. But here's a framework for thinking about it:
- Content sites (blogs, docs, marketing) — Static generation with islands
- E-commerce — Hybrid static + server rendering at the edge
- Dashboards — SPA with server-side data fetching
- Real-time apps — WebSocket-powered with minimal SSR
The key insight is that most applications are a mix of these categories. The best frameworks let you make per-page or per-component decisions about rendering strategy.