From b3dca1a271a31243dad15c97ddc166154b382cc6 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Fri, 23 Oct 2026 09:16:32 +0800 Subject: [PATCH] =?UTF-8?q?perf(=E5=88=A4=E9=A2=98):=20SQL=20=E9=A2=98?= =?UTF-8?q?=E6=AF=8F=E6=AC=A1=E5=88=A4=E9=A2=98=E5=B0=91=E7=AD=89=E7=BA=A6?= =?UTF-8?q?=2050ms=EF=BC=8C=E5=90=8E=E7=AB=AF=E8=B5=B7=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=BF=AB=E4=B8=80=E5=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 单二进制改用预编译字节码(--bytecode --format=esm)。SQL 判题每题都要起一次子进程, 单核实测从约 120ms 降到约 72ms;serve 起服务约 180ms → 100ms,内存不变,二进制大 8MB。 编译形态在仓库外实跑过:migrate / healthcheck / serve / worker 能起,C 题判对、 AST 规则判出 10、jieba 分词、SQL 子进程的判题与展示都和 dev 形态结果一致。 Co-Authored-By: Claude Opus 5.5 --- apps/api/CLAUDE.md | 4 ++++ apps/api/package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/api/CLAUDE.md b/apps/api/CLAUDE.md index b457550..a59f6f7 100644 --- a/apps/api/CLAUDE.md +++ b/apps/api/CLAUDE.md @@ -15,6 +15,10 @@ OJ2 的后端(`apps/api`)。这里只放后端专属的坑;全仓通用的 **改完这类代码,dev 和编译两种形态都要跑一遍。** 我吃过亏:只验了编译产物,dev 直接起不来。 +`build` 带 `--bytecode --format=esm`:每道 SQL 题都要起一次 `sql-child`,预编译字节码让它 +从约 120ms 降到约 72ms(单核实测),`serve` 起服务从约 180ms 降到约 100ms,内存不变, +代价是二进制大 8MB。去掉 `--format=esm` 会退回 CJS 输出,顶层 await 编不过。 + ## 路径解析看 `runtime.ts` 编译后 `import.meta.dir` 恒为 `/$bunfs/root`,往上三级就是文件系统根。 diff --git a/apps/api/package.json b/apps/api/package.json index cab3fc5..7ae17a1 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -9,7 +9,7 @@ "dev:worker": "bun --watch src/main.ts worker", "start": "bun src/main.ts serve", "worker": "bun src/main.ts worker", - "build": "bun build --compile --target=bun-linux-x64 src/main.ts --outfile ../../dist/oj2-api", + "build": "bun build --compile --bytecode --format=esm --target=bun-linux-x64 src/main.ts --outfile ../../dist/oj2-api", "seed:dev": "bun src/scripts/seed-dev.ts", "recount": "bun --env-file=../../.env src/main.ts recount", "rediagnose": "bun --env-file=../../.env src/main.ts rediagnose",