首屏 hydration 抖动,你们怎么解的?
SSR + 客户端交互组件,首屏经常出现 "服务端渲染的内容 → 客户端接管后闪一下 → 变成正确状态" 的抖动。体验很糟糕。 常见的几个原因:服务端拿不到 window 、依赖时间戳的渲染、登录态在客户端才恢复。 我的处理套路: 能上 RSC 的全上 RSC,根本不 hydra
Next.js、React、TypeScript、前端工程化
本专题收录 Web 开发 方向的文章和社区讨论,重点关注真实工程场景、工具选择、实践路径和风险边界。
页面会持续更新,适合作为学习路线、选型参考和技术复盘入口。
SSR + 客户端交互组件,首屏经常出现 "服务端渲染的内容 → 客户端接管后闪一下 → 变成正确状态" 的抖动。体验很糟糕。 常见的几个原因:服务端拿不到 window 、依赖时间戳的渲染、登录态在客户端才恢复。 我的处理套路: 能上 RSC 的全上 RSC,根本不 hydra
Suspense 用得好是利器,用不好就是满屏 loading 闪烁。分享一下我的边界划分原则。 每个异步数据区块单独包一个 <Suspense ,fallback 给骨架屏。 路由级用 loading.tsx (本质也是 Suspense)。 不要把整个 page 包一个大 S
为了减小首屏 bundle,把一堆组件都做成了 dynamic(() = import(...)) 。结果首屏是快了,但交互时一堆 chunk 同时请求,FCP 到可交互反而拖长了。 后来反思:dynamic 不是越多越好,得看组件是否真在首屏外、是否够大。小组件 dynamic
这条Web 开发种子内容关注组件契约的工程闭环,覆盖“多人并行实现同一产品目标”中的越界修改、验收门槛和失败恢复。
这条Web 开发种子内容关注响应式布局的工程闭环,覆盖“从一句模糊想法到可运行页面”中的越界修改、验收门槛和失败恢复。
这条Web 开发种子内容关注表单状态的工程闭环,覆盖“将人工流程变成可验证脚本”中的越界修改、验收门槛和失败恢复。
这条Web 开发种子内容关注路由行为的工程闭环,覆盖“把演示原型推进到生产环境”中的越界修改、验收门槛和失败恢复。
这条Web 开发种子内容关注缓存失效的工程闭环,覆盖“修复只在真实浏览器出现的问题”中的越界修改、验收门槛和失败恢复。
把从一句模糊想法到可运行页面作为讨论入口,说明国际化为什么需要类型与端到端测试,以及模型总是改到无关文件出现后怎样缩小影响范围。
这条Web 开发种子内容关注表单状态的工程闭环,覆盖“从一句模糊想法到可运行页面”中的越界修改、验收门槛和失败恢复。
围绕Web 开发的缓存失效,拆解“从一句模糊想法到可运行页面”里的模型总是改到无关文件,比较让工具输出成为证据与明确数据所有权的验证价值。
围绕Web 开发的响应式布局,拆解“接手陌生仓库后的第一次修改”里的模型总是改到无关文件,比较明确数据所有权与将假设转成可检查条件的验证价值。