bun-v0.1.9
版本发布时间: 2022-08-18 16:49:36
oven-sh/bun最新发布版本:bun-v1.1.20(2024-07-13 14:04:45)
To upgrade:
bun upgrade
To install:
curl https://bun.sh/install | bash
If you have any problems upgrading
Run the install script (you can run it multiple times):
curl https://bun.sh/install | bash
What's new
- Numerous crashes fixed by @zhuzilin!! Incredible work.
- [Linux] Improved event loop reliability and reduced CPU usage for concurrent/async IO (affects
bun install
andfetch()
mostly) -
Bun.serve
gets about 20% faster outside of "hello world" benchmarks due to optimizing howHeaders
are copied/read and faster generated bindings -
require("buffer")
andrequire("process")
now point to Bun's implementation instead of a browserify polyfill (thanks @zhuzilin) - Fixed a bug that would cause
setTimeout
orsetInterval
to not keep the process alive (thanks @zhuzilin) - Updated to latest WebKit
- 6x - 10x faster
ptr()
inbun:ffi
JIT-optimized TextEncoder.encodeInto
can be a 1.5x perf boost up to around a 5x perf boost
The hash()
function in this microbenchmark calls ptr()
:
Internals
Bun learns how to JIT
DOMJIT
is a JavaScriptCore API that gives 3rd-party embedders low-level access to the JIT compiler/assembler to optimize native functions and getters/setters. Safari leverages DOMJIT to make commonly-accessed properties like element.parentNode
faster
Bun is beginning to use DOMJIT now, starting in two places:
-
ptr()
function inbun:ffi
-
TextEncoder.encodeInto
To better support Bun's usecase, I extended DOMJIT
to support Typed Array arguments, as well as added support for specifying more kinds of side effects that enable/disable optimizations:
- https://github.com/oven-sh/WebKit/commit/d2ef2fd828761778a3b04289563946354a457e29
- https://github.com/oven-sh/WebKit/commit/3262da8fd77667aaf95e75c7efa501dc135bc0ac
- https://github.com/oven-sh/WebKit/commit/4ac5b04047a53ce2363495a79770a2ae6d67761b#diff-90a5d15b3faae39b6e5075902ae5fd2e0b7f7f40bb0590f3e298e7715db048e5
Faster and more reliable JSC <> Zig bindings
At Bun's compile-time, Bun now code-generates C++ binding classes for JavaScript objects implemented in Zig. Previously, Bun mostly used the JavaScriptCore C API.
Using JavaScriptCore's C++ API improves performance and is important for making the garbage collector better aware of Bun's usage. But, writing bindings manually can be very repetitive.
Given a class definition in JavaScript like this:
define({
name: "Response",
construct: true,
finalize: true,
JSType: "0b11101110",
klass: {
json: {
fn: "constructJSON",
},
// rest of the code
},
proto: {
url: {
getter: "getURL",
cache: true,
},
text: { fn: "getText" },
json: { fn: "getJSON" },
arrayBuffer: { fn: "getArrayBuffer" },
blob: { fn: "getBlob" },
clone: { fn: "doClone", length: 1 },
// rest of the code
},
})
Bun generates corresponding:
- C++ classes
- Zig bindings with type checks that verify the expected ABI matches
This approach is inspired by WebIDL bindings which both Safari and Chromium use.
More reliable event loop on Linux
This screenshot is with a simulated bandwidth limit and no throttling of max http connections
Previously, bun had a tendency to hang in situations like this
What's Changed
- fix MD5 length and compile error by @zhuzilin in https://github.com/oven-sh/bun/pull/1050
- fix appendFile permission by @zhuzilin in https://github.com/oven-sh/bun/pull/1052
- Invalidate column name caches when the schema of table may change by @zhuzilin in https://github.com/oven-sh/bun/pull/1056
- refactor(src/tagged_pointer):
IntPrimtiive
->IntPrimitive
by @ryanrussell in https://github.com/oven-sh/bun/pull/1046 - Remove column name caches in js by @zhuzilin in https://github.com/oven-sh/bun/pull/1057
- [bun error] fix typo in markdown.ts by @eltociear in https://github.com/oven-sh/bun/pull/995
- [WIP] Native buffer module by @zhuzilin in https://github.com/oven-sh/bun/pull/1067
- Improve event loop reliability on Linux by @Jarred-Sumner in https://github.com/oven-sh/bun/pull/1066
- Add synthetic buffer module by @zhuzilin in https://github.com/oven-sh/bun/pull/1076
- Deps - Update libarchive by @jonacollazo in https://github.com/oven-sh/bun/pull/1078
- Fix active_task count for timeout tasks by @zhuzilin in https://github.com/oven-sh/bun/pull/1081
- Fix server segfault by making controller not early GC'ed by @zhuzilin in https://github.com/oven-sh/bun/pull/1090
- Add native process module by @zhuzilin in https://github.com/oven-sh/bun/pull/1095
New Contributors
- @jonacollazo made their first contribution in https://github.com/oven-sh/bun/pull/1078
Full Changelog: https://github.com/oven-sh/bun/compare/bun-v0.1.8...bun-v0.1.9
1、 bun-darwin-aarch64-profile.zip 14.18MB
2、 bun-darwin-aarch64.zip 13.32MB
3、 bun-darwin-x64-baseline-profile.zip 16.58MB
4、 bun-darwin-x64-baseline.zip 15.71MB
5、 bun-darwin-x64-profile.zip 16.93MB
6、 bun-darwin-x64.zip 16.06MB
7、 bun-linux-aarch64-profile.zip 50.8MB
8、 bun-linux-aarch64.zip 29.59MB
9、 bun-linux-x64-baseline-profile.zip 51.49MB
10、 bun-linux-x64-baseline.zip 31.34MB
11、 bun-linux-x64-profile.zip 51.99MB
12、 bun-linux-x64.zip 31.71MB