bun的响应速度比rust快,表里三十多万条数据,我直接全查了。
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() }