传统全栈框架默认是整页更新,写篇博文比较一下局部更新方案。只比较官方库,社区库(HTMX、Unpoly、StimulusReflex 等)和 React/Vue 前端库不在讨论范围。
| 框架 | 官方方案 | 核心思路 | 传输方式 | 写状态的地方 | 上手难度 | 优缺点简述 |
|---|---|---|---|---|---|---|
| Rails | Turbo (Hotwire) + Stimulus | Drive 拦截导航;Frames 局部换块;Streams 推补丁;复杂交互用 Stimulus | 普通请求 + 可选 WebSocket/SSE | 服务端模板 | 低 | 官方默认;几乎不写 JS。 |
| Laravel | Livewire | 组件式 PHP,事件触发后服务端重渲再 Morph DOM | AJAX(可配 poll) | PHP 组件属性 | 低 | 偏 CRUD / 后台;组件多了请求与 payload 变重。 |
| Laravel | Inertia.js | 服务端返回 JSON 页面 props,前端适配器渲染 | XHR / fetch | 前端组件 + 后端控制器 | 中 | 偏产品型前端;有 SPA 手感但无独立 API。不建议与 Livewire 在同一交互层混太深。 |
| Phoenix | LiveView | 长连接上的服务端 UI,diff 后推补丁 | WebSocket | Elixir LiveView | 中 | 官方默认;实时交互强,绑定 Elixir。 |
| Symfony | UX Live Component | 类似 Livewire 的 Twig 组件 | AJAX | PHP + Twig | 低 | 官方 UX 路径。 |
| ASP.NET | Blazor Server | 服务端组件树,SignalR 推 UI diff | SignalR | C# 组件 | 中 | 要常驻连接,扩展成本需评估;普通 MVC/Razor 仍是整页或自管 AJAX。 |