这是一款高性能的JS/TS Runtime
, 在bun@1.2.*
后linux/MacOS
已可以逐步在生产环境应用,我用得早, 踩过一些内存泄漏的坑,值得高兴的是目前官方fix的差不多了,已稳定运行6个月未发生重启情况。⚠️保险起见建议还是采用的pm2
统一管理。win
开发环境使用它建议上安装wsl
,你会得到接近linux/MacOS
的开发体验。作为AI
后端不失为一种明智的选择。
为什么有nodejs了还要用它?
我不知道如何解释,这靠你自己评估。
Oh! 兄弟如果你写ts
的话请你在linux/MacOS
上试一试它是多么爽。如果你是一个特别谨慎的人且你不放心上生产,先在本地用它写脚本,部署时仍然用nodejs
执行。或先在ci/cd
接入它跑单元测试。等你逐渐对它了解并产生信任后再上生产不迟。
- 飞书文档介绍Bun
- glede-server 供兄弟们参考
- bun server的基座
- 本文是注册路由的极简写法, 装饰器的其它参数以及组合使用联系 1061393710@qq.com
Benchmark
- ⚡️
HTTP: 6~8x faster than
Express@5.1.0 - ⚡️
Websocket/SSE: 3~5x faster than
Nodejs@23.6.0
环境: MacOS; Intel-i5 2.9GHz; Memory-DDR4(2666Mhz) 32 GB
HTTP/WebSocket
SSE
如何用
初始化工程目录
# 首先你需要确保已经正确安装了bun
npm install -g bun
bun -v # 1.2.10
# 然后你可以使用 glede-init 工具便捷创建目录
bun x glede-init
# 进入你创建的目录,写路由即可
cd <your-project> && bun dev
注册Get
@GSD.Get('/')
handler(req: GledeBunRequest, data: GledeReqData) {
return {
code: 0,
data: {...}
};
}
注册Post
@GSD.Post('/')
handler(req: GledeBunRequest, data: GledeReqData) {
return {
code: 0,
data: {...}
};
}
注册WS
@GSD.WS('/')
handler(ws, message: string | Buffer) {
ws.send(data, true); // 发送字符串/二进制,第二个参数是否开启压缩
ws.sendBinary(data); // 明确声明发送二进制
ws.sendText(data, true); // 发送字符串数据
}
注册SSE
- 基于HTTP(GET/POST)
@SSE()
@GSD.Get('/') @GSD.Post('/')
handler(req: GledeBunRequest, data: GledeReqData) {
const { controller } = data;
controller.write('data: hello\n\n'); // 发送数据
// doSomething.
controller.close(); // 断开链接
}
路由树
- 启动服务器后,成功注册的路由默认在
logs/routers.txt
,例如:
├── api/
│ ├── address/
│ │ ├── add (POST)
│ │ ├── default (GET)
│ │ ├── del (GET)
│ │ ├── latest (GET)
│ │ ├── list (GET)
│ │ ├── name (GET)
│ │ ├── query (GET)
│ │ └── upd (POST)
│ ├── chat/
│ │ └── getSession (GET)
│ └── user/
│ ├── check (GET)
│ ├── login (POST)
│ ├── unregister (POST)
│ └── upd (POST)
├── chat/
│ ├── sse (GET, POST, SSE)
│ └── ws (GET, WS)
└── service/
└── kbm (OPTIONS, POST)