惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
S
SegmentFault 最新的问题
D
Docker
博客园 - 司徒正美
雷峰网
雷峰网
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - Franky
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
MongoDB | Blog
MongoDB | Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
React Server Components in Production: Lessons from 2026
Ahmed Mahmoud · 2026-06-28 · via DEV Community

Ahmed Mahmoud

Headline: RSC is a serious win for bundle size and TTFB, but only if your team commits to the new mental model. Half-adoption is worse than not adopting at all.

What Actually Changed

RSC moves rendering of components that don't need interactivity to the server. The browser receives a serialized tree, not a JavaScript bundle. The result on a real e-commerce surface we migrated at Devya Solutions:

  • −42% client JS on the product listing page
  • −180ms TTFB after enabling streaming
  • +0.08 INP regression on a poorly-split page (we'll come back to this)

The Three Component Types You Actually Use

  1. Server Components — fetch, render, never ship JS. Default for everything.
  2. Client Components ("use client") — for interactivity, hooks, browser APIs.
  3. Shared Components — pure presentation, work in both. Sweet spot for design systems.

The pitfall: every "use client" directive is a bundle entry point. One careless chart-library import pulls 80KB into every page.

Data Fetching Patterns That Survived

async function ProductList({ category }) {
  const products = await db.products.findMany({ where: { category } });
  return products.map(p => <ProductCard product={p} />);
}

We deleted ~3,000 lines of React Query setup.

Server Actions for Mutations

'use server';
export async function addToCart(formData: FormData) {
  const productId = formData.get('productId');
  await db.cart.add({ productId });
  revalidatePath('/cart');
}

What Still Hurts

  • Error boundaries — server-thrown errors surface as opaque digests in production
  • Third-party clients — anything that touches window needs a Client Component wrapper
  • Caching mental model — Next.js 15 made caching explicit, but the layers still confuse new hires

The INP Regression — And the Fix

Smaller JS doesn't automatically mean snappier interaction. Our regression: a deeply nested Client Component tree hydrated late. Fix: hoist the interactive island higher, pass server data as a prop.

Should You Adopt RSC?

Yes for new Next.js apps. For existing Pages Router apps, migrate route-by-route, not big-bang.


I write more production React patterns on eng-ahmed.com and ship them through Devya Solutions.