为什么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()
}
相关推荐
geovindu1 小时前
go: Enumeration Algorithm
开发语言·后端·算法·golang·枚举算法
雪隐2 小时前
个人电脑玩AI-10让5060 Ti给你打工——ComfyUI,我差点被它劝退三次
人工智能·后端
工具派2 小时前
写代码时,我把这个本地 AI Commit Message 生成器接进了工作流
前端·后端
犀利豆2 小时前
AI 时代使用 Obsidian 作为 IDE
人工智能·后端
用户7917286761973 小时前
在 opencode 中使用 opencode-plugin-loop 插件完全指南
后端
用户3126874877203 小时前
MyBatis-Plus 动态分表实战:基于 DynamicTableNameInnerInterceptor 的多端数据隔离方案
后端
干到60岁退休的码农3 小时前
SpringBoot整合Mybatis-plus
spring boot·后端·mybatis
掘金者阿豪3 小时前
从Oracle迁到金仓,第一个月踩的最大的坑就是它
前端·后端
aramae3 小时前
C++11:现代C++的里程碑
c语言·开发语言·c++·windows·git·后端