Skip to content

Commit

Permalink
perf(ext/node): improve Buffer.from(buffer) (#24352)
Browse files Browse the repository at this point in the history
Benchmark code from #24341.

```shellsession
$ deno run --allow-hrtime bench.mjs
6479.111583
$ target/release/deno run --allow-hrtime bench.mjs
962.753875
$ node bench.mjs
855.174875
```
  • Loading branch information
0f-0b committed Jun 26, 2024
1 parent 77ba001 commit 86e0292
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 10 deletions.
10 changes: 4 additions & 6 deletions ext/node/polyfills/internal/buffer.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -220,12 220,9 @@ function fromString(string, encoding) {
return buf;
}

function fromArrayLike(array) {
const length = array.length < 0 ? 0 : checked(array.length) | 0;
const buf = createBuffer(length);
for (let i = 0; i < length; i = 1) {
buf[i] = array[i] & 255;
}
function fromArrayLike(obj) {
const buf = new Uint8Array(obj);
Object.setPrototypeOf(buf, Buffer.prototype);
return buf;
}

Expand All @@ -234,6 231,7 @@ function fromObject(obj) {
if (typeof obj.length !== "number") {
return createBuffer(0);
}

return fromArrayLike(obj);
}

Expand Down
11 changes: 7 additions & 4 deletions tests/unit_node/buffer_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -534,15 534,18 @@ Deno.test({
});

Deno.test({
name: "[node/buffer] Buffer from another buffer creates a Buffer",
name: "[node/buffer] Buffer from another buffer creates a copy",
fn() {
const buffer: Buffer = Buffer.from(Buffer.from("test"));
assertEquals(buffer.length, 4, "Buffer length should be 4");
const buffer1: Buffer = Buffer.from("test");
const buffer2: Buffer = Buffer.from(buffer1);
assertEquals(buffer2.length, 4, "Buffer length should be 4");
assertEquals(
buffer.toString(),
buffer2.toString(),
"test",
"Buffer to string should recover the string",
);
buffer1[0] = 114;
assertEquals(buffer2.toString(), "test", "Buffer should be a copy");
},
});

Expand Down

0 comments on commit 86e0292

Please sign in to comment.