问 HN:如果你今天要构建一个 Web 应用,你会选择什么技术栈?
为新的 Web 应用选择技术栈,往往是在开发效率、长期稳定性以及应用需要多强交互之间做权衡。许多工程师倾向于选择“无聊”、成熟的单体技术栈,如 Rails、Django、Laravel、Go 或 .NET,并采用服务端渲染,常搭配 HTMX 或 Hotwire,后端用 Postgres 或 SQLite,理由是它们在简单 VPS 托管上更易部署和维护。也有人选择更现代的 JavaScript 生态,如 Next.js、SvelteKit 或基于 React 的技术栈,以获得更丰富的客户端体验,同时提醒要警惕框架更迭,并强调最好的选择通常是你已经足够熟悉、能快速交付的那一个。
总体决策标准
- 最常见的建议:选择你已经熟悉且速度快的技术栈,尤其适合个人兴趣项目或独立开发。
- 次要考虑:选择“无聊”的、稳定的、文档完善的技术,它们更容易维护和招聘,而不是最新潮的方案。
- 目标不同,选择也不同:
- 为了交付/做完某个东西:使用你熟悉的单体框架。
- 为了学习:刻意选择新技术栈(Rust、Go、HTMX 等)。
- 应用类型很重要:
- 简单“网站”:倾向于服务端渲染、尽量少用 JS 的技术栈。
- 高交互“应用”:SPA 或更丰富的客户端框架。
后端与全栈框架
- 明显集中在以下几类:
- Ruby on Rails(+ Hotwire/Turbo),部署时常搭配 Kamal 或类似工具。
- Django / Flask / 其他 Python 框架,常与 HTMX 或传统模板配合使用。
- Laravel / PHP 技术栈,常被称赞为开箱即用的 SaaS 功能齐全。
- Elixir + Phoenix + LiveView,因并发能力和函数式风格而受重视。
- 使用最少框架的 Go(Gin、stdlib、小型路由器等),强调简洁和性能。
- .NET(ASP.NET、Blazor)以及 Java/Spring/Quarkus/Jakarta EE 这类“无聊但可靠”的强类型选择。
- Node/TypeScript 后端(Express、Nest.js、Fastify、Deno、Bun、SST)。
前端与交互模型
- 主要分成:
- React(常配 Next.js、Remix 或 T3)作为“行业标准”,或至少是主流方案。
- Svelte/SvelteKit、Vue、Angular 作为热门替代方案。
- HTMX、Hotwire、LiveView、传统模板 + 轻量 JS(Alpine、Stimulus、jQuery),以避免沉重的 SPA。
- 也有人偏好基于 WASM 或更像桌面应用的模型(Blazor、Yew、Go+WASM、Pascal→WASM)。
数据库与持久化
- PostgreSQL 是最常被提到的默认选择。
- SQLite 经常被推荐用于早期阶段,甚至适用于相当大的以读为主的负载。
- 其他:MySQL/MariaDB、Redis、DynamoDB、Typesense、Meilisearch、LMDB、libsql/Turso、TiDB/YugabyteDB 等。
基础设施与部署
- 许多人更喜欢简单的 VPS / 裸机加 Docker 或基础脚本,而不是复杂的云方案。
- 对 serverless 的看法不一:
- 优点:扩展轻松,对早期极少用户来说很好用。
- 缺点:规模变大后成本可能飙升,迁回单体/微服务会很痛苦。
对现代 Web 开发的看法
- 对 JavaScript 生态的频繁变动和构建工具存在明显不满;被视为“给浏览器/JS 打补丁”。
- 反方观点:现代工具(React、Svelte、Vite、TypeScript)如果使用得当,确实能改善开发体验。
- 对更简单年代(LAMP、Drupal、VB6/Delphi)的怀旧,以及对集成化、长生命周期、单体式解决方案的偏好。
- AI 编程工具被认为降低了采用陌生技术栈的门槛。