mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
❯ mem bun --smol response-arrayBuffer.mjs cpu: Apple M1 Max runtime: bun 0.6.15 (arm64-darwin) benchmark time (avg) (min … max) p75 p99 p995 --------------------------------------------------------------------------------------------------- ----------------------------- new Response().arrayBuffer() (new string each call, latin1) 12.9 µs/iter (625 ns … 4.18 ms) 1 µs 567.17 µs 711.79 µs new Response().arrayBuffer() (new string each call, utf16) 12.85 µs/iter (1.67 µs … 1.56 ms) 2.17 µs 462.75 µs 621.13 µs new Response().arrayBuffer() (existing string, latin1) 6.53 µs/iter (6.21 µs … 7.07 µs) 6.64 µs 7.07 µs 7.07 µs Peak memory usage: 49 MB bun on jarred/memory-leak-fix took 2s ❯ mem bun response-arrayBuffer.mjs cpu: Apple M1 Max runtime: bun 0.6.15 (arm64-darwin) benchmark time (avg) (min … max) p75 p99 p995 --------------------------------------------------------------------------------------------------- ----------------------------- new Response().arrayBuffer() (new string each call, latin1) 1.2 µs/iter (1.04 µs … 1.42 µs) 1.22 µs 1.42 µs 1.42 µs new Response().arrayBuffer() (new string each call, utf16) 2.74 µs/iter (2.42 µs … 6.37 µs) 2.68 µs 6.37 µs 6.37 µs new Response().arrayBuffer() (existing string, latin1) 746.37 ns/iter (643.82 ns … 1.04 µs) 776.11 ns 1.04 µs 1.04 µs Peak memory usage: 104 MB bun on jarred/memory-leak-fix took 2s ❯ mem ~/.bun/bin/bun response-arrayBuffer.mjs cpu: Apple M1 Max runtime: bun 0.6.15 (arm64-darwin) benchmark time (avg) (min … max) p75 p99 p995 --------------------------------------------------------------------------------------------------- ----------------------------- new Response().arrayBuffer() (new string each call, latin1) 1.69 µs/iter (1.56 µs … 2.1 µs) 1.73 µs 2.1 µs 2.1 µs new Response().arrayBuffer() (new string each call, utf16) 2.65 µs/iter (2.47 µs … 3.17 µs) 2.69 µs 3.17 µs 3.17 µs new Response().arrayBuffer() (existing string, latin1) 667.67 ns/iter (547.67 ns … 1.28 µs) 694.21 ns 1.28 µs 1.28 µs Peak memory usage: 2735 MB bun on jarred/memory-leak-fix took 2s ❯ mem ~/.bun/bin/bun --smol response-arrayBuffer.mjs cpu: Apple M1 Max runtime: bun 0.6.15 (arm64-darwin) benchmark time (avg) (min … max) p75 p99 p995 --------------------------------------------------------------------------------------------------- ----------------------------- new Response().arrayBuffer() (new string each call, latin1) 13.51 µs/iter (541 ns … 3.2 ms) 1.92 µs 553.42 µs 709.92 µs new Response().arrayBuffer() (new string each call, utf16) 13.07 µs/iter (1.71 µs … 3.43 ms) 2.13 µs 451.21 µs 651.67 µs new Response().arrayBuffer() (existing string, latin1) 6.25 µs/iter (5.79 µs … 6.81 µs) 6.4 µs 6.81 µs 6.81 µs Peak memory usage: 292 MB Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
137 lines
6.2 KiB
JavaScript
137 lines
6.2 KiB
JavaScript
// This snippet mostly exists to reproduce a memory leak
|
|
//
|
|
import { bench, run } from "mitata";
|
|
|
|
const obj = {
|
|
"id": 1296269,
|
|
"node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5",
|
|
"name": "Hello-World",
|
|
"full_name": "octocat/Hello-World",
|
|
"owner": {
|
|
"login": "octocat",
|
|
"id": 1,
|
|
"node_id": "MDQ6VXNlcjE=",
|
|
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
|
|
"gravatar_id": "",
|
|
"url": "https://api.github.com/users/octocat",
|
|
"html_url": "https://github.com/octocat",
|
|
"followers_url": "https://api.github.com/users/octocat/followers",
|
|
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
|
|
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
|
|
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
|
|
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
|
|
"organizations_url": "https://api.github.com/users/octocat/orgs",
|
|
"repos_url": "https://api.github.com/users/octocat/repos",
|
|
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
|
|
"received_events_url": "https://api.github.com/users/octocat/received_events",
|
|
"type": "User",
|
|
"site_admin": false,
|
|
},
|
|
"private": false,
|
|
"html_url": "https://github.com/octocat/Hello-World",
|
|
"description": "This your first repo!",
|
|
"fork": false,
|
|
"url": "https://api.github.com/repos/octocat/Hello-World",
|
|
"archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}",
|
|
"assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}",
|
|
"blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}",
|
|
"branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}",
|
|
"collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}",
|
|
"comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}",
|
|
"commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}",
|
|
"compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}",
|
|
"contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}",
|
|
"contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors",
|
|
"deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments",
|
|
"downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads",
|
|
"events_url": "https://api.github.com/repos/octocat/Hello-World/events",
|
|
"forks_url": "https://api.github.com/repos/octocat/Hello-World/forks",
|
|
"git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}",
|
|
"git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}",
|
|
"git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}",
|
|
"git_url": "git:github.com/octocat/Hello-World.git",
|
|
"issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}",
|
|
"issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}",
|
|
"issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}",
|
|
"keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}",
|
|
"labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}",
|
|
"languages_url": "https://api.github.com/repos/octocat/Hello-World/languages",
|
|
"merges_url": "https://api.github.com/repos/octocat/Hello-World/merges",
|
|
"milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}",
|
|
"notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}",
|
|
"pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}",
|
|
"releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}",
|
|
"ssh_url": "git@github.com:octocat/Hello-World.git",
|
|
"stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers",
|
|
"statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}",
|
|
"subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers",
|
|
"subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription",
|
|
"tags_url": "https://api.github.com/repos/octocat/Hello-World/tags",
|
|
"teams_url": "https://api.github.com/repos/octocat/Hello-World/teams",
|
|
"trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}",
|
|
"clone_url": "https://github.com/octocat/Hello-World.git",
|
|
"mirror_url": "git:git.example.com/octocat/Hello-World",
|
|
"hooks_url": "https://api.github.com/repos/octocat/Hello-World/hooks",
|
|
"svn_url": "https://svn.github.com/octocat/Hello-World",
|
|
"homepage": "https://github.com",
|
|
"language": null,
|
|
"forks_count": 9,
|
|
"stargazers_count": 80,
|
|
"watchers_count": 80,
|
|
"size": 108,
|
|
"default_branch": "master",
|
|
"open_issues_count": 0,
|
|
"is_template": false,
|
|
"topics": ["octocat", "atom", "electron", "api"],
|
|
"has_issues": true,
|
|
"has_projects": true,
|
|
"has_wiki": true,
|
|
"has_pages": false,
|
|
"has_downloads": true,
|
|
"has_discussions": false,
|
|
"archived": false,
|
|
"disabled": false,
|
|
"visibility": "public",
|
|
"pushed_at": "2011-01-26T19:06:43Z",
|
|
"created_at": "2011-01-26T19:01:12Z",
|
|
"updated_at": "2011-01-26T19:14:43Z",
|
|
"permissions": {
|
|
"admin": false,
|
|
"push": false,
|
|
"pull": true,
|
|
},
|
|
"security_and_analysis": {
|
|
"advanced_security": {
|
|
"status": "enabled",
|
|
},
|
|
"secret_scanning": {
|
|
"status": "enabled",
|
|
},
|
|
"secret_scanning_push_protection": {
|
|
"status": "disabled",
|
|
},
|
|
},
|
|
};
|
|
|
|
// Force the string to be 8bit
|
|
const str = String.fromCharCode(
|
|
...JSON.stringify(obj)
|
|
.split("")
|
|
.map(a => a.charCodeAt(0)),
|
|
);
|
|
var i = 0;
|
|
|
|
bench("new Response().arrayBuffer() (new string each call, latin1)", async () => {
|
|
return await new Response(str + i++).arrayBuffer();
|
|
});
|
|
|
|
bench("new Response().arrayBuffer() (new string each call, utf16)", async () => {
|
|
return await new Response(str + i++ + "😊").arrayBuffer();
|
|
});
|
|
|
|
bench("new Response().arrayBuffer() (existing string, latin1)", async () => {
|
|
return await new Response(str).arrayBuffer();
|
|
});
|
|
|
|
await run();
|