全栈开发的新选择
2026 年的全栈开发不再只有 Next.js 和 Nuxt。一套轻量、高性能的组合正在成为新宠:Hono + Drizzle + HTMX。
为什么这个组合值得关注
传统 SPA(React/Vue)的痛点:
- 大量 JS 包体积
- 客户端状态管理复杂
- SEO 需要额外配置
- 首屏加载慢
Hono + Drizzle + HTMX 的方案:
- 服务端渲染 HTML,直接发送
- 几乎没有客户端 JS
- 天然 SEO
- 首屏秒开
Hono — 超轻量后端框架
import { Hono } from "hono";
import { serve } from "hono/bun"; // Bun 专用适配器
const app = new Hono();
// 中间件
app.use("*", async (c, next) => {
console.log(`${c.req.method} ${c.req.url}`);
await next();
});
app.get("/", (c) => c.html(`
<!DOCTYPE html>
<html>
<head><title>美食推荐</title></head>
<body>
<h1>今天吃什么?</h1>
<button hx-get="/api/recommend" hx-target="#result">
随机推荐
</button>
<div id="result"></div>
</body>
</html>
`));
serve(app);
Drizzle ORM — 类型安全的数据库操作
import { drizzle } from "drizzle-orm/bun-sqlite";
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
import { Database } from "bun:sqlite";
// 定义表结构
const dishes = sqliteTable("dishes", {
id: integer("id").primaryKey(),
name: text("name").notNull(),
category: text("category"),
difficulty: text("difficulty"),
});
// 查询
const db = drizzle(new Database("food.db"));
const results = await db
.select()
.from(dishes)
.where(eq(dishes.category, "晚餐"))
.limit(5);
console.log(results);
// 类型安全:results[0].name 是 string 类型
HTMX — 告别客户端路由
HTMX 通过在 HTML 属性中声明交互行为,让服务端直接返回 HTML 片段:
<!-- 搜索框 — 实时搜索 -->
<input
type="text"
name="q"
hx-get="/api/search"
hx-trigger="keyup changed delay:300ms"
hx-target="#results"
placeholder="搜索菜品..."
/>
<div id="results">
<!-- 搜索结果由服务端直接返回 HTML -->
</div>
<!-- 分页 -->
<button hx-get="/api/dishes?page=2"
hx-target="#dish-list"
hx-swap="innerHTML">
加载更多
</button>
完整的 Hono + HTMX 示例
// 服务端
app.get("/api/recommend", async (c) => {
const dish = await db
.select()
.from(dishes)
.orderBy(sql`random()`)
.limit(1)
.then(rows => rows[0]);
// 直接返回 HTML 片段
return c.html(`
<div class="recommendation" style="
padding: 16px;
border: 2px solid #3b82f6;
border-radius: 8px;
margin-top: 16px;
">
<h2>${dish.name}</h2>
<p>分类:${dish.category}</p>
<p>难度:${dish.difficulty}</p>
</div>
`);
});
性能对比
| 指标 | Next.js SPA | Hono + HTMX |
|---|---|---|
| JS 体积 | ~150KB | ~15KB(仅 HTMX) |
| 首屏时间 | 1.5-3s | 0.2-0.5s |
| 构建时间 | 10-30s | <1s |
| 服务器开销 | 较高 | 极低 |
| 学习曲线 | 中等 | 低 |
这个方案特别适合内容型网站、后台管理、工具类应用。如果你的项目不需要复杂的客户端交互,Hono + Drizzle + HTMX 是 2026 年最值得尝试的全栈方案之一。