为什么Bun查询数据库接口响应比Rust还快

bun的响应速度比rust快,表里三十多万条数据,我直接全查了。

javascript 复制代码
app.get("/", async (c) => {
  // ===== 1. 查询计时 =====
  const t1 = Date.now();
  const weightRows = await db.execute(sql`
      SELECT *
      FROM "weight"
      ORDER BY "uuid" ASC
    `);
  const queryTime = Date.now() - t1;
  // ===== 2. 纯序列化计时(手动 JSON.stringify) =====
  const t2 = Date.now();
  const jsonString = JSON.stringify(weightRows);
  const serializeTime = Date.now() - t2;

  console.log(
    `[性能] 查询 ${queryTime}ms | 序列化 ${serializeTime}ms | 行数 ${weightRows.length}`,
  );

  // ===== 3. 返回手动序列化结果,避免 c.json 二次序列化 =====
  return c.body(jsonString, 200, {
    "Content-Type": "application/json; charset=utf-8",
    // 可选:告诉客户端内容长度,帮助进度条
    "Content-Length": Buffer.byteLength(jsonString).toString(),
  });
});
rust 复制代码
async fn root(State(state): State<SharedState>) -> impl IntoResponse {
    let start = Instant::now();

    let rows = sqlx::query_as::<_, WeightRawRow>("SELECT * FROM weight ORDER BY uuid")
        .fetch_all(&state.pool)
        .await
        .unwrap();

    let query_time = start.elapsed();
    println!(
        "查询完成: {}ms, 行数: {}",
        query_time.as_millis(),
        rows.len()
    );

    let serialize_start = Instant::now();
    let json_bytes = serde_json::to_vec(&rows).unwrap();
    let serialize_time = serialize_start.elapsed();
    println!("序列化耗时: {}ms", serialize_time.as_millis());

    let total_time = start.elapsed();
    println!("总耗时: {}ms", total_time.as_millis());

    Response::builder()
        .header("content-type", "application/json")
        .body(Body::from(json_bytes))
        .unwrap()
}
相关推荐
Moment2 分钟前
为什么越来越多开发者开始用 PostgreSQL?
前端·后端·面试
YHL3 分钟前
🚀 从 SPA 到 Next.js 全栈:一个大前端的 SEO 突围笔记
前端·后端
颜进强5 分钟前
从零跑通一套 WorkBuddy Skill 骨架:【能跑通+代码】生成HTML报告实战
前端·后端·ai编程
Shinomiya6 分钟前
Mysql之表的约束详解
后端
Java内核笔记10 分钟前
Spring Boot 4 与 Spring AI 2.0 深度集成:ChatClient、Advisor 链与 MCP(源码级实战)
java·后端
吃饱了得干活12 分钟前
一个订单的奇幻漂流:RabbitMQ 五大难题实战
spring boot·后端·rabbitmq
她的男孩16 分钟前
账号锁定配了"错 4 次锁 30 分钟",我连错 100 次一次没锁上:扒完 4091 行认证源码,找到 5 个坑
java·后端·架构
Methy20 分钟前
一次线上死锁排查:std::list::size () 居然是 O (n)?
c++·后端
MacroZheng29 分钟前
Redis官方发布高颜值可视化工具,功能更是强的离谱!
java·redis·后端
回家路上绕了弯1 小时前
为什么 AI 写代码时,总喜欢“防御性编程”?
后端