概述
4月1号(愚人节),Bun/包子
发布 1.1 版本,宣布支持 windows 平台👍。
接下来,我将用实际项目以及程序对比下。
名称 | 版本 |
---|---|
node | v21.4.0 |
bun | 1.1.2 |
测试机器配置如下:
处理器
11th Gen Intel® Core™ i5-11300H @ 3.10GHz 3.11 GHz机带 RAM
16.0 GB (15.8 GB 可用)
单包(传统)项目
源码地址👉 vue3-naive-starter
安装依赖
node_modules
目录总大小为 220MB,bun 安装依赖用时 14 秒,npm 为 28 秒。
启动/SERVE
我没有用专业的工具测试,凭感觉发现没有太多的差异😄。
打包
MONOREPO
bun 自带 workspaces 功能,本次使用的多 package 项目为:👉 格子表单/GRID-FORM👈
执行 JS 代码
本节数据与灵感来自 1brc
我用 1brc 仓库提供的代码,生成一份包含五百万条数据的文件,大小为 67.3MB
。
/**
* @typedef {Object} Item
* @property {Number} min - 最低气温
* @property {Number} max - 最高气温
* @property {Number} total - 总气温
*/
import { createReadStream } from 'fs'
const started = Date.now()
const stream = createReadStream('01.txt', {highWaterMark:1, encoding:'utf-8'})
const EOL = Buffer.from('\n')
let line = ""
const map = new Map()
const deal = ()=>{
let t = line.split(";")
let city = t[0]
let value = Number(t[1])
if(!map.has(city)){
map.set(city, {min: value, max:value, total: value })
}
else{
/**@type {Item} */
const item = map.get(city)
if(value < item.min) item.min = value
else if(value > item.max) item.max = value
item.total += value
}
line = ""
}
const onEnd = ()=> {
let time = Date.now() - started
console.debug(`处理完成,耗时 ${time} ms (${Math.floor(time/1000)} s)`)
console.debug(map)
}
stream.on('data', d=>{
if(d=='\n'){
deal()
}
else {
line += d
}
})
stream.on('end', onEnd)
总结
个人看法:
- bun 在 windows 平台还在初始阶段,会有一些兼容性问题,对前端项目友好,后端项目开发慎用
- 新项目可以考虑,在用项目不建议迁移