From fbea36d2e50d50905e8107477657d74a95951d4e Mon Sep 17 00:00:00 2001 From: MK Date: Fri, 16 Oct 2026 21:22:55 +0800 Subject: [PATCH 01/11] perf(cli): reduce release binary size and compare preview artifacts --- .github/actions/build-upstream/action.yml | 5 + .github/actions/build-windows-cli/action.yml | 14 +- .../scripts/__tests__/preview-binary-size.mjs | 223 ++++++++ .github/scripts/preview-binary-size.mjs | 224 ++++++++ .../workflows/publish-preview-register.yml | 66 +++ .github/workflows/publish-preview.yml | 2 + bench/binary-size/README.md | 282 ++++++++++ bench/binary-size/analyze-macho.py | 93 ++++ bench/binary-size/benchmark-napi.cjs | 54 ++ .../compression-benchmark-rounds.json | 497 ++++++++++++++++++ .../evidence/macos-napi-symbol-estimates.json | 422 +++++++++++++++ .../evidence/macos-vp-symbol-estimates.json | 392 ++++++++++++++ bench/binary-size/evidence/vp-help-smoke.json | 26 + bench/binary-size/measure.cjs | 21 + .../embedded-artifact-compression.patch | 227 ++++++++ .../prototypes/pm-cli-deduplication.patch | 80 +++ bench/binary-size/results.json | 429 +++++++++++++++ 17 files changed, 3055 insertions(+), 2 deletions(-) create mode 100644 .github/scripts/__tests__/preview-binary-size.mjs create mode 100644 .github/scripts/preview-binary-size.mjs create mode 100644 bench/binary-size/README.md create mode 100644 bench/binary-size/analyze-macho.py create mode 100644 bench/binary-size/benchmark-napi.cjs create mode 100644 bench/binary-size/evidence/compression-benchmark-rounds.json create mode 100644 bench/binary-size/evidence/macos-napi-symbol-estimates.json create mode 100644 bench/binary-size/evidence/macos-vp-symbol-estimates.json create mode 100644 bench/binary-size/evidence/vp-help-smoke.json create mode 100644 bench/binary-size/measure.cjs create mode 100644 bench/binary-size/prototypes/embedded-artifact-compression.patch create mode 100644 bench/binary-size/prototypes/pm-cli-deduplication.patch create mode 100644 bench/binary-size/results.json diff --git a/.github/actions/build-upstream/action.yml b/.github/actions/build-upstream/action.yml index e43ba6c600..7c7b5da456 100644 --- a/.github/actions/build-upstream/action.yml +++ b/.github/actions/build-upstream/action.yml @@ -165,6 +165,7 @@ runs: run: | pnpm exec napi build --use-napi-cross --target ${INPUTS_TARGET} --profile "$INPUTS_PROFILE" -p vp_global_cli env: + CARGO_PROFILE_RELEASE_OPT_LEVEL: z INPUTS_PROFILE: ${{ inputs.profile }} TARGET_CC: clang TARGET_CFLAGS: ${{ contains(inputs.target, 'aarch64') && '-D_BSD_SOURCE' || '' }} @@ -177,6 +178,7 @@ runs: run: | pnpm exec napi build -x --target ${INPUTS_TARGET} --profile "$INPUTS_PROFILE" -p vp_global_cli env: + CARGO_PROFILE_RELEASE_OPT_LEVEL: z INPUTS_PROFILE: ${{ inputs.profile }} TARGET_CC: clang TARGET_CFLAGS: ${{ contains(inputs.target, 'aarch64') && '-D_BSD_SOURCE' || '' }} @@ -188,6 +190,9 @@ runs: shell: bash run: cargo build --profile "$INPUTS_PROFILE" --target ${INPUTS_TARGET} -p vp_global_cli env: + # Size-optimize the standalone executable and its release dependencies. + # Keep this step-local so NAPI retains its performance-oriented profile. + CARGO_PROFILE_RELEASE_OPT_LEVEL: z INPUTS_PROFILE: ${{ inputs.profile }} INPUTS_TARGET: ${{ inputs.target }} diff --git a/.github/actions/build-windows-cli/action.yml b/.github/actions/build-windows-cli/action.yml index de766c3e4d..b609cd0438 100644 --- a/.github/actions/build-windows-cli/action.yml +++ b/.github/actions/build-windows-cli/action.yml @@ -85,10 +85,20 @@ runs: # hatch is needed. CXXFLAGS: -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH - - name: Build Rust CLI binaries + - name: Build Rust CLI binary if: steps.binaries-cache.outputs.cache-hit != 'true' shell: bash - run: cargo xwin build --profile "$INPUTS_PROFILE" --target x86_64-pc-windows-msvc -p vp_global_cli -p vp_installer + run: cargo xwin build --profile "$INPUTS_PROFILE" --target x86_64-pc-windows-msvc -p vp_global_cli + env: + CARGO_PROFILE_RELEASE_OPT_LEVEL: z + INPUTS_PROFILE: ${{ inputs.profile }} + XWIN_ACCEPT_LICENSE: '1' + CXXFLAGS: -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH + + - name: Build installer binary + if: steps.binaries-cache.outputs.cache-hit != 'true' + shell: bash + run: cargo xwin build --profile "$INPUTS_PROFILE" --target x86_64-pc-windows-msvc -p vp_installer env: INPUTS_PROFILE: ${{ inputs.profile }} XWIN_ACCEPT_LICENSE: '1' diff --git a/.github/scripts/__tests__/preview-binary-size.mjs b/.github/scripts/__tests__/preview-binary-size.mjs new file mode 100644 index 0000000000..6718cdddc8 --- /dev/null +++ b/.github/scripts/__tests__/preview-binary-size.mjs @@ -0,0 +1,223 @@ +import assert from 'node:assert/strict'; +import { execFileSync } from 'node:child_process'; +import { mkdir, mkdtemp, readFile, rm, symlink, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { dirname, join } from 'node:path'; +import { test } from 'node:test'; + +import { + binaryArtifacts, + comparePreviewBinaries, + createReleaseLoader, + measureBinary, + postSizeComment, + renderSizeReport, + targets, +} from '../preview-binary-size.mjs'; + +const release = { tag_name: 'v1.3.0', draft: false, prerelease: false, assets: [] }; +const headSha = 'a'.repeat(40); +const runUrl = 'https://github.com/voidzero-dev/vite-plus/actions/runs/123'; + +async function temporaryDirectory(t) { + const directory = await mkdtemp(join(tmpdir(), 'preview-size-test-')); + t.after(() => rm(directory, { recursive: true, force: true })); + return directory; +} + +test('compares every shipped binary without running preview content', async (t) => { + const artifactDirectory = await temporaryDirectory(t); + const payload = Buffer.from('This is not executable code.\n'.repeat(80)); + const artifacts = binaryArtifacts(); + const matrix = await readFile( + new URL('../../workflows/reusable-release-build.yml', import.meta.url), + 'utf8', + ); + assert.deepEqual( + targets.map(([target]) => target).sort(), + [...matrix.matchAll(/- target: (\S+)/g)].map((match) => match[1]).sort(), + ); + assert.equal(artifacts.length, 20); + for (const artifact of artifacts) { + const path = join(artifactDirectory, artifact.path); + await mkdir(dirname(path), { recursive: true }); + await writeFile(path, payload); + } + const requested = []; + const body = await comparePreviewBinaries({ + release, + artifactDirectory, + headSha, + runUrl, + loadRelease: async (artifact) => { + requested.push(artifact.path); + return Buffer.concat([payload, payload]); + }, + }); + assert.equal(requested.length, 20); + assert.equal((body.match(/-50\.00%/g) ?? []).length, 20); + assert.match(body, /gzip -9 sizes/); + assert.match(body, /v1\.3\.0/); + for (const artifact of artifacts) assert.ok(body.includes(artifact.name)); +}); + +test('reports increases, unchanged sizes, and unavailable release binaries', () => { + const body = renderSizeReport({ + release, + headSha, + runUrl, + rows: [ + { name: 'Increased', baseline: { raw: 100, gzip: 50 }, preview: { raw: 150, gzip: 75 } }, + { name: 'Unchanged', baseline: { raw: 100, gzip: 50 }, preview: { raw: 100, gzip: 50 } }, + { name: 'New', baseline: null, preview: { raw: 100, gzip: 50 } }, + ], + }); + assert.match(body, /\+50 B \(\+50\.00%\)/); + assert.match(body, /0 B \(0\.00%\)/); + assert.match(body, /New \| — \| 100 B \| Not in release/); + assert.throws(() => measureBinary(Buffer.alloc(0)), /empty/); + assert.throws(() => renderSizeReport({ release: { ...release, prerelease: true } }), /stable/); + assert.throws(() => renderSizeReport({ release, headSha: 'invalid' }), /commit/); +}); + +test('fails on missing preview binaries and refuses symbolic links', async (t) => { + const artifactDirectory = await temporaryDirectory(t); + const options = { release, artifactDirectory, headSha, runUrl, loadRelease: async () => null }; + await assert.rejects(comparePreviewBinaries(options), { code: 'ENOENT' }); + const first = join(artifactDirectory, binaryArtifacts()[0].path); + await mkdir(dirname(first), { recursive: true }); + const other = join(artifactDirectory, 'other'); + await writeFile(other, 'unrelated file'); + await symlink(other, first); + await assert.rejects(comparePreviewBinaries(options), /regular preview binary/); +}); + +test('loads matching release archives and exact-version npm binaries without installation', async (t) => { + const directory = await temporaryDirectory(t); + const payload = Buffer.from('native binary bytes'); + await mkdir(join(directory, 'package')); + await writeFile(join(directory, 'package/vite-plus.darwin-arm64.node'), payload); + await writeFile(join(directory, 'vp.exe'), payload); + await writeFile(join(directory, 'vp-shim.exe'), payload); + const tgz = join(directory, 'napi.tgz'); + const zip = join(directory, 'cli.zip'); + execFileSync('tar', ['-czf', tgz, '-C', directory, 'package']); + execFileSync('zip', ['-q', zip, 'vp.exe', 'vp-shim.exe'], { cwd: directory }); + const responses = new Map([ + [ + 'https://registry.npmjs.org/%40voidzero-dev%2Fvite-plus-darwin-arm64/1.3.0', + JSON.stringify({ + name: '@voidzero-dev/vite-plus-darwin-arm64', + version: '1.3.0', + dist: { tarball: 'https://registry.npmjs.org/native.tgz' }, + }), + ], + ['https://registry.npmjs.org/native.tgz', await readFile(tgz)], + [ + `https://github.com/voidzero-dev/vite-plus/releases/download/v1.3.0/vp-x86_64-pc-windows-msvc.zip`, + await readFile(zip), + ], + ]); + const requests = []; + const originalFetch = globalThis.fetch; + t.after(() => { + globalThis.fetch = originalFetch; + }); + globalThis.fetch = async (url) => { + requests.push(url); + return responses.has(url) + ? new Response(responses.get(url)) + : new Response('', { status: 404 }); + }; + const loader = createReleaseLoader( + { + ...release, + assets: [{ name: 'vp-x86_64-pc-windows-msvc.zip' }], + }, + directory, + ); + const artifacts = binaryArtifacts(); + for (const path of [ + 'vite-plus-native-aarch64-apple-darwin/vite-plus.darwin-arm64.node', + 'vp-global-cli-x86_64-pc-windows-msvc/vp.exe', + 'vp-global-cli-x86_64-pc-windows-msvc/vp-shim.exe', + ]) { + assert.deepEqual(await loader(artifacts.find((artifact) => artifact.path === path)), payload); + } + assert.equal(requests.filter((url) => url.endsWith('.zip')).length, 1); + assert.equal( + await loader(artifacts.find((artifact) => artifact.package?.endsWith('darwin-x64'))), + null, + ); + assert.equal( + await loader(artifacts.find((artifact) => artifact.asset?.startsWith('vp-setup-'))), + null, + ); + responses.set( + 'https://registry.npmjs.org/%40voidzero-dev%2Fvite-plus-darwin-arm64/1.3.0', + JSON.stringify({ name: 'wrong', version: '1.3.0' }), + ); + await assert.rejects(loader(artifacts[1]), /Unexpected npm package/); +}); + +function commentFixture() { + const writes = []; + const pr = { state: 'open', head: { sha: headSha }, labels: [{ name: 'preview-build' }] }; + const comments = []; + return { + pr, + comments, + writes, + args: { + github: { + rest: { + pulls: { get: async () => ({ data: pr }) }, + issues: { + listComments: () => {}, + createComment: async (request) => writes.push({ action: 'create', ...request }), + updateComment: async (request) => writes.push({ action: 'update', ...request }), + }, + }, + paginate: async () => comments, + }, + context: { + repo: { owner: 'voidzero-dev', repo: 'vite-plus' }, + payload: { workflow_run: { head_sha: headSha } }, + }, + core: { info: () => {} }, + prNumber: 123, + body: '\nreport', + }, + }; +} + +test('creates one report and updates only the bot-owned size comment', async () => { + const { args, comments, writes } = commentFixture(); + comments.push({ id: 1, user: { login: 'contributor' }, body: args.body }); + await postSizeComment(args); + assert.equal(writes[0].action, 'create'); + assert.equal(writes[0].issue_number, 123); + comments.push({ id: 2, user: { login: 'github-actions[bot]' }, body: args.body }); + await postSizeComment(args); + assert.equal(writes[1].action, 'update'); + assert.equal(writes[1].comment_id, 2); +}); + +test('does not post if the PR advances, closes, or loses its preview label', async () => { + for (const change of [ + (pr) => { + pr.head.sha = 'b'.repeat(40); + }, + (pr) => { + pr.state = 'closed'; + }, + (pr) => { + pr.labels = []; + }, + ]) { + const { args, pr, writes } = commentFixture(); + change(pr); + await postSizeComment(args); + assert.deepEqual(writes, []); + } +}); diff --git a/.github/scripts/preview-binary-size.mjs b/.github/scripts/preview-binary-size.mjs new file mode 100644 index 0000000000..3554700da5 --- /dev/null +++ b/.github/scripts/preview-binary-size.mjs @@ -0,0 +1,224 @@ +import { execFileSync } from 'node:child_process'; +import { lstat, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { gzipSync } from 'node:zlib'; + +const marker = ''; +const repository = 'https://github.com/voidzero-dev/vite-plus'; +const maxBytes = 128 * 1024 ** 2; + +export const targets = [ + ['aarch64-apple-darwin', 'darwin-arm64', 'macOS ARM64'], + ['x86_64-apple-darwin', 'darwin-x64', 'macOS x64'], + ['aarch64-unknown-linux-gnu', 'linux-arm64-gnu', 'Linux ARM64 GNU'], + ['aarch64-unknown-linux-musl', 'linux-arm64-musl', 'Linux ARM64 musl'], + ['x86_64-unknown-linux-gnu', 'linux-x64-gnu', 'Linux x64 GNU'], + ['x86_64-unknown-linux-musl', 'linux-x64-musl', 'Linux x64 musl'], + ['x86_64-pc-windows-msvc', 'win32-x64-msvc', 'Windows x64'], + ['aarch64-pc-windows-msvc', 'win32-arm64-msvc', 'Windows ARM64'], +]; + +export function binaryArtifacts() { + return targets.flatMap(([target, platform, label]) => { + const windows = platform.startsWith('win32'); + const archive = `vp-${target}.${windows ? 'zip' : 'tar.gz'}`; + const cli = (name, member) => ({ + name: `${name} (${label})`, + path: `vp-global-cli-${target}/${member}`, + asset: archive, + member, + }); + return [ + cli('`vp`', windows ? 'vp.exe' : 'vp'), + { + name: `NAPI (${label})`, + path: `vite-plus-native-${target}/vite-plus.${platform}.node`, + package: `@voidzero-dev/vite-plus-${platform}`, + member: `package/vite-plus.${platform}.node`, + }, + ...(windows + ? [ + cli('Trampoline', 'vp-shim.exe'), + { + name: `Installer (${label})`, + path: `vp-setup-${target}/vp-setup.exe`, + asset: `vp-setup-${target}.exe`, + }, + ] + : []), + ]; + }); +} + +function releaseVersion(release) { + if (release.draft || release.prerelease || !/^v\d+\.\d+\.\d+$/.test(release.tag_name)) { + throw new Error('Expected a stable Vite+ release tag'); + } + return release.tag_name.slice(1); +} + +export function measureBinary(bytes) { + if (bytes.length === 0 || bytes.length > maxBytes) { + throw new Error('Binary is empty or exceeds the size limit'); + } + return { raw: bytes.length, gzip: gzipSync(bytes, { level: 9 }).length }; +} + +async function download(url, { allowMissing = false } = {}) { + const response = await fetch(url, { signal: AbortSignal.timeout(120_000) }); + if (allowMissing && response.status === 404) return null; + if (!response.ok) throw new Error(`Download failed (${response.status}): ${url}`); + const chunks = []; + let size = 0; + for await (const chunk of response.body) { + size += chunk.length; + if (size > maxBytes) throw new Error(`Download exceeds the size limit: ${url}`); + chunks.push(chunk); + } + return Buffer.concat(chunks); +} + +// Only release archives pass through tar/unzip. Preview binaries are read as +// bytes, never executed, loaded as addons, or installed as packages. +export function createReleaseLoader(release, directory) { + const version = releaseVersion(release); + const downloads = new Map(); + async function cachedDownload(url) { + if (!downloads.has(url)) downloads.set(url, download(url)); + return downloads.get(url); + } + return async (artifact) => { + let bytes; + let zip = false; + if (artifact.package) { + const metadataBytes = await download( + `https://registry.npmjs.org/${encodeURIComponent(artifact.package)}/${version}`, + { allowMissing: true }, + ); + if (!metadataBytes) return null; + const metadata = JSON.parse(metadataBytes.toString('utf8')); + if (metadata.name !== artifact.package || metadata.version !== version) { + throw new Error(`Unexpected npm package: ${artifact.package}@${version}`); + } + const url = new URL(metadata.dist.tarball); + if (url.protocol !== 'https:' || url.host !== 'registry.npmjs.org') { + throw new Error('Expected an npm registry tarball'); + } + bytes = await cachedDownload(url.href); + } else { + if (!release.assets.some((asset) => asset.name === artifact.asset)) return null; + bytes = await cachedDownload( + `${repository}/releases/download/${release.tag_name}/${artifact.asset}`, + ); + zip = artifact.asset.endsWith('.zip'); + } + if (!artifact.member) return bytes; + const options = { maxBuffer: maxBytes, timeout: 30_000 }; + if (zip) { + const archive = join(directory, artifact.asset); + await writeFile(archive, bytes); + return execFileSync('unzip', ['-p', archive, artifact.member], options); + } + return execFileSync('tar', ['-xzOf', '-', artifact.member], { ...options, input: bytes }); + }; +} + +function formatSize(bytes, signed = false) { + const absolute = Math.abs(bytes); + const sign = bytes < 0 ? '-' : signed && bytes > 0 ? '+' : ''; + if (absolute >= 1024 ** 2) return `${sign}${(absolute / 1024 ** 2).toFixed(2)} MiB`; + if (absolute >= 1024) return `${sign}${(absolute / 1024).toFixed(2)} KiB`; + return `${sign}${absolute} B`; +} + +function formatDelta(base, preview) { + const delta = preview - base; + return `${formatSize(delta, true)} (${delta > 0 ? '+' : ''}${((delta / base) * 100).toFixed(2)}%)`; +} + +export function renderSizeReport({ release, headSha, runUrl, rows }) { + releaseVersion(release); + if (!/^[a-f0-9]{40}$/.test(headSha)) throw new Error('Invalid preview commit'); + const table = (format) => [ + '| Binary | Latest release | Preview | Change |', + '| --- | ---: | ---: | ---: |', + ...rows.map(({ name, baseline, preview }) => + baseline + ? `| ${name} | ${formatSize(baseline[format])} | ${formatSize(preview[format])} | ${formatDelta(baseline[format], preview[format])} |` + : `| ${name} | — | ${formatSize(preview[format])} | Not in release |`, + ), + ]; + return [ + marker, + '', + `### Preview binary sizes (\`${headSha.slice(0, 7)}\`)`, + '', + `Compared with the latest stable release, [\`${release.tag_name}\`](${repository}/releases/tag/${release.tag_name}). [Preview build](${runUrl}).`, + 'Each row measures one binary. Negative changes mean a smaller preview binary.', + '', + ...table('raw'), + '', + '
', + 'gzip -9 sizes', + '', + ...table('gzip'), + '', + '
', + '', + 'Raw sizes are uncompressed file sizes. gzip sizes recompress each binary at level 9; they are not package or download archive sizes.', + 'The baseline uses published release files, including NAPI packages from npm at the same version. Build versions and toolchains can affect the difference.', + ].join('\n'); +} + +export async function comparePreviewBinaries({ + release, + artifactDirectory, + headSha, + runUrl, + loadRelease, +}) { + releaseVersion(release); + const directory = await mkdtemp(join(tmpdir(), 'vp-release-size-')); + try { + loadRelease ??= createReleaseLoader(release, directory); + const rows = []; + for (const artifact of binaryArtifacts()) { + const path = join(artifactDirectory, artifact.path); + const info = await lstat(path); + if (!info.isFile() || info.size === 0 || info.size > maxBytes) { + throw new Error(`Expected a regular preview binary: ${artifact.path}`); + } + const preview = measureBinary(await readFile(path)); + const baseline = await loadRelease(artifact); + rows.push({ name: artifact.name, preview, baseline: baseline && measureBinary(baseline) }); + } + return renderSizeReport({ release, headSha, runUrl, rows }); + } finally { + await rm(directory, { recursive: true, force: true }); + } +} + +export async function postSizeComment({ github, context, core, prNumber, body }) { + const { data: pr } = await github.rest.pulls.get({ ...context.repo, pull_number: prNumber }); + if ( + pr.state !== 'open' || + pr.head.sha !== context.payload.workflow_run.head_sha || + !pr.labels.some((label) => label.name === 'preview-build') + ) { + core.info('The PR changed after this preview build; skipping its size comment.'); + return; + } + const comments = await github.paginate(github.rest.issues.listComments, { + ...context.repo, + issue_number: prNumber, + }); + const existing = comments.find( + (comment) => comment.user?.login === 'github-actions[bot]' && comment.body?.includes(marker), + ); + if (existing) { + await github.rest.issues.updateComment({ ...context.repo, comment_id: existing.id, body }); + } else { + await github.rest.issues.createComment({ ...context.repo, issue_number: prNumber, body }); + } +} diff --git a/.github/workflows/publish-preview-register.yml b/.github/workflows/publish-preview-register.yml index 55590e8cc1..cbb6c71c34 100644 --- a/.github/workflows/publish-preview-register.yml +++ b/.github/workflows/publish-preview-register.yml @@ -324,6 +324,72 @@ jobs: # batch. The bridge's own WORKSPACE_PACKAGES must also allow each name. workspace-packages: vite-plus,create-vite-plus,@voidzero-dev/vite-plus-* + # Read the triggering run's binaries as data using code from the default + # branch. Never execute a preview binary in this write-enabled job. + comment-binary-size: + name: Compare preview binaries with latest release + needs: authorize + if: needs.authorize.outputs.eligible == 'true' + runs-on: ubuntu-latest + timeout-minutes: 15 + permissions: + contents: read + actions: read + pull-requests: write + issues: write + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 + with: + node-version-file: .node-version + package-manager-cache: false + - name: Download preview CLI binaries + uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 + with: + pattern: vp-global-cli-* + path: ${{ runner.temp }}/preview-binary-size + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ github.token }} + - name: Download preview NAPI binaries + uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 + with: + pattern: vite-plus-native-* + path: ${{ runner.temp }}/preview-binary-size + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ github.token }} + - name: Download preview installers + uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 + with: + pattern: vp-setup-* + path: ${{ runner.temp }}/preview-binary-size + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ github.token }} + - name: Compare and comment binary sizes + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 + env: + ARTIFACT_DIRECTORY: ${{ runner.temp }}/preview-binary-size + PR_NUMBER: ${{ needs.authorize.outputs.pr }} + with: + script: | + const { comparePreviewBinaries, postSizeComment } = await import( + `${process.env.GITHUB_WORKSPACE}/.github/scripts/preview-binary-size.mjs` + ); + const { data: release } = await github.rest.repos.getLatestRelease(context.repo); + const run = context.payload.workflow_run; + const body = await comparePreviewBinaries({ + release, + artifactDirectory: process.env.ARTIFACT_DIRECTORY, + headSha: run.head_sha, + runUrl: run.html_url, + }); + await core.summary.addRaw(body).write(); + await postSizeComment({ + github, context, core, body, + prNumber: Number(process.env.PR_NUMBER), + }); + # Sticky comment with the resolved versions and per-package-manager registry # config. Separate job: it needs write permissions, and SR-5 keeps those away # from the job holding id-token. diff --git a/.github/workflows/publish-preview.yml b/.github/workflows/publish-preview.yml index 6ef043c78d..f74a62361a 100644 --- a/.github/workflows/publish-preview.yml +++ b/.github/workflows/publish-preview.yml @@ -51,6 +51,8 @@ jobs: package-manager-cache: false - name: Test preview documentation origin run: node --test .github/scripts/__tests__/preview-docs-origin.mjs + - name: Test preview binary size report + run: node --test .github/scripts/__tests__/preview-binary-size.mjs - name: Resolve preview documentation origin id: docs uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 diff --git a/bench/binary-size/README.md b/bench/binary-size/README.md new file mode 100644 index 0000000000..7d7e390891 --- /dev/null +++ b/bench/binary-size/README.md @@ -0,0 +1,282 @@ +# Binary size analysis + +The target is a 50% reduction for **each binary individually**. The measured +changes below do not yet meet that target. The most useful results so far are +size-oriented compilation for the standalone `vp` executable and compression of +embedded helper executables for the macOS NAPI library. Applying size-oriented +compilation to the entire NAPI library causes a substantial performance loss. + +This draft applies `opt-level = "z"` to the standalone CLI build steps in +`build-upstream` and `build-windows-cli`. These are the compiler-only experiments +below: 37.9% on macOS, 29.7% on Linux, and 37.4% on Windows. Rebuilt std, +package-manager changes, and helper compression remain separate prototypes. +The preview workflow also compares all eight targets with the latest stable +release, using release archives for executables and matching npm versions for +NAPI. It reports raw sizes and gzip sizes separately. + +The source baseline is `006e9700a`, which merges PR 1783. The +[reference size report](https://github.com/voidzero-dev/vite-plus/pull/1783#issuecomment-5308800690) +is for PR head `1438b2b`, updated on 2026-10-16. Raw bytes and gzip bytes are +separate metrics. Local experiments use matched local baselines; local builds +are not byte-identical to the CI artifacts. + +## Release baselines and targets + +These are the PR-head measurements downloaded from the reference workflow. +MiB means 1,048,576 bytes; KiB means 1,024 bytes. + +| Artifact | Release size | 50% target | +| ---------------------- | -----------: | ---------: | +| Linux x64 `vp` | 10.21 MiB | 5.11 MiB | +| Linux x64 NAPI | 34.53 MiB | 17.27 MiB | +| macOS ARM64 `vp` | 7.62 MiB | 3.81 MiB | +| macOS ARM64 NAPI | 41.52 MiB | 20.76 MiB | +| Windows x64 `vp` | 8.29 MiB | 4.14 MiB | +| Windows x64 NAPI | 30.60 MiB | 15.30 MiB | +| Windows x64 installer | 3.63 MiB | 1.82 MiB | +| Windows x64 trampoline | 13.50 KiB | 6.75 KiB | + +The release profile already uses `opt-level = 3`, full LTO, one codegen unit, +symbol stripping, and panic aborts. Turning those existing settings on cannot +produce additional savings. See [Cargo.toml](../../Cargo.toml). + +In the matched macOS baseline, `vp` has 6.02 MiB of machine code and 1.01 MiB of +read-only constants. NAPI has 19.98 MiB of machine code and 19.85 MiB of read-only +constants. This explains the different priorities: code generation matters most +for `vp`, while embedded data is a large immediate opportunity for macOS NAPI. +The [symbol estimates](evidence/) include the complete section measurements. + +## Measured compiler and source experiments + +| Artifact and change | Baseline bytes | Candidate bytes | Reduction | +| ---------------------------------------------------------------- | -------------: | --------------: | --------: | +| macOS `vp`, `opt-level = "z"` | 7,963,056 | 4,943,936 | 37.9% | +| macOS `vp`, `"z"` plus rebuilding std for size | 7,963,056 | 4,631,296 | 41.8% | +| macOS `vp`, above plus package-manager prototype | 7,963,056 | 4,614,576 | 42.1% | +| Linux `vp`, `opt-level = "z"` | 10,667,136 | 7,500,528 | 29.7% | +| Linux `vp`, `"z"` plus rebuilding std for size | 10,667,136 | 7,229,544 | 32.2% | +| Windows `vp`, `opt-level = "z"` | 8,688,640 | 5,436,928 | 37.4% | +| Windows installer, entire dependency graph at `"z"` | 3,808,256 | 2,947,072 | 22.6% | +| macOS NAPI, `opt-level = "z"` | 43,305,840 | 31,779,504 | 26.6% | +| macOS NAPI, compressed embedded helpers, original optimization | 43,305,840 | 32,980,192 | 23.8% | +| Linux NAPI, compressed embedded helpers, original optimization | 35,672,200 | 35,016,840 | 1.8% | +| Windows NAPI, compressed embedded helpers, original optimization | 32,076,288 | 31,751,680 | 1.0% | + +Rebuilding std retains the `backtrace` and `panic-unwind` std features and adds +`optimize_for_size`. The executable still uses `panic = "abort"`. None of these +experiments suppresses `Debug` output or uses immediate aborts that bypass the +panic hook. + +The compressed NAPI library's gzip size falls from 17,932,754 to 16,362,251 bytes, +an 8.8% reduction. Raw installed-size savings must not be presented as equivalent +download savings. + +Four native help command outputs and exit codes match between the original `vp`, +the `"z"` build, the build with recompiled std, and the package-manager prototype. +These checks do not establish +full CLI equivalence or package-manager performance. + +Linux and Windows artifacts were cross-built and measured, but were not executed +on their target platforms. Linux builds use `cargo zigbuild` with +`RUSTFLAGS='--cfg tokio_unstable'` to omit the GNU linker warning flag that Zig +rejects. Windows builds use `cargo xwin` with Homebrew LLVM on `PATH`. + +### NAPI performance + +The synthetic benchmark uses 1,500 exported functions, TypeScript transformation +to ES2015 with source maps, minification with source maps, and an invalid-syntax +case. Output hashes match across the builds. + +Global `"z"` optimization makes the initial parse test about 1.9 times as slow, +and transform and minify about 2.8 times as slow. Do not apply it globally to the +performance-sensitive library merely to meet the byte target. + +Repeated, interleaved runs of the original and compressed libraries give median +times of approximately 4.36/4.38 ms for parsing, 2.13/2.15 ms for transformation, +and 2.07/2.05 ms for minification. These small kernels show no comparable slowdown +from compression. Application build and task-cache benchmarks remain necessary. +First-use extraction latency and memory use also need measurement; the existing +materialized-file fast path does not decompress the helpers again. + +## Optimization priorities + +Start with a dedicated size profile for the standalone CLI and installer, with +command latency and installation benchmarks before release. Pursue embedded +artifact compression independently in Vite Task. Keep Oxc and Rolldown at their +original optimization level until a selective profile passes representative +build benchmarks. Do not add the profile and compression percentages: a combined +NAPI variant has not been measured. + +These experiments do not establish a route to 50% for every binary. The remaining +gap requires source or dependency changes with a measurable size budget. The +parser and verification audits below are investigation targets, not promised +savings. + +This budget uses matched local baselines and the candidates above. For NAPI it +uses compression at the original optimization level, excluding the global +`"z"` profile because of its measured slowdown. No candidate is release-ready. + +| Artifact | Candidate bytes | Local 50% target | Additional bytes to remove | +| ---------------------- | --------------: | ---------------: | -------------------------: | +| macOS ARM64 `vp` | 4,614,576 | 3,981,528 | 633,048 | +| Linux x64 `vp` | 7,229,544 | 5,333,568 | 1,895,976 | +| Windows x64 `vp` | 5,436,928 | 4,344,320 | 1,092,608 | +| macOS ARM64 NAPI | 32,980,192 | 21,652,920 | 11,327,272 | +| Linux x64 NAPI | 35,016,840 | 17,836,100 | 17,180,740 | +| Windows x64 NAPI | 31,751,680 | 16,038,144 | 15,713,536 | +| Windows x64 installer | 2,947,072 | 1,904,128 | 1,042,944 | +| Windows x64 trampoline | 13,824 | 6,912 | 6,912 | + +### Compress embedded helpers + +Vite Task's `fspy` embeds macOS copies of `coreutils` and Oils, totaling 14,141,272 +bytes. It also embeds a preload library, and `vt` embeds a NAPI client library. +The original materialization macro includes their raw bytes in the host library. + +The prototype in the sibling `binary-size-vite-task` worktree compresses these +artifacts at compile time with zstd level 19 when compression reduces their size. +Materialization decodes directly into the existing temporary file before atomic +publication. The filename hash still identifies the original bytes, so existing +extracted files remain reusable and helpers remain available offline. + +The final NAPI measurement above includes decoder overhead. The prototype passes +three focused compression tests, two shebang tests, one spawn test, and targeted +Clippy checks. The tests cover byte preservation, cache filename/reuse, executable +permissions on Unix, and failure without publication for corrupt compressed data. +Linux and Windows x64 NAPI cross builds also pass. Their raw savings are only +655,360 and 324,608 bytes respectively; gzip savings are about 0.4% and 0.2%. +Cross-platform runtime integration remains to be verified. Most of the measured +benefit comes from macOS-only helpers. + +### Reduce duplication in package-manager dispatch + +Symbol attribution places approximately 0.66 MiB of the standalone executable's +machine code under `vp_pm_cli`, in addition to the global CLI's own code and Clap. +The prototype in `../binary-size-pm-cli` extracts package-manager environment +setup from generic `resolve_for_manager` into one shared function. It also +constructs fixed release-version rules at compile time and borrows their literal +text. Prerelease version rules retain their parsing behavior. + +Together these changes save 65,664 bytes (0.8%) under the original release profile. +After `"z"` and size-oriented std, they save only another 16,720 bytes (0.4% of +that candidate). The prototype passes 724 resolution tests, 10 macro tests, and +targeted Clippy checks. This is a small improvement, not a path to 50% by itself. + +See [resolution/resolve.rs](../../crates/vp_pm_cli/src/resolution/resolve.rs), +[resolution/support.rs](../../crates/vp_pm_cli/src/resolution/support.rs), and +[the macro implementation](../../crates/vp_pm_cli_macros/src/lib.rs). +The measured delta above is the relevant result; symbol attribution is not an +additive size budget under LTO. + +### Consolidate migration parsers + +The NAPI dependency graph includes Oxc and tree-sitter grammars for Bash, +TypeScript, and TSX. TypeScript and TSX each contribute a generated parser object +of about 1.4 MB before final linking. Most migration call sites explicitly select +TypeScript or Bash, while `SupportLang` retains the TSX variant too. + +First determine whether language specialization can remove unused grammar +reachability without changing supported migration input. A larger opportunity is +to implement migration operations on the Oxc AST that is already shipped. +Preserve JSX/TSX parsing and rule semantics; simply disabling a supported language +is not an equivalent optimization. See +[vp_migration](../../crates/vp_migration/src/ast_grep.rs) and +[its manifest](../../crates/vp_migration/Cargo.toml). + +### Audit verification and networking dependencies + +PGP, TLS, HTTP, and their generic formatting/parsing code are meaningful parts of +the standalone executable. Audit duplicate algorithms, feature selection, and +unneeded protocol paths. Keep Node release signature verification, supported key +types, revocation behavior, and existing proxy/TLS behavior intact. PGP signature +verification must not be disabled to claim a smaller binary. + +### Treat the installer and trampoline separately + +The installer already has a per-package `"z"` override. Optimizing its dependencies +for size too reduces the complete executable by 22.6%. Reaching 50% still requires +another 1,042,944 bytes of savings relative to this candidate. Inspect the +networking, archive, and error-reporting code before changing behavior. + +The trampoline already has a standalone size-oriented profile, recompiled std, +immediate aborts, and a raw Win32 entry point. It needs a PE section/import and +generated-code audit. The cross build reproduces its 13,824-byte baseline, with +8,126 bytes of `.text`, 3,028 bytes of `.rdata`, and 23 Win32 imports. Its 6.75 KiB +target is not supported by the larger CLI's compiler results. No trampoline +reduction has been demonstrated. See [vp_trampoline](../../crates/vp_trampoline/Cargo.toml). + +## Reproduce the measurements + +Build the two top-level packages separately. Building them in the same Cargo +invocation unifies dependency features and changes the resulting baseline. +Use the repository's pinned nightly and Rolldown revision. Build outputs and logs +from this work are under `tmp/binary-size/`. + +```sh +cargo build --locked --release --target aarch64-apple-darwin \ + -p vp_global_cli --config 'profile.release.strip=false' + +cargo build --locked --release --target aarch64-apple-darwin \ + -p vite-plus-cli --features rolldown \ + --config 'profile.release.strip=false' \ + --config 'profile.release.package.fspy_preload_unix.strip="symbols"' \ + --config 'profile.release.package.vt_client_napi.strip="symbols"' +``` + +Preserve each artifact before the next build. Add +`--config 'profile.release.opt-level="z"'` for the size profile experiment. +For the std experiment, also add +`-Z build-std=std,panic_abort -Z build-std-features=backtrace,panic-unwind,optimize_for_size`. + +Keep unstripped copies for attribution. Compare release-size copies after `strip` +for executables or `strip -x` for NAPI, then ad-hoc sign the Mach-O copies with +`codesign --force --sign -`. Keep symbols in embedded helper artifacts stripped +even when the outer library is unstripped. + +```sh +node bench/binary-size/measure.cjs path/to/vp path/to/vite-plus.node +node bench/binary-size/benchmark-napi.cjs path/to/vite-plus.node +python3 bench/binary-size/analyze-macho.py path/to/unstripped-binary \ + --cxxfilt /opt/homebrew/opt/llvm/bin/llvm-cxxfilt +``` + +The Mach-O analyzer estimates symbol extents from the next symbol boundary. +Anonymous constants can follow a named symbol, so a large constant extent is not +proof that the named item owns every byte. Section sizes and final artifact sizes +are stronger evidence for savings. + +Use an isolated `VP_HOME` and put `.vp-setup-complete` beside test `vp` binaries +before running command smoke tests. Otherwise even `--version` can trigger the +CLI's first-start installation. An early check in this investigation triggered +setup in `~/.vite-plus`; later checks used an isolated home. The prior home state +was not known, so those installed files were not automatically removed. + +## Prototype worktrees + +The report lives on `perf/binary-size-analysis`. The draft changes the CLI build +steps, while the workspace Cargo profiles remain unchanged. Two sibling +worktrees retain the source experiments: + +| Prototype | Worktree | Branch | Base commit | +| ----------------------------- | -------------------------- | ---------------------------------- | ------------------------------------------ | +| Embedded artifact compression | `../binary-size-vite-task` | `perf/compress-embedded-artifacts` | `9ba4cc93379cf2d7a6c7e657285bb8a00e8339dc` | +| Package-manager deduplication | `../binary-size-pm-cli` | `perf/pm-cli-size-prototype` | `006e9700a62aab9d791889cdfaac31a67767e63d` | + +The [compression patch](prototypes/embedded-artifact-compression.patch) and +[package-manager patch](prototypes/pm-cli-deduplication.patch) preserve the +experiments, including their regression tests. Apply each to its own repository +at the listed base with `git apply --unidiff-zero`. They are prototypes, not +release-ready changes. + +To build Vite+ with the compression prototype, add these Cargo overrides to the +original release command and allow the local lockfile update in the disposable +worktree. Restore the baseline lockfile before building the original variant. + +```sh +--config 'patch."https://github.com/voidzero-dev/vite-task.git".vt_materialized_artifact.path="../binary-size-vite-task/crates/vt_materialized_artifact"' \ +--config 'patch."https://github.com/voidzero-dev/vite-task.git".vt_materialized_artifact_macros.path="../binary-size-vite-task/crates/vt_materialized_artifact_macros"' +``` + +Exact measurements, hashes, toolchain details, and current limitations are in +[results.json](results.json). The preview comparison uses code from the default +branch, so its automatic PR comment starts after the workflow change merges. diff --git a/bench/binary-size/analyze-macho.py b/bench/binary-size/analyze-macho.py new file mode 100644 index 0000000000..2392f49ea6 --- /dev/null +++ b/bench/binary-size/analyze-macho.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +"""Measure a Mach-O artifact and attribute section bytes to symbol extents. + +Symbol extents include alignment and any unnamed bytes before the next symbol. +They are attribution estimates, not compiler-reported function sizes. Analyze +an unstripped copy for attribution; compare stripped artifacts for release size. +""" + +import argparse +import collections +import gzip +import hashlib +import json +import re +import struct +import subprocess +from pathlib import Path + + +def cstring(data): + return data.split(b"\0", 1)[0].decode("utf-8", errors="replace") + + +def analyze(path, cxxfilt, limit): + data = path.read_bytes() + if data[:4] != b"\xcf\xfa\xed\xfe": + raise ValueError("Expected a little-endian 64-bit Mach-O file") + command_count = struct.unpack_from(" + `export function compute${i}(value) { const offset = ${i}; return value?.amount ?? offset + 1; }`, +).join('\n'); +const typescript = Array.from( + { length: 1500 }, + (_, i) => + `export const compute${i} = (value: { amount?: number } | undefined): number => value?.amount ?? ${i};`, +).join('\n'); + +const tasks = { + parse: () => { + const result = binding.parseSync('fixture.js', source); + return { errors: result.errors, module: result.module }; + }, + transform: () => + binding.transformSync('fixture.ts', typescript, { target: 'es2015', sourcemap: true }), + minify: () => binding.minifySync('fixture.js', source, { sourcemap: true }), + invalidSyntax: () => binding.transformSync('invalid.ts', 'export const value: = ;'), +}; + +const results = {}; +for (const [name, run] of Object.entries(tasks)) { + for (let i = 0; i < 5; i++) run(); + const samples = []; + for (let i = 0; i < 25; i++) { + const start = performance.now(); + run(); + samples.push(performance.now() - start); + } + const output = JSON.stringify(run()); + results[name] = { + median_ms: [...samples].sort((a, b) => a - b)[Math.floor(samples.length / 2)], + samples_ms: samples, + output_sha256: createHash('sha256').update(output).digest('hex'), + output_bytes: Buffer.byteLength(output), + }; +} +console.log( + JSON.stringify( + { node: process.version, source_bytes: Buffer.byteLength(source), results }, + null, + 2, + ), +); diff --git a/bench/binary-size/evidence/compression-benchmark-rounds.json b/bench/binary-size/evidence/compression-benchmark-rounds.json new file mode 100644 index 0000000000..3f87719838 --- /dev/null +++ b/bench/binary-size/evidence/compression-benchmark-rounds.json @@ -0,0 +1,497 @@ +[ + { + "variant": "napi-compressed-o3", + "node": "v22.23.2", + "source_bytes": 141779, + "results": { + "parse": { + "median_ms": 4.445375000000013, + "samples_ms": [ + 4.309042000000005, 4.182166000000009, 4.449042000000006, 4.470500000000001, + 4.417083000000005, 4.450209000000001, 4.47916699999999, 4.668000000000006, + 4.353915999999998, 4.250875000000008, 4.459209000000001, 4.4422910000000115, + 4.60304099999999, 4.3478339999999776, 4.469208000000009, 4.564791999999983, + 4.445833000000022, 4.572457999999983, 4.302334000000002, 4.300625000000025, + 4.229417000000012, 4.445375000000013, 4.711083000000002, 4.310292000000004, 4.422708 + ], + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.1577920000000006, + "samples_ms": [ + 2.0942090000000064, 2.1074580000000083, 2.454499999999996, 2.2743750000000205, + 2.2497499999999775, 2.2772910000000195, 2.252416000000011, 2.203000000000003, + 2.230165999999997, 2.144959, 2.1028750000000116, 2.3869580000000212, 2.1247079999999983, + 2.114167000000009, 2.13900000000001, 2.102541000000002, 2.1577920000000006, + 2.1732920000000036, 2.2343329999999924, 2.382083999999992, 2.132333000000017, + 2.1289579999999546, 2.0898750000000064, 2.0859590000000026, 2.1638750000000186 + ], + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.081124999999986, + "samples_ms": [ + 2.042500000000018, 2.081124999999986, 2.159999999999968, 2.0162500000000136, + 2.1004159999999956, 2.141707999999994, 2.0592920000000277, 2.0802920000000427, + 2.0873339999999985, 2.0943750000000136, 2.054083999999989, 2.040666999999985, + 2.178375000000017, 2.070291999999995, 2.058917000000008, 2.032791999999972, + 2.0319999999999823, 2.0689160000000015, 2.100666999999987, 2.040416999999991, + 2.167500000000018, 2.108333000000016, 2.1348750000000223, 2.3224590000000376, + 2.0880000000000223 + ], + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.0026249999999663487, + "samples_ms": [ + 0.003500000000030923, 0.0031250000000113687, 0.0027499999999918145, 0.004415999999991982, + 0.004917000000034477, 0.0031250000000113687, 0.002583000000015545, 0.002625000000023192, + 0.0026249999999663487, 0.002541000000007898, 0.002625000000023192, 0.00254199999994853, + 0.0025420000000053733, 0.0024999999999977263, 0.006792000000018561, 0.004249999999956344, + 0.0028340000000071086, 0.0026249999999663487, 0.0025420000000053733, + 0.0024999999999977263, 0.0025840000000130203, 0.0024999999999977263, 0.002375000000029104, + 0.0024580000000469227, 0.002375000000029104 + ], + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + }, + { + "variant": "napi-compressed-o3", + "node": "v22.23.2", + "source_bytes": 141779, + "results": { + "parse": { + "median_ms": 4.290458000000001, + "samples_ms": [ + 4.297458000000006, 4.311374999999998, 4.43754100000001, 4.403041999999999, + 4.240291999999997, 4.586666000000008, 4.277000000000001, 4.4077079999999995, + 4.236000000000004, 4.445125000000004, 4.2167499999999905, 4.239709000000005, + 4.455459000000019, 4.276457999999991, 4.290458000000001, 4.269207999999992, + 4.309416999999996, 4.379750000000001, 4.161583000000007, 4.162416000000007, + 4.252375000000001, 4.237791999999985, 4.405167000000006, 4.188041999999996, 4.588583 + ], + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.1464579999999955, + "samples_ms": [ + 2.195999999999998, 2.203624999999988, 2.3936669999999935, 2.1464579999999955, + 2.1211669999999856, 2.145792, 2.184375000000017, 2.116500000000002, 2.13870799999998, + 2.2161250000000052, 2.0954169999999976, 2.311250000000001, 2.145667000000003, + 2.131458000000009, 2.154375000000016, 2.0644169999999917, 2.139792, 2.259416999999985, + 2.218083000000007, 2.362707999999998, 2.173291000000006, 2.181791000000004, + 2.0505419999999788, 2.045500000000004, 2.127917000000025 + ], + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.0600839999999607, + "samples_ms": [ + 2.1119170000000054, 2.0865420000000086, 2.0219999999999914, 2.0767920000000117, + 2.132167000000038, 2.0940420000000017, 2.002791000000002, 1.973957999999982, + 1.9600000000000364, 1.965709000000004, 2.0133749999999964, 1.9688749999999686, + 1.9335419999999885, 1.9305830000000128, 1.982500000000016, 2.1144580000000133, + 2.107249999999965, 2.2087499999999523, 2.066958999999997, 2.0600839999999607, + 2.051540999999986, 2.1825419999999554, 1.9942500000000223, 2.2685410000000275, + 2.119374999999991 + ], + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.0027499999999918145, + "samples_ms": [ + 0.0031250000000113687, 0.0028750000000172804, 0.002667000000030839, 0.003708000000017364, + 0.004750000000001364, 0.0029170000000249274, 0.002666000000033364, 0.0025420000000053733, + 0.0024579999999900792, 0.0024999999999977263, 0.0025840000000130203, 0.002415999999982432, + 0.002375000000029104, 0.002459000000044398, 0.005999999999971806, 0.004124999999987722, + 0.002708000000041011, 0.002583000000015545, 0.0025420000000053733, 0.0027499999999918145, + 0.0031250000000113687, 0.0031250000000113687, 0.00304199999999355, 0.002999999999985903, + 0.0030409999999960746 + ], + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + }, + { + "variant": "napi-o3", + "node": "v22.23.2", + "source_bytes": 141779, + "results": { + "parse": { + "median_ms": 4.358833999999973, + "samples_ms": [ + 4.411625000000001, 4.308208999999991, 4.454959000000002, 4.270708999999982, + 4.272958000000017, 4.343833999999987, 4.383624999999995, 4.567417000000006, + 4.352249999999998, 4.2539580000000115, 4.370249999999999, 4.206832999999989, + 4.407708000000014, 4.358833999999973, 4.421875, 4.349375000000009, 4.33883400000002, + 4.427082999999982, 4.30012499999998, 4.367041, 4.264290999999986, 4.329167000000012, + 4.5191250000000025, 4.46029200000001, 4.370833000000005 + ], + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.1328750000000127, + "samples_ms": [ + 2.1340409999999963, 2.044083999999998, 2.564290999999969, 2.1315420000000245, + 2.0847080000000346, 2.0562499999999773, 2.095958000000053, 2.17674999999997, + 2.0969579999999723, 2.114582999999982, 2.0787920000000213, 2.319000000000017, + 2.134291000000019, 2.1323750000000246, 2.1437080000000037, 2.2215419999999995, + 2.130833999999993, 2.124834000000021, 2.160041999999976, 2.350208000000009, + 2.173917000000017, 2.1328750000000127, 2.192834000000005, 2.08804200000003, + 2.273458000000005 + ], + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.071916999999985, + "samples_ms": [ + 2.082667000000015, 2.014083000000028, 1.997624999999971, 2.0309589999999957, + 2.0473330000000374, 2.1649590000000103, 2.045458999999994, 1.9966670000000022, + 2.010167000000024, 2.1495419999999967, 2.059415999999999, 2.0402910000000247, + 2.071124999999995, 2.146250000000009, 2.12179100000003, 2.047957999999994, + 2.1199169999999867, 2.1818329999999833, 2.033917000000031, 2.075540999999987, + 2.140291999999988, 2.071916999999985, 2.3907919999999763, 2.09133300000002, + 2.150374999999997 + ], + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.00254199999994853, + "samples_ms": [ + 0.003417000000013104, 0.0029590000000325745, 0.0030000000000427463, 0.005208999999979369, + 0.004958999999985281, 0.0027919999999994616, 0.002625000000023192, 0.0024999999999977263, + 0.0025829999999587017, 0.0024999999999977263, 0.0024999999999977263, + 0.0024999999999977263, 0.0026249999999663487, 0.0024579999999900792, 0.006290999999976066, + 0.004208000000005541, 0.0028750000000172804, 0.00254199999994853, 0.0024999999999977263, + 0.002415999999982432, 0.0024579999999900792, 0.0024589999999875545, 0.002417000000036751, + 0.0024169999999799074, 0.0024169999999799074 + ], + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + }, + { + "variant": "napi-o3", + "node": "v22.23.2", + "source_bytes": 141779, + "results": { + "parse": { + "median_ms": 4.348583000000005, + "samples_ms": [ + 4.348583000000005, 4.468083000000007, 4.5767919999999975, 4.323916000000011, 4.413916, + 4.427250000000001, 4.228915999999998, 4.363208, 4.323458000000002, 4.421207999999993, + 4.329625000000007, 4.390540999999985, 4.4992909999999995, 4.343333999999999, + 4.381792000000019, 4.27604199999999, 4.255209000000008, 4.369249999999994, + 4.3403749999999945, 4.2426670000000115, 4.349083000000007, 4.2842919999999935, + 4.476167000000004, 4.320416999999992, 4.259250000000009 + ], + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.1312499999999943, + "samples_ms": [ + 2.1350419999999986, 2.110416000000015, 2.372250000000008, 2.1235420000000147, + 2.120834000000002, 2.1741670000000113, 2.1312499999999943, 2.094374999999985, + 2.1389580000000024, 2.158209000000028, 2.1701659999999947, 2.32974999999999, + 2.1110000000000184, 2.1170000000000186, 2.1241249999999923, 2.153375000000011, + 2.067875000000015, 2.0841669999999795, 2.135707999999994, 2.2970419999999763, + 2.1006670000000156, 2.097457999999989, 2.107292000000001, 2.17108300000001, + 2.136624999999981 + ], + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.072915999999964, + "samples_ms": [ + 2.0647920000000113, 2.1172919999999635, 2.095792000000017, 2.101541999999995, + 2.1020829999999933, 2.0471670000000017, 2.043666999999971, 2.028041999999971, + 2.111083000000008, 2.1112079999999764, 2.1382090000000176, 2.042333000000042, + 2.024499999999989, 2.0674169999999776, 2.1536669999999845, 2.045749999999998, + 2.0343750000000114, 2.072915999999964, 2.1299169999999776, 2.0499169999999935, + 2.048166999999978, 2.020208000000025, 2.1348339999999553, 2.402417000000014, + 2.101083000000017 + ], + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.003291999999987638, + "samples_ms": [ + 0.004000000000019099, 0.004250000000013188, 0.0037499999999681677, 0.00587499999994634, + 0.006000000000028649, 0.0029159999999706088, 0.003207999999972344, 0.0037079999999605207, + 0.0034579999999664324, 0.003249999999979991, 0.0032920000000444816, 0.00333299999999781, + 0.003165999999964697, 0.003207999999972344, 0.007958000000030552, 0.004415999999991982, + 0.0031249999999545253, 0.003291999999987638, 0.00333299999999781, 0.0032089999999698193, + 0.003291999999987638, 0.003249999999979991, 0.0031670000000190157, 0.0030000000000427463, + 0.0028750000000172804 + ], + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + }, + { + "variant": "napi-compressed-o3", + "node": "v22.23.2", + "source_bytes": 141779, + "results": { + "parse": { + "median_ms": 4.443416999999997, + "samples_ms": [ + 4.421999999999997, 4.428291999999999, 4.5967919999999935, 4.443416999999997, + 4.540790999999999, 4.422958999999992, 4.541250000000005, 4.582499999999996, + 4.462209000000001, 4.461540999999997, 4.438999999999993, 4.402584000000019, + 4.533916999999974, 4.36458300000001, 4.341833000000008, 4.456834000000015, + 4.491333999999995, 4.558374999999984, 4.3700000000000045, 4.286999999999978, + 4.451667000000015, 4.326958000000019, 4.617083000000008, 4.27279200000001, + 4.40983300000002 + ], + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.1109580000000108, + "samples_ms": [ + 2.259457999999995, 2.1308340000000214, 2.4297909999999945, 2.086041999999992, + 2.143041000000011, 2.1062499999999886, 2.1049170000000004, 2.1277919999999995, + 2.1122500000000173, 2.1109580000000108, 2.0844579999999837, 2.3081249999999898, + 2.102833000000004, 2.1027500000000146, 2.2136250000000075, 2.156958000000003, + 2.0682079999999985, 2.0852079999999944, 2.094707999999997, 2.3471660000000156, + 2.1014999999999873, 2.113625000000013, 2.1239999999999952, 2.0958330000000274, + 2.106667000000016 + ], + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.045332999999971, + "samples_ms": [ + 2.1208330000000046, 2.033416999999986, 2.058125000000018, 2.0846670000000245, + 2.037916999999993, 2.0206249999999955, 1.9987090000000194, 2.045332999999971, + 2.014499999999998, 1.9997089999999957, 2.0348749999999995, 2.0331669999999917, + 2.050375000000031, 2.183999999999969, 2.042332999999985, 2.0143750000000296, + 1.9537920000000213, 1.9397500000000036, 2.106625000000008, 2.047917000000041, + 2.0891249999999673, 2.1138329999999996, 2.0954590000000053, 2.3439579999999864, + 2.0780829999999924 + ], + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.002625000000023192, + "samples_ms": [ + 0.0034579999999664324, 0.0031250000000113687, 0.0027499999999918145, 0.004334000000028482, + 0.0049999999999954525, 0.006917000000044027, 0.002625000000023192, 0.002625000000023192, + 0.002667000000030839, 0.002583000000015545, 0.002541000000007898, 0.0025840000000130203, + 0.0024999999999977263, 0.0025840000000130203, 0.007333000000016909, 0.004458999999997104, + 0.002958999999975731, 0.0027499999999918145, 0.0026669999999739957, 0.002583000000015545, + 0.0024999999999977263, 0.0024580000000469227, 0.0024579999999900792, + 0.0025840000000130203, 0.0024999999999977263 + ], + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + }, + { + "variant": "napi-o3", + "node": "v22.23.2", + "source_bytes": 141779, + "results": { + "parse": { + "median_ms": 4.365375, + "samples_ms": [ + 4.431916000000001, 4.283374999999992, 4.867000000000004, 4.526709000000011, + 4.366333999999995, 4.367207999999991, 4.392958000000007, 4.554457999999997, + 4.203249999999997, 4.25004100000001, 4.483958999999999, 4.108374999999995, + 4.607333000000011, 4.416416999999996, 4.338540999999992, 4.195791999999983, + 4.3387500000000045, 4.5224999999999795, 4.328749999999985, 4.32650000000001, + 4.354083000000003, 4.092959000000008, 4.729916000000003, 4.365375, 4.32487500000002 + ], + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.129917000000006, + "samples_ms": [ + 2.0963749999999948, 2.1114169999999888, 2.381833999999998, 2.1624590000000126, + 2.082250000000016, 2.250957999999997, 2.0313329999999894, 2.1840419999999767, + 2.241250000000008, 2.054708000000005, 1.9990420000000029, 2.351292000000001, + 2.1860419999999863, 2.10612500000002, 2.063208000000003, 2.086541000000011, + 2.2278750000000116, 2.0960000000000036, 2.128667000000007, 2.346624999999989, + 2.129917000000006, 2.129583999999994, 2.1370840000000157, 2.158834000000013, + 2.1760419999999954 + ], + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.0362910000000056, + "samples_ms": [ + 2.0539159999999583, 2.061499999999967, 2.0483750000000214, 2.0793749999999704, + 2.0996249999999463, 2.0434170000000336, 1.9894580000000133, 1.989417000000003, + 2.000249999999994, 2.0191670000000386, 2.03370799999999, 2.013749999999959, + 2.035624999999982, 2.067875000000015, 2.0659160000000156, 2.0233749999999873, + 2.0270830000000046, 2.02391700000004, 2.0131250000000023, 2.0179580000000215, + 2.0536670000000186, 2.0362910000000056, 2.0548749999999814, 2.3396249999999554, + 2.054417000000001 + ], + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.002583000000015545, + "samples_ms": [ + 0.00333299999999781, 0.002999999999985903, 0.002874999999960437, 0.004416999999989457, + 0.005041000000005624, 0.0027919999999994616, 0.002625000000023192, 0.002541000000007898, + 0.0025420000000053733, 0.002625000000023192, 0.0025420000000053733, 0.002541000000007898, + 0.0024589999999875545, 0.002583000000015545, 0.006416999999999007, 0.004333999999971638, + 0.0028750000000172804, 0.002625000000023192, 0.0025420000000053733, 0.0024579999999900792, + 0.0025829999999587017, 0.0024589999999875545, 0.0024999999999977263, + 0.0024169999999799074, 0.0024589999999875545 + ], + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + }, + { + "variant": "napi-compressed-o3", + "node": "v22.23.2", + "source_bytes": 141779, + "results": { + "parse": { + "median_ms": 4.309875000000005, + "samples_ms": [ + 4.309125000000009, 4.326708999999994, 4.425708999999998, 4.2052910000000026, + 4.283374999999992, 4.309875000000005, 4.302209000000005, 4.487458000000004, + 4.329166999999998, 4.342959000000008, 4.361750000000001, 4.30208300000001, + 4.478082999999998, 4.246791999999999, 4.240667000000002, 4.522375000000011, + 4.364000000000004, 4.511917000000011, 4.345291000000003, 4.30125000000001, + 4.176375000000007, 4.242665999999986, 4.5057079999999985, 4.251000000000005, + 4.302790999999985 + ], + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.1435000000000173, + "samples_ms": [ + 2.1253329999999835, 2.117333000000002, 2.319375000000008, 2.501249999999999, + 2.186292000000009, 2.1301249999999925, 2.0994170000000167, 2.108875000000012, + 2.1042500000000075, 2.171457999999973, 2.1533330000000035, 2.595416, 2.2108749999999873, + 2.0910410000000184, 2.087582999999995, 2.1630830000000003, 2.155083999999988, + 2.184457999999978, 2.1435000000000173, 2.467250000000007, 2.250416999999999, + 2.1322090000000173, 2.122540999999984, 2.138458000000014, 2.1253749999999627 + ], + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.05008399999997, + "samples_ms": [ + 2.2043750000000273, 2.0591249999999945, 2.016124999999988, 1.99837500000001, + 2.157541999999978, 2.05008399999997, 1.980374999999981, 1.9657499999999573, + 2.0075410000000034, 2.1175830000000246, 2.1467080000000465, 2.0159170000000017, + 2.035500000000013, 2.2956250000000296, 2.0889999999999986, 2.042541999999969, + 2.0839160000000447, 2.112792000000013, 2.0127499999999827, 1.9427919999999972, + 2.1620410000000447, 2.1390420000000177, 2.0287500000000023, 2.3214169999999967, + 1.9982090000000312 + ], + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.002625000000023192, + "samples_ms": [ + 0.0031250000000113687, 0.00304199999999355, 0.0027089999999816428, 0.00454199999995808, + 0.0047089999999911925, 0.0027499999999918145, 0.002625000000023192, 0.002541000000007898, + 0.002583999999956177, 0.002625000000023192, 0.0025420000000053733, 0.0025420000000053733, + 0.0024999999999977263, 0.002541000000007898, 0.006666999999993095, 0.005374999999958163, + 0.003333999999995285, 0.0034160000000156288, 0.003417000000013104, 0.0027919999999994616, + 0.002583000000015545, 0.0024579999999900792, 0.002417000000036751, 0.0024589999999875545, + 0.0024999999999977263 + ], + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + }, + { + "variant": "napi-o3", + "node": "v22.23.2", + "source_bytes": 141779, + "results": { + "parse": { + "median_ms": 4.41345800000002, + "samples_ms": [ + 4.496874999999989, 4.779167000000001, 4.721084000000005, 4.376416000000006, + 4.2853330000000085, 4.295374999999993, 4.234249999999989, 4.525667000000013, + 4.2059169999999995, 4.421541999999988, 4.460583, 4.229792000000003, 4.590000000000003, + 4.320042000000001, 4.299832999999978, 4.49754200000001, 4.5309999999999775, + 4.593290999999994, 4.333500000000015, 4.507249999999999, 4.41345800000002, + 4.248374999999982, 4.420709000000016, 4.163917000000026, 4.3925000000000125 + ], + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.1830420000000004, + "samples_ms": [ + 2.239500000000021, 2.0962089999999876, 2.4029580000000124, 2.1454999999999984, + 2.150584000000009, 2.099625000000003, 2.0641669999999976, 2.1874590000000182, + 2.20150000000001, 2.174792000000025, 2.2273750000000234, 2.343125000000015, + 2.2683750000000202, 2.193708999999984, 2.055708999999979, 2.0165000000000077, + 2.057292000000018, 2.151707999999985, 2.145959000000005, 2.461999999999989, + 2.1830420000000004, 2.138582999999983, 2.202500000000015, 2.193791000000033, + 2.208582999999976 + ], + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.0981669999999895, + "samples_ms": [ + 2.1090000000000373, 2.075333999999998, 2.092667000000006, 2.139250000000004, + 2.1190839999999866, 2.176708000000019, 2.047458000000006, 2.021792000000005, + 2.0213749999999777, 2.0201250000000073, 2.1555830000000356, 2.163458999999989, + 2.044750000000022, 2.0217499999999973, 2.085124999999948, 2.125959000000023, + 2.0981669999999895, 2.0929160000000024, 2.1224580000000515, 2.118333000000007, + 2.136374999999987, 2.112707999999998, 2.0575419999999554, 2.44241599999998, + 2.0667079999999487 + ], + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.002874999999960437, + "samples_ms": [ + 0.0032500000000368345, 0.00304199999999355, 0.0030830000000037217, 0.004917000000034477, + 0.005541000000050644, 0.0031670000000190157, 0.002666000000033364, 0.003207999999972344, + 0.00333299999999781, 0.0031669999999621723, 0.003165999999964697, 0.0026249999999663487, + 0.0025420000000053733, 0.0024999999999977263, 0.007041000000015174, 0.004208000000005541, + 0.002874999999960437, 0.0025420000000053733, 0.002667000000030839, 0.002459000000044398, + 0.002625000000023192, 0.0025000000000545697, 0.0024160000000392756, 0.0024160000000392756, + 0.0024579999999900792 + ], + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + } +] diff --git a/bench/binary-size/evidence/macos-napi-symbol-estimates.json b/bench/binary-size/evidence/macos-napi-symbol-estimates.json new file mode 100644 index 0000000000..dee5a93ac5 --- /dev/null +++ b/bench/binary-size/evidence/macos-napi-symbol-estimates.json @@ -0,0 +1,422 @@ +{ + "path": "tmp/binary-size/napi-o3/napi.unstripped", + "raw": 49865416, + "gzip9_python_zlib": 19183301, + "sha256": "427cabc672fe58b221e914660db18b07671e22ceb5197ba5d2c057affe4ccdd3", + "sections": [ + { + "name": "__TEXT,__text", + "address": 3328, + "bytes": 20953536 + }, + { + "name": "__TEXT,__text_startup", + "address": 20956864, + "bytes": 46120 + }, + { + "name": "__TEXT,__stubs", + "address": 21002984, + "bytes": 3384 + }, + { + "name": "__TEXT,__stub_helper", + "address": 21006368, + "bytes": 3408 + }, + { + "name": "__TEXT,__const", + "address": 21012480, + "bytes": 20818512 + }, + { + "name": "__TEXT,__gcc_except_tab", + "address": 41830992, + "bytes": 14408 + }, + { + "name": "__TEXT,__cstring", + "address": 41845400, + "bytes": 288794 + }, + { + "name": "__TEXT,__unwind_info", + "address": 42134196, + "bytes": 80192 + }, + { + "name": "__TEXT,__eh_frame", + "address": 42214392, + "bytes": 51584 + }, + { + "name": "__DATA_CONST,__got", + "address": 42270720, + "bytes": 184 + }, + { + "name": "__DATA_CONST,__mod_init_func", + "address": 42270904, + "bytes": 24 + }, + { + "name": "__DATA_CONST,__const", + "address": 42270976, + "bytes": 784352 + }, + { + "name": "__DATA,__la_symbol_ptr", + "address": 43057152, + "bytes": 2256 + }, + { + "name": "__DATA,__ctor_force", + "address": 43059408, + "bytes": 1104 + }, + { + "name": "__DATA,_CTOR0_ISIZE_FN", + "address": 43060512, + "bytes": 2208 + }, + { + "name": "__DATA,__data", + "address": 43062720, + "bytes": 42272 + }, + { + "name": "__DATA,_CTR0GR_ISIZE_FN", + "address": 43104992, + "bytes": 1 + }, + { + "name": "__DATA,__thread_vars", + "address": 43105000, + "bytes": 1104 + }, + { + "name": "__DATA,__thread_data", + "address": 43106104, + "bytes": 496 + }, + { + "name": "__DATA,__thread_bss", + "address": 43106600, + "bytes": 1280 + }, + { + "name": "__DATA,__bss", + "address": 43107904, + "bytes": 47760 + }, + { + "name": "__DATA,__common", + "address": 43155712, + "bytes": 8336 + } + ], + "largest_symbol_extents": [ + { + "name": "dragonbox_ecma::cache::CACHE", + "section": "__TEXT,__const", + "bytes": 14591120 + }, + { + "name": "_ts_parse_table", + "section": "__TEXT,__const", + "bytes": 917262 + }, + { + "name": "_ts_parse_table", + "section": "__TEXT,__const", + "bytes": 897136 + }, + { + "name": "_ts_small_parse_table", + "section": "__TEXT,__const", + "bytes": 630150 + }, + { + "name": "serde_json::ser::Formatter::write_char_escape::HEX_DIGITS", + "section": "__TEXT,__const", + "bytes": 547792 + }, + { + "name": "oxc_sourcemap::decode::B64_DECODE", + "section": "__TEXT,__const", + "bytes": 442706 + }, + { + "name": "_ts_small_parse_table", + "section": "__TEXT,__const", + "bytes": 334742 + }, + { + "name": "_ts_small_parse_table", + "section": "__TEXT,__const", + "bytes": 332512 + }, + { + "name": "ring::ec::suite_b::ops::p384::p384_scalar_inv_to_mont::REMAINING_WINDOWS", + "section": "__TEXT,__const", + "bytes": 312063 + }, + { + "name": "::find_tsconfig_tracing::__CALLSITE::META", + "section": "__DATA_CONST,__const", + "bytes": 293320 + }, + { + "name": "_ts_parse_table", + "section": "__TEXT,__const", + "bytes": 292880 + }, + { + "name": "_ts_lex", + "section": "__TEXT,__text", + "bytes": 166076 + }, + { + "name": "_ecp_nistz256_precomputed", + "section": "__TEXT,__const", + "bytes": 151552 + }, + { + "name": "serde_json::read::HEX0", + "section": "__TEXT,__const", + "bytes": 150273 + }, + { + "name": "_ts_parse_actions", + "section": "__TEXT,__const", + "bytes": 136440 + }, + { + "name": "zmij::STATIC_DATA", + "section": "__TEXT,__const", + "bytes": 110992 + }, + { + "name": "::generate::{closure#0}::{closure#0}", + "section": "__TEXT,__text", + "bytes": 82064 + }, + { + "name": "_ts_parse_actions", + "section": "__TEXT,__const", + "bytes": 79280 + }, + { + "name": "_ts_parse_actions", + "section": "__TEXT,__const", + "bytes": 76728 + }, + { + "name": "::resolve_for_manager", + "section": "__TEXT,__text", + "bytes": 64084 + }, + { + "name": "::link", + "section": "__TEXT,__text", + "bytes": 55100 + }, + { + "name": "::split_chunks::{closure#0}", + "section": "__TEXT,__text", + "bytes": 53888 + }, + { + "name": "zlib_rs::deflate::algorithm::CONFIGURATION_TABLE", + "section": "__DATA_CONST,__const", + "bytes": 53464 + }, + { + "name": "regex_automata::meta::strategy::new", + "section": "__TEXT,__text", + "bytes": 49968 + }, + { + "name": "_aDigits", + "section": "__TEXT,__cstring", + "bytes": 47978 + }, + { + "name": ">::fetch_modules::{closure#0}::{closure#0}", + "section": "__TEXT,__text", + "bytes": 47864 + }, + { + "name": "_sqlite3VdbeExec", + "section": "__TEXT,__text", + "bytes": 47652 + }, + { + "name": "_ts_lex_modes", + "section": "__TEXT,__const", + "bytes": 45426 + }, + { + "name": " as core::convert::TryFrom>::try_from", + "section": "__TEXT,__text", + "bytes": 43776 + }, + { + "name": "oxc_traverse::generated::walk::walk_class::", + "section": "__TEXT,__text", + "bytes": 43336 + }, + { + "name": "::gen", + "section": "__TEXT,__text", + "bytes": 38144 + }, + { + "name": "::bind_imports_and_exports", + "section": "__TEXT,__text", + "bytes": 37904 + }, + { + "name": ", h2::client::Peer, hyper::proto::h2::SendBuf>>::poll", + "section": "__TEXT,__text", + "bytes": 36744 + }, + { + "name": "annotate_snippets::renderer::render::render", + "section": "__TEXT,__text", + "bytes": 36688 + }, + { + "name": "rolldown::utils::prepare_build_context::prepare_build_context", + "section": "__TEXT,__text", + "bytes": 35396 + }, + { + "name": "httparse::HEADER_VALUE_MAP", + "section": "__TEXT,__const", + "bytes": 34929 + }, + { + "name": ">::index::NULL", + "section": "__TEXT,__const", + "bytes": 33740 + }, + { + "name": "::visit_program", + "section": "__TEXT,__text", + "bytes": 31472 + }, + { + "name": "mime::parse::TOKEN_MAP", + "section": "__TEXT,__const", + "bytes": 30919 + }, + { + "name": "::build_with_scoping", + "section": "__TEXT,__text", + "bytes": 30820 + }, + { + "name": "::default::DEFAULT_FMT", + "section": "__TEXT,__const", + "bytes": 30743 + }, + { + "name": ">::compute_hmr_update_for_file_changes::{closure#0}", + "section": "__TEXT,__text", + "bytes": 30696 + }, + { + "name": "rolldown::stages::link_stage::tree_shaking::include_statements::include_side_effectful_dependencies::__CALLSITE::META", + "section": "__DATA_CONST,__const", + "bytes": 30088 + }, + { + "name": "::augment_subcommands", + "section": "__TEXT,__text", + "bytes": 29968 + }, + { + "name": "unicode_id_start::tables::LEAF", + "section": "__TEXT,__const", + "bytes": 29568 + }, + { + "name": "::get_matches_with", + "section": "__TEXT,__text", + "bytes": 29340 + }, + { + "name": "::instantiate_chunk::{closure#0}", + "section": "__TEXT,__text", + "bytes": 29084 + }, + { + "name": ">::run_inner::{closure#0}", + "section": "__TEXT,__text", + "bytes": 29040 + }, + { + "name": "_ts_small_parse_table_map", + "section": "__TEXT,__const", + "bytes": 28192 + }, + { + "name": "< as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::<&mut ::deserialize_map::MA>", + "section": "__TEXT,__text", + "bytes": 27724 + } + ], + "text_by_symbol_prefix": { + "[C or anonymous]": 2892068, + "core": 2010372, + "rolldown": 1426068, + "rolldown_binding": 723692, + "vp_pm_cli": 674912, + "hashbrown": 613344, + "alloc": 564012, + "oxc_ast": 529208, + "oxc_ast_visit": 512744, + "napi": 502616, + "oxc_transformer": 416000, + "tokio": 373772, + "vite_plus_cli": 327176, + "std": 325140, + "oxc_minifier": 321156, + "oxc_parser": 309568, + "rustls": 309340, + "vt": 288208, + "regex_automata": 275772, + "ast_grep_config": 267856, + "serde_json": 267536, + "h2": 253068, + "oxc_traverse": 240528, + "brush_parser": 226760, + "serde_saphyr": 219216, + "clap_builder": 200116, + "regress": 195860, + "oxc_resolver": 180720, + "granit_parser": 174004, + "wax": 146496, + "rayon_core": 145048, + "vp_migration": 143120, + "regex_syntax": 140540, + "rayon": 126488, + "rolldown_plugin": 124580, + "oxc_semantic": 109316, + "oxc_isolated_declarations": 99812, + "rolldown_common": 97212, + "hyper_util": 96136, + "aho_corasick": 95908, + "vt_workspace": 93436, + "vt_plan": 92132, + "reqwest": 91908, + "oxc_ecmascript": 84512, + "annotate_snippets": 82656, + "pnp": 69636, + "hyper": 69532, + "rolldown_utils": 68580, + "ring": 67692, + "rolldown_dev": 64904 + } +} diff --git a/bench/binary-size/evidence/macos-vp-symbol-estimates.json b/bench/binary-size/evidence/macos-vp-symbol-estimates.json new file mode 100644 index 0000000000..588d79a9e2 --- /dev/null +++ b/bench/binary-size/evidence/macos-vp-symbol-estimates.json @@ -0,0 +1,392 @@ +{ + "path": "tmp/binary-size/vp-o3/vp.unstripped", + "raw": 9705168, + "gzip9_python_zlib": 4290221, + "sha256": "6b0ec1389e4e6a47829ae293aa7593c486beae40b93a1c6f263bdc94db318b39", + "sections": [ + { + "name": "__TEXT,__text", + "address": 4294969792, + "bytes": 6313500 + }, + { + "name": "__TEXT,__stubs", + "address": 4301283292, + "bytes": 2544 + }, + { + "name": "__TEXT,__stub_helper", + "address": 4301285836, + "bytes": 2568 + }, + { + "name": "__TEXT,__const", + "address": 4301291520, + "bytes": 1055048 + }, + { + "name": "__TEXT,__gcc_except_tab", + "address": 4302346568, + "bytes": 8292 + }, + { + "name": "__TEXT,__cstring", + "address": 4302354860, + "bytes": 106087 + }, + { + "name": "__TEXT,__unwind_info", + "address": 4302460948, + "bytes": 25760 + }, + { + "name": "__TEXT,__eh_frame", + "address": 4302486712, + "bytes": 45168 + }, + { + "name": "__DATA_CONST,__got", + "address": 4302536704, + "bytes": 136 + }, + { + "name": "__DATA_CONST,__const", + "address": 4302536840, + "bytes": 301736 + }, + { + "name": "__DATA,__la_symbol_ptr", + "address": 4302848000, + "bytes": 1696 + }, + { + "name": "__DATA,__data", + "address": 4302849696, + "bytes": 8848 + }, + { + "name": "__DATA,__thread_vars", + "address": 4302858544, + "bytes": 504 + }, + { + "name": "__DATA,__thread_data", + "address": 4302859048, + "bytes": 248 + }, + { + "name": "__DATA,__thread_bss", + "address": 4302859296, + "bytes": 680 + }, + { + "name": "__DATA,__bss", + "address": 4302859976, + "bytes": 520 + } + ], + "largest_symbol_extents": [ + { + "name": "httparse::TOKEN_MAP", + "section": "__TEXT,__const", + "bytes": 245136 + }, + { + "name": "_ecp_nistz256_precomputed", + "section": "__TEXT,__const", + "bytes": 151552 + }, + { + "name": "serde_json::read::HEX0", + "section": "__TEXT,__const", + "bytes": 150743 + }, + { + "name": "::resolve_tracing::__CALLSITE::META", + "section": "__DATA_CONST,__const", + "bytes": 147928 + }, + { + "name": "utf8_iter::UTF8_DATA", + "section": "__TEXT,__const", + "bytes": 142720 + }, + { + "name": "::resolve_for_manager", + "section": "__TEXT,__text", + "bytes": 65304 + }, + { + "name": "vp::commands::env::execute::{closure#0}", + "section": "__TEXT,__text", + "bytes": 49824 + }, + { + "name": "zmij::STATIC_DATA", + "section": "__TEXT,__const", + "bytes": 48376 + }, + { + "name": "itoa::DECIMAL_PAIRS", + "section": "__TEXT,__const", + "bytes": 41703 + }, + { + "name": "vp::commands::global::install::install::{closure#0}", + "section": "__TEXT,__text", + "bytes": 40416 + }, + { + "name": "curve25519_dalek::backend::serial::u64::constants::ED25519_BASEPOINT_TABLE_INNER_DOC_HIDDEN", + "section": "__TEXT,__const", + "bytes": 35764 + }, + { + "name": "::augment_subcommands", + "section": "__TEXT,__text", + "bytes": 35512 + }, + { + "name": "::augment_subcommands", + "section": "__TEXT,__text", + "bytes": 33080 + }, + { + "name": "::augment_subcommands", + "section": "__TEXT,__text", + "bytes": 30700 + }, + { + "name": "::from_reader::<&mut pgp::composed::message::reader::packet_body::PacketBodyReader<&mut buffer_redux::BufReader<&mut pgp::armor::reader::Dearmor, &[u8]>>>>>", + "section": "__TEXT,__text", + "bytes": 29636 + }, + { + "name": "::get_matches_with", + "section": "__TEXT,__text", + "bytes": 29104 + }, + { + "name": "vp::commands::env::doctor::execute::{closure#0}", + "section": "__TEXT,__text", + "bytes": 28748 + }, + { + "name": "which::checker::exists::__CALLSITE::META", + "section": "__DATA_CONST,__const", + "bytes": 27520 + }, + { + "name": "::from_reader::<&mut pgp::composed::message::reader::packet_body::PacketBodyReader<&mut alloc::io::buffered::bufreader::BufReader>>>", + "section": "__TEXT,__text", + "bytes": 27424 + }, + { + "name": "vp_pm_cli::resolution::resolve::resolve_for_manager::", + "section": "__TEXT,__text", + "bytes": 26532 + }, + { + "name": "vp::commands::env::list_remote::execute::{closure#0}", + "section": "__TEXT,__text", + "bytes": 26436 + }, + { + "name": "vp::commands::env::pin::execute::{closure#0}", + "section": "__TEXT,__text", + "bytes": 25564 + }, + { + "name": "::resolve_for_manager", + "section": "__TEXT,__text", + "bytes": 25128 + }, + { + "name": "_ring_core_0_17_14__k25519Precomp", + "section": "__TEXT,__const", + "bytes": 24576 + }, + { + "name": ">::verify_prehashed", + "section": "__TEXT,__text", + "bytes": 23832 + }, + { + "name": "vp_js_runtime::pgp_verify::verify_clearsigned", + "section": "__TEXT,__text", + "bytes": 23396 + }, + { + "name": "vp_pm_cli::package_manager::download_package_manager_inner::{closure#0}", + "section": "__TEXT,__text", + "bytes": 23244 + }, + { + "name": "vp_pm_cli::resolution::resolve::resolve_for_manager::", + "section": "__TEXT,__text", + "bytes": 22552 + }, + { + "name": "::from_arg_matches_mut", + "section": "__TEXT,__text", + "bytes": 22072 + }, + { + "name": "vp::commands::env::setup::execute_for_binary::{closure#0}", + "section": "__TEXT,__text", + "bytes": 20276 + }, + { + "name": "::augment_subcommands", + "section": "__TEXT,__text", + "bytes": 19540 + }, + { + "name": "vp::cli::run_command_with_options::{closure#0}", + "section": "__TEXT,__text", + "bytes": 19404 + }, + { + "name": "vp::commands::env::which::execute_package_binary::{closure#0}", + "section": "__TEXT,__text", + "bytes": 19288 + }, + { + "name": ", >::connect_to::{closure#0}::{closure#1}::{closure#0}::{closure#0}>, >::connect_to::{closure#0}::{closure#1}::{closure#0}::{closure#1}> as core::future::future::Future>::poll", + "section": "__TEXT,__text", + "bytes": 18856 + }, + { + "name": "vp::commands::implode::execute", + "section": "__TEXT,__text", + "bytes": 18528 + }, + { + "name": "vp::shim::dispatch::dispatch::{closure#0}", + "section": "__TEXT,__text", + "bytes": 18464 + }, + { + "name": "vp_js_runtime::runtime::download_runtime_with_provider::::{closure#0}::{closure#0}::{closure#0}", + "section": "__TEXT,__text", + "bytes": 17796 + }, + { + "name": "vp::main::{closure#0}", + "section": "__TEXT,__text", + "bytes": 17580 + }, + { + "name": "::augment_args", + "section": "__TEXT,__text", + "bytes": 17408 + }, + { + "name": "ring::ec::suite_b::ecdsa::signing::ECDSA_P384_SHA384_ASN1_SIGNING", + "section": "__DATA_CONST,__const", + "bytes": 17320 + }, + { + "name": "pgp::packet::signature::de::subpacket::<&mut pgp::parsing_reader::Take>>>>>", + "section": "__TEXT,__text", + "bytes": 17288 + }, + { + "name": "vp::cli::run_package_manager_command::{closure#0}", + "section": "__TEXT,__text", + "bytes": 17220 + }, + { + "name": ">::send_request::{closure#0}", + "section": "__TEXT,__text", + "bytes": 17152 + }, + { + "name": "vp::commands::upgrade::execute::{closure#0}", + "section": "__TEXT,__text", + "bytes": 16960 + }, + { + "name": "::augment_subcommands", + "section": "__TEXT,__text", + "bytes": 16828 + }, + { + "name": "vp_js_runtime::download::extract_zip", + "section": "__TEXT,__text", + "bytes": 16396 + }, + { + "name": "crc32fast::table::CRC32_TABLE", + "section": "__TEXT,__const", + "bytes": 16384 + }, + { + "name": "vp::self_setup::run::{closure#0}", + "section": "__TEXT,__text", + "bytes": 16312 + }, + { + "name": "vp_js_runtime::runtime::download_runtime_with_provider::::{closure#0}", + "section": "__TEXT,__text", + "bytes": 16064 + }, + { + "name": ">::extract_internal::<&vt_path::absolute::AbsolutePath, for<'a> fn(&'a std::path::Path) -> bool>", + "section": "__TEXT,__text", + "bytes": 15464 + } + ], + "text_by_symbol_prefix": { + "vp": 820692, + "vp_pm_cli": 687140, + "core": 627556, + "pgp": 525116, + "rustls": 305728, + "[C or anonymous]": 239504, + "tokio": 224500, + "alloc": 195920, + "clap_builder": 191100, + "std": 171224, + "serde_json": 147948, + "vp_js_runtime": 141560, + "regress": 132136, + "oxc_resolver": 106624, + "reqwest": 71912, + "hyper_util": 70356, + "hashbrown": 67964, + "ring": 67756, + "vp_shared": 63232, + "pnp": 59928, + "k256": 57776, + "hyper": 49092, + "primeorder": 48744, + "indicatif": 48256, + "num_bigint_dig": 48252, + "http": 48012, + "webpki": 46984, + "url": 46720, + "chrono": 42980, + "clap_complete": 40952, + "gimli": 32604, + "futures_util": 31796, + "vp_toolchain": 30132, + "tar": 29784, + "js_semver": 29684, + "vp_setup": 29484, + "console": 28564, + "p521": 26324, + "flate2": 26264, + "zip": 25840, + "sha1_checked": 24656, + "p384": 24184, + "cx448": 21264, + "elliptic_curve": 20136, + "tracing_subscriber": 20072, + "rustc_demangle": 19480, + "sha2": 18896, + "smallvec": 18632, + "rsa": 16624, + "simd_json": 15804 + } +} diff --git a/bench/binary-size/evidence/vp-help-smoke.json b/bench/binary-size/evidence/vp-help-smoke.json new file mode 100644 index 0000000000..a069ab152a --- /dev/null +++ b/bench/binary-size/evidence/vp-help-smoke.json @@ -0,0 +1,26 @@ +{ + "vp-o3": { + "help_median_ms": 4.6448745, + "help_samples_ms": [ + 4.773125000000003, 4.807583000000005, 4.6760829999999975, 4.845916000000006, + 4.613666000000002, 5.115124999999998, 5.151291999999988, 5.265917000000009, 5.245832999999991, + 4.335416999999994, 3.855916000000001, 4.218416999999988, 4.6997500000000025, + 5.332500000000017, 4.86241699999998, 4.872625000000019, 4.351875000000005, 4.179958000000012, + 4.329374999999996, 4.826957999999992, 4.6762079999999875, 4.578125000000016, + 4.375500000000004, 4.151500000000002, 3.888583000000001, 4.552749999999994, 4.410374999999994, + 4.872124999999977, 4.546124999999984, 4.297707999999983 + ] + }, + "vp-z": { + "help_median_ms": 5.495583500000068, + "help_samples_ms": [ + 5.3364160000000105, 4.7905409999999815, 5.102457999999976, 4.980041000000046, + 5.152874999999946, 6.120499999999973, 5.546709000000094, 5.549833000000004, 5.288583999999985, + 5.595375000000069, 5.429083999999973, 5.444458000000041, 5.689084000000011, + 5.9992500000000115, 5.277666999999986, 5.681790999999992, 5.62533300000001, 4.825250000000003, + 5.643291999999911, 8.309624999999986, 7.061542000000087, 6.708667000000057, 6.604708000000015, + 6.223375000000031, 5.986374999999988, 5.263958000000013, 5.024542000000021, 5.183124999999955, + 4.99137500000002, 5.2841659999999235 + ] + } +} diff --git a/bench/binary-size/measure.cjs b/bench/binary-size/measure.cjs new file mode 100644 index 0000000000..73008d2f82 --- /dev/null +++ b/bench/binary-size/measure.cjs @@ -0,0 +1,21 @@ +// Use the same gzip implementation and level as vp-binary-size.yml. +const { createHash } = require('node:crypto'); +const { readFileSync } = require('node:fs'); +const { gzipSync } = require('node:zlib'); + +const artifacts = Object.fromEntries( + process.argv.slice(2).map((path) => { + const bytes = readFileSync(path); + return [ + path, + { + raw: bytes.length, + gzip: gzipSync(bytes, { level: 9 }).length, + sha256: createHash('sha256').update(bytes).digest('hex'), + }, + ]; + }), +); +console.log( + JSON.stringify({ node: process.version, zlib: process.versions.zlib, artifacts }, null, 2), +); diff --git a/bench/binary-size/prototypes/embedded-artifact-compression.patch b/bench/binary-size/prototypes/embedded-artifact-compression.patch new file mode 100644 index 0000000000..d8179b541a --- /dev/null +++ b/bench/binary-size/prototypes/embedded-artifact-compression.patch @@ -0,0 +1,227 @@ +diff --git a/CHANGELOG.md b/CHANGELOG.md +index 7a8b613a..8db93097 100644 +--- a/CHANGELOG.md ++++ b/CHANGELOG.md +@@ -2,0 +3 @@ ++- **Perf** Reduce the installed binary size by compressing bundled task helpers. Helpers remain available offline and existing extracted copies are reused ([#???](https://github.com/voidzero-dev/vite-task/pull/???)). +diff --git a/Cargo.lock b/Cargo.lock +index 9e310399..32323c75 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -5122,0 +5123,2 @@ dependencies = [ ++ "xxhash-rust", ++ "zstd", +@@ -5132,0 +5135 @@ dependencies = [ ++ "zstd", +diff --git a/crates/vt_materialized_artifact/Cargo.toml b/crates/vt_materialized_artifact/Cargo.toml +index c3e96482..17db2aa4 100644 +--- a/crates/vt_materialized_artifact/Cargo.toml ++++ b/crates/vt_materialized_artifact/Cargo.toml +@@ -11,0 +12,4 @@ tempfile = { workspace = true } ++zstd = { workspace = true } ++ ++[dev-dependencies] ++xxhash-rust = { workspace = true, features = ["xxh3"] } +diff --git a/crates/vt_materialized_artifact/src/lib.rs b/crates/vt_materialized_artifact/src/lib.rs +index 175cd6b8..f18365a0 100644 +--- a/crates/vt_materialized_artifact/src/lib.rs ++++ b/crates/vt_materialized_artifact/src/lib.rs +@@ -6,3 +6,3 @@ +-//! the file content as a `&'static [u8]` at compile time via the +-//! [`artifact!`] macro (same as `include_bytes!`), and [`Materialize::at`] +-//! writes it out to disk when first needed — that materialization step is ++//! the file content at compile time via the [`artifact!`] macro, compressed ++//! when that reduces its size. [`Materialize::at`] restores the original ++//! bytes to disk when first needed — that materialization step is +@@ -41,0 +42 @@ pub struct Artifact { ++ compressed: bool, +@@ -52 +53,12 @@ impl Artifact { +- Self { name, content, hash } ++ Self { name, content, hash, compressed: false } ++ } ++ ++ /// The hash identifies the original bytes, so compression does not change cache paths. ++ #[doc(hidden)] ++ #[must_use] ++ pub const fn __new_zstd( ++ name: &'static str, ++ content: &'static [u8], ++ hash: &'static str, ++ ) -> Self { ++ Self { name, content, hash, compressed: true } +@@ -169 +181,6 @@ impl Materialize<'_> { +- tmp.as_file_mut().write_all(self.artifact.content)?; ++ if self.artifact.compressed { ++ let mut decoder = zstd::stream::read::Decoder::new(self.artifact.content)?; ++ io::copy(&mut decoder, tmp.as_file_mut())?; ++ } else { ++ tmp.as_file_mut().write_all(self.artifact.content)?; ++ } +diff --git a/crates/vt_materialized_artifact_macros/Cargo.toml b/crates/vt_materialized_artifact_macros/Cargo.toml +index f7c0effe..7a3290cc 100644 +--- a/crates/vt_materialized_artifact_macros/Cargo.toml ++++ b/crates/vt_materialized_artifact_macros/Cargo.toml +@@ -18,0 +19 @@ xxhash-rust = { workspace = true, features = ["xxh3"] } ++zstd = { workspace = true } +diff --git a/crates/vt_materialized_artifact_macros/src/lib.rs b/crates/vt_materialized_artifact_macros/src/lib.rs +index 0f7bef0a..9f506ce5 100644 +--- a/crates/vt_materialized_artifact_macros/src/lib.rs ++++ b/crates/vt_materialized_artifact_macros/src/lib.rs +@@ -12,3 +12,3 @@ +-//! The hash and the embedded bytes are two reads of the same file through +-//! different mechanisms: this macro reads it to hash, and the emitted +-//! `include_bytes!` reads it to embed. Today both stay in sync because ++//! The macro reads the file to hash and compress it. An emitted ++//! `include_bytes!` also registers the original file in dep-info. These ++//! reads stay in sync because +@@ -34 +34 @@ use syn::{ +- LitStr, Token, ++ LitByteStr, LitStr, Token, +@@ -47,2 +47,2 @@ use syn::{ +-/// Expands to `Artifact::__new(name, include_bytes!(env!(env_var)), "")` +-/// with the xxh3-128 hex of the file computed during expansion. The expansion ++/// Embeds a zstd frame when it is smaller than the original bytes, with the ++/// xxh3-128 hex of the original file computed during expansion. The expansion +@@ -73,24 +73,43 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { +- let (content, hash, guard) = if let Ok(file_path) = tracked::env_var(env_var.value()) { +- // Declare the file read before attempting it: the dependency must +- // be registered even if the read fails, so a later fix to the file +- // retriggers this macro. +- tracked::path(&file_path); +- let bytes = fs::read(&file_path).map_err(|err| { +- syn::Error::new( +- env_var.span(), +- format!( +- "`{}` points at {file_path}, which could not be read: {err}", +- env_var.value() +- ), +- ) +- })?; +- let hash = format!("{:x}", xxhash_rust::xxh3::xxh3_128(&bytes)); +- (quote!(::core::include_bytes!(::core::env!(#env_var))), hash, TokenStream::new()) +- } else { +- // Env var unset. Only the compilation context itself can tell +- // whether that is fine (rust-analyzer never has artifact-dep env +- // vars) or a real error (missing artifact dependency, build script +- // not emitting the var), so the guard lets the emitted tokens branch +- // on `cfg(rust_analyzer)` instead of guessing here. +- let message = format!( +- "`{}` is not set at compile time; declare the artifact as a Cargo artifact \ ++ let (content, hash, guard, compressed) = ++ if let Ok(file_path) = tracked::env_var(env_var.value()) { ++ // Declare the file read before attempting it: the dependency must ++ // be registered even if the read fails, so a later fix to the file ++ // retriggers this macro. ++ tracked::path(&file_path); ++ let bytes = fs::read(&file_path).map_err(|err| { ++ syn::Error::new( ++ env_var.span(), ++ format!( ++ "`{}` points at {file_path}, which could not be read: {err}", ++ env_var.value() ++ ), ++ ) ++ })?; ++ let hash = format!("{:x}", xxhash_rust::xxh3::xxh3_128(&bytes)); ++ let compressed = zstd::bulk::compress(&bytes, 19).map_err(|err| { ++ syn::Error::new(env_var.span(), format!("compressing {file_path}: {err}")) ++ })?; ++ if compressed.len() < bytes.len() { ++ let content = LitByteStr::new(&compressed, env_var.span()); ++ // Keep rustc's normal file/env dep-info as well as proc-macro tracking. ++ // This unused constant registers the input without emitting its bytes. ++ let guard = quote! { ++ const _: &[u8] = ::core::include_bytes!(::core::env!(#env_var)); ++ }; ++ (quote!(#content), hash, guard, true) ++ } else { ++ ( ++ quote!(::core::include_bytes!(::core::env!(#env_var))), ++ hash, ++ TokenStream::new(), ++ false, ++ ) ++ } ++ } else { ++ // Env var unset. Only the compilation context itself can tell ++ // whether that is fine (rust-analyzer never has artifact-dep env ++ // vars) or a real error (missing artifact dependency, build script ++ // not emitting the var), so the guard lets the emitted tokens branch ++ // on `cfg(rust_analyzer)` instead of guessing here. ++ let message = format!( ++ "`{}` is not set at compile time; declare the artifact as a Cargo artifact \ +@@ -99,5 +118,7 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { +- env_var.value() +- ); +- let guard = quote! { +- #[cfg(not(rust_analyzer))] +- ::core::compile_error!(#message); ++ env_var.value() ++ ); ++ let guard = quote! { ++ #[cfg(not(rust_analyzer))] ++ ::core::compile_error!(#message); ++ }; ++ (quote!(&[]), String::from("rust-analyzer-stub"), guard, false) +@@ -105,2 +125,0 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { +- (quote!(&[]), String::from("rust-analyzer-stub"), guard) +- }; +@@ -107,0 +127,5 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { ++ let constructor = if compressed { ++ quote!(::vt_materialized_artifact::Artifact::__new_zstd) ++ } else { ++ quote!(::vt_materialized_artifact::Artifact::__new) ++ }; +@@ -111 +135 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { +- ::vt_materialized_artifact::Artifact::__new(#name, #content, #hash) ++ #constructor(#name, #content, #hash) +diff --git a/crates/vt_materialized_artifact/tests/compression.rs b/crates/vt_materialized_artifact/tests/compression.rs +new file mode 100644 +index 00000000..476c1cb7 +--- /dev/null ++++ b/crates/vt_materialized_artifact/tests/compression.rs +@@ -0,0 +1,44 @@ ++use std::fs; ++ ++use vt_materialized_artifact::{Artifact, artifact}; ++ ++#[test] ++fn compressed_macro_preserves_content_and_cache_path() { ++ let original = include_bytes!(env!("CARGO_MANIFEST_PATH")); ++ let embedded = artifact!("manifest", "CARGO_MANIFEST_PATH"); ++ let dir = tempfile::tempdir().unwrap(); ++ let path = embedded.materialize().at(dir.path()).unwrap(); ++ assert_eq!(fs::read(&path).unwrap(), original); ++ let expected = format!("manifest_{:x}", xxhash_rust::xxh3::xxh3_128(original)); ++ assert_eq!(path.file_name().unwrap(), expected.as_str()); ++ let modified = fs::metadata(&path).unwrap().modified().unwrap(); ++ assert_eq!(embedded.materialize().at(dir.path()).unwrap(), path); ++ assert_eq!(fs::metadata(&path).unwrap().modified().unwrap(), modified); ++ assert_eq!(fs::read_dir(dir.path()).unwrap().count(), 1); ++} ++ ++#[test] ++fn corrupt_compressed_data_is_not_published() { ++ let embedded = Artifact::__new_zstd("broken", b"not a zstd frame", "hash"); ++ let dir = tempfile::tempdir().unwrap(); ++ assert!(embedded.materialize().at(dir.path()).is_err()); ++ assert_eq!(fs::read_dir(dir.path()).unwrap().count(), 0); ++} ++ ++#[test] ++fn raw_and_compressed_content_materialize_identically() { ++ let bytes = b"payload payload payload payload payload payload"; ++ let compressed = zstd::bulk::compress(bytes, 19).unwrap(); ++ let compressed = Box::leak(compressed.into_boxed_slice()); ++ let raw = Artifact::__new("raw", bytes, "hash"); ++ let compressed = Artifact::__new_zstd("compressed", compressed, "hash"); ++ let dir = tempfile::tempdir().unwrap(); ++ let raw_path = raw.materialize().executable().at(dir.path()).unwrap(); ++ let compressed_path = compressed.materialize().executable().at(dir.path()).unwrap(); ++ assert_eq!(fs::read(raw_path).unwrap(), fs::read(&compressed_path).unwrap()); ++ #[cfg(unix)] ++ { ++ use std::os::unix::fs::PermissionsExt; ++ assert_eq!(fs::metadata(compressed_path).unwrap().permissions().mode() & 0o777, 0o755); ++ } ++} diff --git a/bench/binary-size/prototypes/pm-cli-deduplication.patch b/bench/binary-size/prototypes/pm-cli-deduplication.patch new file mode 100644 index 0000000000..4bf6f09c97 --- /dev/null +++ b/bench/binary-size/prototypes/pm-cli-deduplication.patch @@ -0,0 +1,80 @@ +diff --git a/crates/vp_pm_cli/src/resolution/resolve.rs b/crates/vp_pm_cli/src/resolution/resolve.rs +index 3abb67dc4..d0d0606ba 100644 +--- a/crates/vp_pm_cli/src/resolution/resolve.rs ++++ b/crates/vp_pm_cli/src/resolution/resolve.rs +@@ -65,0 +66,11 @@ where ++ bind_manager_environment(manager, &mut resolution)?; ++ Ok(resolution) ++} ++ ++// This work is independent of the command's argument type. Keep one copy for ++// all command variants, including when release LTO can see the generic caller. ++#[inline(never)] ++fn bind_manager_environment( ++ manager: &PackageManager, ++ resolution: &mut Resolution, ++) -> Result<(), Error> { +@@ -97 +108 @@ where +- Ok(resolution) ++ Ok(()) +diff --git a/crates/vp_pm_cli/src/resolution/support.rs b/crates/vp_pm_cli/src/resolution/support.rs +index 448202cad..76fc54603 100644 +--- a/crates/vp_pm_cli/src/resolution/support.rs ++++ b/crates/vp_pm_cli/src/resolution/support.rs +@@ -68 +68 @@ pub(crate) struct VersionRule { +- original: String, ++ original: &'static str, +@@ -96 +96 @@ impl PmSupportRule { +- original: &str, ++ original: &'static str, +@@ -99,4 +99 @@ impl PmSupportRule { +- Self { +- name, +- version: Some(VersionRule { operator, original: original.to_string(), normalized }), +- } ++ Self { name, version: Some(VersionRule { operator, original, normalized }) } +@@ -138,0 +136,29 @@ mod tests { ++ #[test] ++ fn version_rules_keep_release_and_prerelease_boundaries() { ++ #[pm_args] ++ #[derive(clap::Args)] ++ struct VersionArgs { ++ #[arg(long, not_supported(bun < "1.4"))] ++ release: bool, ++ #[arg(long, not_supported(bun < "1.4.0-beta.2"))] ++ prerelease: bool, ++ } ++ ++ let args = VersionArgs { release: true, prerelease: true }; ++ for (version, messages) in [ ++ ( ++ "1.4.0-beta.1", ++ Some( ++ "bun < 1.4 does not support --release.\nbun < 1.4.0-beta.2 does not support --prerelease.", ++ ), ++ ), ++ ("1.4.0-beta.2", Some("bun < 1.4 does not support --release.")), ++ ("1.4.0", None), ++ ("1.4.1", None), ++ ] { ++ let mut diagnostics = Diagnostics::default(); ++ args.diagnose(&bun(version), &mut diagnostics); ++ assert_eq!(diagnostics.unsupported_options_error().as_deref(), messages, "{version}"); ++ } ++ } ++ +diff --git a/crates/vp_pm_cli_macros/src/lib.rs b/crates/vp_pm_cli_macros/src/lib.rs +index eaa4f72d3..fbbdd988c 100644 +--- a/crates/vp_pm_cli_macros/src/lib.rs ++++ b/crates/vp_pm_cli_macros/src/lib.rs +@@ -446,0 +447,7 @@ impl Clause { ++ let version = Version::parse(normalized).expect("validated version literal"); ++ let normalized = if version.pre.is_empty() && version.build.is_empty() { ++ let (major, minor, patch) = (version.major, version.minor, version.patch); ++ quote!(::semver::Version::new(#major, #minor, #patch)) ++ } else { ++ quote!(::semver::Version::parse(#normalized).expect("pm_args emitted a valid semver version")) ++ }; +@@ -452 +459 @@ impl Clause { +- ::semver::Version::parse(#normalized).expect("pm_args emitted a valid semver version"), ++ #normalized, diff --git a/bench/binary-size/results.json b/bench/binary-size/results.json new file mode 100644 index 0000000000..45f846655d --- /dev/null +++ b/bench/binary-size/results.json @@ -0,0 +1,429 @@ +{ + "source_commit": "006e9700a62aab9d791889cdfaac31a67767e63d", + "reference_url": "https://github.com/voidzero-dev/vite-plus/pull/1783#issuecomment-5308800690", + "reference_head_commit": "1438b2b217b4ab48e9fa7a36feee61ebfc9fd41c", + "target": "At least 50% reduction for each individual binary; report raw and gzip separately.", + "ci_baselines": { + "x86_64-unknown-linux-gnu": { + "vp": { + "path": "target/x86_64-unknown-linux-gnu/release/vp", + "raw": 10709192, + "gzip": 4721549 + }, + "napi": { + "path": "packages/cli/binding/vite-plus.linux-x64-gnu.node", + "raw": 36207360, + "gzip": 14476751 + }, + "cliDist": { + "path": "packages/cli/dist", + "files": 208, + "raw": 2304913 + }, + "coreDist": { + "path": "packages/core/dist", + "files": 108, + "raw": 4282554 + } + }, + "aarch64-apple-darwin": { + "vp": { + "path": "target/aarch64-apple-darwin/release/vp", + "raw": 7991312, + "gzip": 4133413 + }, + "napi": { + "path": "packages/cli/binding/vite-plus.darwin-arm64.node", + "raw": 43540800, + "gzip": 18850341 + } + }, + "x86_64-pc-windows-msvc": { + "vp": { + "path": "target/x86_64-pc-windows-msvc/release/vp.exe", + "raw": 8687616, + "gzip": 3836041 + }, + "napi": { + "path": "packages/cli/binding/vite-plus.win32-x64-msvc.node", + "raw": 32083968, + "gzip": 13121406 + }, + "trampoline": { + "path": "target/x86_64-pc-windows-msvc/release/vp-shim.exe", + "raw": 13824, + "gzip": 7258 + }, + "installer": { + "path": "target/x86_64-pc-windows-msvc/release/vp-setup.exe", + "raw": 3808768, + "gzip": 1866173 + } + } + }, + "local_measurements": { + "node": "v22.23.2", + "zlib": "1.2.12", + "artifacts": { + "tmp/binary-size/vp-o3/vp": { + "raw": 7963056, + "gzip": 3955720, + "sha256": "35c91a3e34d8544f0cf50ab976b9cf9227855ec6d3573f8478985432d6a18716" + }, + "tmp/binary-size/vp-z/vp": { + "raw": 4943936, + "gzip": 2878525, + "sha256": "c9501b136ebf46377738080c51e5794d936c3e53c0f4405c68d467e443d1f02b" + }, + "tmp/binary-size/vp-z-std/vp": { + "raw": 4631296, + "gzip": 2721957, + "sha256": "d32a32c349541503aa9ae5ab852027999c4e1d74a42b13bfc5942140cfc1a6ff" + }, + "tmp/binary-size/napi-o3/vite-plus.node": { + "raw": 43305840, + "gzip": 17932754, + "sha256": "12f03ee0f194a9d3bfdf266fe15eda81738dded7afad7aa1016f54361ff8740e" + }, + "tmp/binary-size/vp-z-std-pm/vp": { + "raw": 4614576, + "gzip": 2711066, + "sha256": "6511ed7b5652d9dfd2113fce91f5475e252dcaccac0f5dfa3ec01daccf8091ec" + }, + "tmp/binary-size/windows-vp-o3/vp.exe": { + "raw": 8688640, + "gzip": 3752298, + "sha256": "09a38ae775e58f4463cc2daf03dcf907f217b8c5d206d2d44eccb11d37e2187c" + }, + "tmp/binary-size/windows-vp-z/vp.exe": { + "raw": 5436928, + "gzip": 2502076, + "sha256": "32db03d309f557221218d1ba971ffa810b030ff4b4aa356f8812e450fa7e3ccd" + }, + "tmp/binary-size/linux-vp-z-std/vp": { + "raw": 7229544, + "gzip": 3236902, + "sha256": "9a86e3252bd2d9a262a3b8d85ada8b78ab6919d386728fb4efcf3cc08140a8c9" + }, + "tmp/binary-size/windows-installer-o3/vp-setup.exe": { + "raw": 3808256, + "gzip": 1833351, + "sha256": "63de54eda776fd07f67427959532ef60f15c8c5d0d8aabb46cd45a0147cce862" + }, + "tmp/binary-size/windows-installer-z/vp-setup.exe": { + "raw": 2947072, + "gzip": 1476680, + "sha256": "e54afc33c9d1f5f98bd81b3d11f98bac285cf841e4cf465884392d2e3ecb8d94" + }, + "tmp/binary-size/trampoline-target/x86_64-pc-windows-msvc/release/vp-shim.exe": { + "raw": 13824, + "gzip": 7080, + "sha256": "d7e59b12000638ddfb0ad911650ea486bee1f2c6fe817cef6d7d997dbdf494f8" + }, + "tmp/binary-size/napi-z/vite-plus.node": { + "raw": 31779504, + "gzip": 13785606, + "sha256": "57cd56ba928f1b01fb31fb4e327ce06a72c682b66629e9aa8351b2da7b89bff8" + }, + "tmp/binary-size/napi-compressed-o3/vite-plus.node": { + "raw": 32980192, + "gzip": 16362251, + "sha256": "e939919465a16685da9867456bdb48931fc785ae09d77bbde907e011a2170f10" + }, + "tmp/binary-size/linux-vp-o3/vp": { + "raw": 10667136, + "gzip": 4596742, + "sha256": "3bce61ce18dc8064c4b27c59640bf82f22f6559d8db3b035496b223af6149ad1" + }, + "tmp/binary-size/linux-vp-z/vp": { + "raw": 7500528, + "gzip": 3379698, + "sha256": "edef36e23dc494f12fc53ea91cd543dc590634e8b1d9effe6243e4417b6d7416" + }, + "tmp/binary-size/vp-o3-pm/vp": { + "raw": 7897392, + "gzip": 3929795, + "sha256": "7e0b3781b07862b2be2a585e7d2834af25c43d3558e214948a303257b649864f" + }, + "tmp/binary-size/linux-napi-o3/vite-plus.node": { + "raw": 35672200, + "gzip": 13924515, + "sha256": "0a22ebb63b92bcbfd4742f648f1e2a7b42623bb2c1d05510d1d308c34cfde0af" + }, + "tmp/binary-size/windows-napi-o3/vite-plus.node": { + "raw": 32076288, + "gzip": 12825527, + "sha256": "92dfb2b0094ab7fdf4b4979e3379b476db61f53030eb107d52c41639669a2572" + }, + "tmp/binary-size/linux-napi-compressed-o3/vite-plus.node": { + "raw": 35016840, + "gzip": 13864549, + "sha256": "58c4ff98128eb411d3c8c0f7999b3e59668f35edb2438600523a1d5226cf3b18" + }, + "tmp/binary-size/windows-napi-compressed-o3/vite-plus.node": { + "raw": 31751680, + "gzip": 12798980, + "sha256": "0671edcd3b2bdcd9a0a3e25383640c985e048c8c2b9fd37efeffd392cb8a8fc7" + } + } + }, + "constraints": [ + "Preserve existing commands and offline task helpers.", + "Preserve signature verification and panic diagnostics.", + "Benchmark performance-sensitive Oxc/Rolldown code before changing its optimization level.", + "Splitting or moving payloads does not count as a reduction in total shipped bytes." + ], + "findings": [ + { + "id": "vp-opt-z", + "measured": true, + "raw_reduction_percent": 37.91408725494333, + "scope": "macOS ARM64 standalone vp; same local source and toolchain" + }, + { + "id": "vp-opt-z-build-std", + "measured": true, + "raw_reduction_percent": 41.84021812731192, + "scope": "macOS ARM64; backtrace and panic-unwind std features retained; optimize_for_size enabled" + }, + { + "id": "napi-opt-z", + "measured": true, + "raw_reduction_percent": 26.616123829949956, + "status": "Do not ship as a blanket profile: synthetic transform/minify kernels approximately 2.8x slower." + }, + { + "id": "embedded-artifacts", + "measured": true, + "raw_reduction_percent": 23.84354627459022, + "gzip_reduction_percent": 8.757734590013333, + "scope": "macOS ARM64 NAPI at original opt-level=3. Upstream patch in ../binary-size-vite-task." + }, + { + "id": "tree-sitter", + "measured": false, + "scope": "Three C grammars retained (Bash, TypeScript, TSX). TypeScript and TSX parser objects are approximately 1.4 MB each. Evaluate language specialization or Oxc migration; do not count static archive bytes as final binary savings." + }, + { + "id": "pm-cli-generics", + "measured": true, + "scope": "macOS ARM64 at original O3 profile. Extraction of shared environment setup plus compile-time construction of release semver rules. Adds 16,720 bytes of savings after z and size-oriented std. Sibling worktree: ../binary-size-pm-cli.", + "raw_reduction_bytes": 65664, + "raw_reduction_percent": 0.8246080399283873 + }, + { + "id": "linux-vp-opt-z", + "measured": true, + "raw_reduction_percent": 29.685643831671406, + "scope": "Linux x64 cross build with cargo-zigbuild; RUSTFLAGS=--cfg tokio_unstable omits unsupported GNU linker warning option." + }, + { + "id": "linux-vp-opt-z-build-std", + "measured": true, + "raw_reduction_percent": 32.22600705568956, + "scope": "Linux x64 cross build; not executed on Linux." + }, + { + "id": "windows-vp-opt-z", + "measured": true, + "raw_reduction_percent": 37.424867413081905, + "scope": "Windows x64 cross build; not executed on Windows." + }, + { + "id": "windows-installer-opt-z", + "measured": true, + "raw_reduction_percent": 22.613605808012906, + "scope": "Optimize installer dependencies for size as well as the installer crate. Cross build; not executed on Windows." + }, + { + "id": "windows-trampoline", + "measured": true, + "raw_reduction_percent": 0, + "scope": "Baseline reproduced at 13,824 bytes. No new reduction demonstrated." + }, + { + "id": "linux-napi-compressed-helpers", + "measured": true, + "raw_reduction_percent": 1.8371729245743151, + "gzip_reduction_percent": 0.4306505468951727, + "scope": "Matched x64 cross builds with original opt-level=3. Not executed on the target platform." + }, + { + "id": "windows-napi-compressed-helpers", + "measured": true, + "raw_reduction_percent": 1.0119874219859826, + "gzip_reduction_percent": 0.20698564667167574, + "scope": "Matched x64 cross builds with original opt-level=3. Not executed on the target platform." + } + ], + "not_complete": [ + "No individual artifact has a validated production-ready 50% reduction.", + "Full application performance and CLI regression tests have not been run.", + "Linux and Windows cross-built binaries have not been executed on their target platforms." + ], + "toolchain": "rustc 1.99.0-nightly (73dc9167f 2026-08-01)\nbinary: rustc\ncommit-hash: 73dc9167f1cd099e525c9ade2e068d1907b78564\ncommit-date: 2026-08-01\nhost: aarch64-apple-darwin\nrelease: 1.99.0-nightly\nLLVM version: 22.1.8", + "upstream_patch_base": "9ba4cc93379cf2d7a6c7e657285bb8a00e8339dc", + "caveats": [ + "Local artifacts are not byte-identical to the canonical CI artifacts. Percentages use matched local builds, never CI-to-local comparisons.", + "Unstripped symbol extents include alignment and anonymous data. Large constant extents cannot be attributed wholly to the preceding named symbol.", + "All profile variants preserve panic abort hooks; no fmt-debug suppression or immediate-abort strategy was used.", + "Profile and compression savings must not be added: no combined NAPI variant has been measured. The global size profile fails the synthetic performance screen." + ], + "compression_benchmark_medians_ms": { + "napi-o3": { + "parse": 4.362104499999987, + "transform": 2.1320625000000035, + "minify": 2.0724164999999743, + "invalidSyntax": 0.002728999999987991 + }, + "napi-compressed-o3": { + "parse": 4.376646000000001, + "transform": 2.1449790000000064, + "minify": 2.0550839999999653, + "invalidSyntax": 0.002625000000023192 + } + }, + "compression_output_hashes_match": true, + "validation": { + "compression": "3 materialization tests, 2 shebang tests, 1 spawn test, targeted clippy passed on macOS. Linux and Windows x64 NAPI cross builds also passed; target-platform runtime tests remain outstanding.", + "pm_prototype": "724 resolution tests, 10 macro tests, targeted clippy passed on macOS.", + "vp_smoke": "Four native help outputs and exit codes match baseline, z, z+std, z+std+PM.", + "napi": "Synthetic parse/transform/minify/invalid-syntax output hashes match. Eight interleaved process runs compare baseline with compression." + }, + "napi_profile_benchmark": { + "napi-o3": { + "parse": { + "median_ms": 4.6273330000000215, + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 2.1946250000000873, + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 2.1785419999998794, + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.0027919999999994616, + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + }, + "napi-z": { + "parse": { + "median_ms": 8.688375000000065, + "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", + "output_bytes": 480411 + }, + "transform": { + "median_ms": 6.041207999999983, + "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", + "output_bytes": 559715 + }, + "minify": { + "median_ms": 6.149583000000121, + "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", + "output_bytes": 301699 + }, + "invalidSyntax": { + "median_ms": 0.005958999999847947, + "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", + "output_bytes": 287 + } + } + }, + "prototypes": { + "compression": { + "repository": "https://github.com/voidzero-dev/vite-task", + "base": "9ba4cc93379cf2d7a6c7e657285bb8a00e8339dc", + "branch": "perf/compress-embedded-artifacts", + "worktree": "../binary-size-vite-task", + "patch": "prototypes/embedded-artifact-compression.patch" + }, + "pm_cli": { + "repository": "https://github.com/voidzero-dev/vite-plus", + "base": "006e9700a62aab9d791889cdfaac31a67767e63d", + "branch": "perf/pm-cli-size-prototype", + "worktree": "../binary-size-pm-cli", + "patch": "prototypes/pm-cli-deduplication.patch" + } + }, + "remaining_budgets": [ + { + "artifact": "macOS ARM64 vp", + "baseline_raw": 7963056, + "candidate_raw": 4614576, + "raw_reduction_percent": 42.050187767108504, + "target_raw": 3981528, + "additional_bytes_to_remove": 633048, + "additional_fraction_of_candidate_percent": 13.71844347129617 + }, + { + "artifact": "Linux x64 vp", + "baseline_raw": 10667136, + "candidate_raw": 7229544, + "raw_reduction_percent": 32.22600705568956, + "target_raw": 5333568, + "additional_bytes_to_remove": 1895976, + "additional_fraction_of_candidate_percent": 26.225388489232515 + }, + { + "artifact": "Windows x64 vp", + "baseline_raw": 8688640, + "candidate_raw": 5436928, + "raw_reduction_percent": 37.424867413081905, + "target_raw": 4344320, + "additional_bytes_to_remove": 1092608, + "additional_fraction_of_candidate_percent": 20.096054242395706 + }, + { + "artifact": "macOS ARM64 NAPI", + "baseline_raw": 43305840, + "candidate_raw": 32980192, + "raw_reduction_percent": 23.84354627459022, + "target_raw": 21652920, + "additional_bytes_to_remove": 11327272, + "additional_fraction_of_candidate_percent": 34.345682402334106 + }, + { + "artifact": "Linux x64 NAPI", + "baseline_raw": 35672200, + "candidate_raw": 35016840, + "raw_reduction_percent": 1.8371729245743151, + "target_raw": 17836100, + "additional_bytes_to_remove": 17180740, + "additional_fraction_of_candidate_percent": 49.064221671629994 + }, + { + "artifact": "Windows x64 NAPI", + "baseline_raw": 32076288, + "candidate_raw": 31751680, + "raw_reduction_percent": 1.0119874219859826, + "target_raw": 16038144, + "additional_bytes_to_remove": 15713536, + "additional_fraction_of_candidate_percent": 49.488833346770946 + }, + { + "artifact": "Windows x64 installer", + "baseline_raw": 3808256, + "candidate_raw": 2947072, + "raw_reduction_percent": 22.613605808012906, + "target_raw": 1904128, + "additional_bytes_to_remove": 1042944, + "additional_fraction_of_candidate_percent": 35.38915913829048 + }, + { + "artifact": "Windows x64 trampoline", + "baseline_raw": 13824, + "candidate_raw": 13824, + "raw_reduction_percent": 0.0, + "target_raw": 6912, + "additional_bytes_to_remove": 6912, + "additional_fraction_of_candidate_percent": 50.0 + } + ] +} From 36d404295223c8cfdd8dc23a5f3363a90d2bdebd Mon Sep 17 00:00:00 2001 From: MK Date: Fri, 16 Oct 2026 21:28:41 +0800 Subject: [PATCH 02/11] chore: remove preview binary size report tests --- .../scripts/__tests__/preview-binary-size.mjs | 223 ------------------ .github/workflows/publish-preview.yml | 2 - 2 files changed, 225 deletions(-) delete mode 100644 .github/scripts/__tests__/preview-binary-size.mjs diff --git a/.github/scripts/__tests__/preview-binary-size.mjs b/.github/scripts/__tests__/preview-binary-size.mjs deleted file mode 100644 index 6718cdddc8..0000000000 --- a/.github/scripts/__tests__/preview-binary-size.mjs +++ /dev/null @@ -1,223 +0,0 @@ -import assert from 'node:assert/strict'; -import { execFileSync } from 'node:child_process'; -import { mkdir, mkdtemp, readFile, rm, symlink, writeFile } from 'node:fs/promises'; -import { tmpdir } from 'node:os'; -import { dirname, join } from 'node:path'; -import { test } from 'node:test'; - -import { - binaryArtifacts, - comparePreviewBinaries, - createReleaseLoader, - measureBinary, - postSizeComment, - renderSizeReport, - targets, -} from '../preview-binary-size.mjs'; - -const release = { tag_name: 'v1.3.0', draft: false, prerelease: false, assets: [] }; -const headSha = 'a'.repeat(40); -const runUrl = 'https://github.com/voidzero-dev/vite-plus/actions/runs/123'; - -async function temporaryDirectory(t) { - const directory = await mkdtemp(join(tmpdir(), 'preview-size-test-')); - t.after(() => rm(directory, { recursive: true, force: true })); - return directory; -} - -test('compares every shipped binary without running preview content', async (t) => { - const artifactDirectory = await temporaryDirectory(t); - const payload = Buffer.from('This is not executable code.\n'.repeat(80)); - const artifacts = binaryArtifacts(); - const matrix = await readFile( - new URL('../../workflows/reusable-release-build.yml', import.meta.url), - 'utf8', - ); - assert.deepEqual( - targets.map(([target]) => target).sort(), - [...matrix.matchAll(/- target: (\S+)/g)].map((match) => match[1]).sort(), - ); - assert.equal(artifacts.length, 20); - for (const artifact of artifacts) { - const path = join(artifactDirectory, artifact.path); - await mkdir(dirname(path), { recursive: true }); - await writeFile(path, payload); - } - const requested = []; - const body = await comparePreviewBinaries({ - release, - artifactDirectory, - headSha, - runUrl, - loadRelease: async (artifact) => { - requested.push(artifact.path); - return Buffer.concat([payload, payload]); - }, - }); - assert.equal(requested.length, 20); - assert.equal((body.match(/-50\.00%/g) ?? []).length, 20); - assert.match(body, /gzip -9 sizes/); - assert.match(body, /v1\.3\.0/); - for (const artifact of artifacts) assert.ok(body.includes(artifact.name)); -}); - -test('reports increases, unchanged sizes, and unavailable release binaries', () => { - const body = renderSizeReport({ - release, - headSha, - runUrl, - rows: [ - { name: 'Increased', baseline: { raw: 100, gzip: 50 }, preview: { raw: 150, gzip: 75 } }, - { name: 'Unchanged', baseline: { raw: 100, gzip: 50 }, preview: { raw: 100, gzip: 50 } }, - { name: 'New', baseline: null, preview: { raw: 100, gzip: 50 } }, - ], - }); - assert.match(body, /\+50 B \(\+50\.00%\)/); - assert.match(body, /0 B \(0\.00%\)/); - assert.match(body, /New \| — \| 100 B \| Not in release/); - assert.throws(() => measureBinary(Buffer.alloc(0)), /empty/); - assert.throws(() => renderSizeReport({ release: { ...release, prerelease: true } }), /stable/); - assert.throws(() => renderSizeReport({ release, headSha: 'invalid' }), /commit/); -}); - -test('fails on missing preview binaries and refuses symbolic links', async (t) => { - const artifactDirectory = await temporaryDirectory(t); - const options = { release, artifactDirectory, headSha, runUrl, loadRelease: async () => null }; - await assert.rejects(comparePreviewBinaries(options), { code: 'ENOENT' }); - const first = join(artifactDirectory, binaryArtifacts()[0].path); - await mkdir(dirname(first), { recursive: true }); - const other = join(artifactDirectory, 'other'); - await writeFile(other, 'unrelated file'); - await symlink(other, first); - await assert.rejects(comparePreviewBinaries(options), /regular preview binary/); -}); - -test('loads matching release archives and exact-version npm binaries without installation', async (t) => { - const directory = await temporaryDirectory(t); - const payload = Buffer.from('native binary bytes'); - await mkdir(join(directory, 'package')); - await writeFile(join(directory, 'package/vite-plus.darwin-arm64.node'), payload); - await writeFile(join(directory, 'vp.exe'), payload); - await writeFile(join(directory, 'vp-shim.exe'), payload); - const tgz = join(directory, 'napi.tgz'); - const zip = join(directory, 'cli.zip'); - execFileSync('tar', ['-czf', tgz, '-C', directory, 'package']); - execFileSync('zip', ['-q', zip, 'vp.exe', 'vp-shim.exe'], { cwd: directory }); - const responses = new Map([ - [ - 'https://registry.npmjs.org/%40voidzero-dev%2Fvite-plus-darwin-arm64/1.3.0', - JSON.stringify({ - name: '@voidzero-dev/vite-plus-darwin-arm64', - version: '1.3.0', - dist: { tarball: 'https://registry.npmjs.org/native.tgz' }, - }), - ], - ['https://registry.npmjs.org/native.tgz', await readFile(tgz)], - [ - `https://github.com/voidzero-dev/vite-plus/releases/download/v1.3.0/vp-x86_64-pc-windows-msvc.zip`, - await readFile(zip), - ], - ]); - const requests = []; - const originalFetch = globalThis.fetch; - t.after(() => { - globalThis.fetch = originalFetch; - }); - globalThis.fetch = async (url) => { - requests.push(url); - return responses.has(url) - ? new Response(responses.get(url)) - : new Response('', { status: 404 }); - }; - const loader = createReleaseLoader( - { - ...release, - assets: [{ name: 'vp-x86_64-pc-windows-msvc.zip' }], - }, - directory, - ); - const artifacts = binaryArtifacts(); - for (const path of [ - 'vite-plus-native-aarch64-apple-darwin/vite-plus.darwin-arm64.node', - 'vp-global-cli-x86_64-pc-windows-msvc/vp.exe', - 'vp-global-cli-x86_64-pc-windows-msvc/vp-shim.exe', - ]) { - assert.deepEqual(await loader(artifacts.find((artifact) => artifact.path === path)), payload); - } - assert.equal(requests.filter((url) => url.endsWith('.zip')).length, 1); - assert.equal( - await loader(artifacts.find((artifact) => artifact.package?.endsWith('darwin-x64'))), - null, - ); - assert.equal( - await loader(artifacts.find((artifact) => artifact.asset?.startsWith('vp-setup-'))), - null, - ); - responses.set( - 'https://registry.npmjs.org/%40voidzero-dev%2Fvite-plus-darwin-arm64/1.3.0', - JSON.stringify({ name: 'wrong', version: '1.3.0' }), - ); - await assert.rejects(loader(artifacts[1]), /Unexpected npm package/); -}); - -function commentFixture() { - const writes = []; - const pr = { state: 'open', head: { sha: headSha }, labels: [{ name: 'preview-build' }] }; - const comments = []; - return { - pr, - comments, - writes, - args: { - github: { - rest: { - pulls: { get: async () => ({ data: pr }) }, - issues: { - listComments: () => {}, - createComment: async (request) => writes.push({ action: 'create', ...request }), - updateComment: async (request) => writes.push({ action: 'update', ...request }), - }, - }, - paginate: async () => comments, - }, - context: { - repo: { owner: 'voidzero-dev', repo: 'vite-plus' }, - payload: { workflow_run: { head_sha: headSha } }, - }, - core: { info: () => {} }, - prNumber: 123, - body: '\nreport', - }, - }; -} - -test('creates one report and updates only the bot-owned size comment', async () => { - const { args, comments, writes } = commentFixture(); - comments.push({ id: 1, user: { login: 'contributor' }, body: args.body }); - await postSizeComment(args); - assert.equal(writes[0].action, 'create'); - assert.equal(writes[0].issue_number, 123); - comments.push({ id: 2, user: { login: 'github-actions[bot]' }, body: args.body }); - await postSizeComment(args); - assert.equal(writes[1].action, 'update'); - assert.equal(writes[1].comment_id, 2); -}); - -test('does not post if the PR advances, closes, or loses its preview label', async () => { - for (const change of [ - (pr) => { - pr.head.sha = 'b'.repeat(40); - }, - (pr) => { - pr.state = 'closed'; - }, - (pr) => { - pr.labels = []; - }, - ]) { - const { args, pr, writes } = commentFixture(); - change(pr); - await postSizeComment(args); - assert.deepEqual(writes, []); - } -}); diff --git a/.github/workflows/publish-preview.yml b/.github/workflows/publish-preview.yml index f74a62361a..6ef043c78d 100644 --- a/.github/workflows/publish-preview.yml +++ b/.github/workflows/publish-preview.yml @@ -51,8 +51,6 @@ jobs: package-manager-cache: false - name: Test preview documentation origin run: node --test .github/scripts/__tests__/preview-docs-origin.mjs - - name: Test preview binary size report - run: node --test .github/scripts/__tests__/preview-binary-size.mjs - name: Resolve preview documentation origin id: docs uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 From 747ff8680cdda0b9209ec5eb6de2210eaa99844b Mon Sep 17 00:00:00 2001 From: MK Date: Fri, 16 Oct 2026 22:00:44 +0800 Subject: [PATCH 03/11] bench: measure standalone CLI size profile performance --- bench/binary-size/README.md | 67 +- bench/binary-size/benchmark-cli.py | 249 + .../evidence/cli-profile-benchmark.json | 5604 +++++++++++++++++ bench/binary-size/results.json | 133 +- 4 files changed, 6050 insertions(+), 3 deletions(-) create mode 100644 bench/binary-size/benchmark-cli.py create mode 100644 bench/binary-size/evidence/cli-profile-benchmark.json diff --git a/bench/binary-size/README.md b/bench/binary-size/README.md index 7d7e390891..e4f87e7039 100644 --- a/bench/binary-size/README.md +++ b/bench/binary-size/README.md @@ -81,6 +81,50 @@ on their target platforms. Linux builds use `cargo zigbuild` with `RUSTFLAGS='--cfg tokio_unstable'` to omit the GNU linker warning flag that Zig rejects. Windows builds use `cargo xwin` with Homebrew LLVM on `PATH`. +### Standalone CLI performance + +The CLI timing comparison uses fresh `opt-level=3` and `opt-level="z"` release +builds from commit `a4e9c5932`, with the same pinned toolchain, target, features, +and remaining profile settings. Measurements run on an Apple M4 Max with macOS +ARM64. These are separate from the earlier NAPI experiments below. + +Aggregate median wall times: + +| Workload | `3` | `z` | Extra time | Change | +| --------------------------------------------------- | -----------: | -----------: | ---------: | -----: | +| `vp --help` | 4.082 ms | 4.156 ms | 0.074 ms | +1.8% | +| `vp env current node --json` | 4.350 ms | 4.497 ms | 0.147 ms | +3.4% | +| Same command, 20 directories below the project root | 4.953 ms | 5.130 ms | 0.178 ms | +3.6% | +| `vp env which node` | 4.361 ms | 4.496 ms | 0.134 ms | +3.1% | +| `vp node -e ''` | 32.960 ms | 33.063 ms | 0.103 ms | +0.3% | +| `vp env exec npm --version` | 70.226 ms | 70.221 ms | -0.004 ms | -0.01% | +| `vp env install 22.13.1`, already installed | 4.231 ms | 4.374 ms | 0.143 ms | +3.4% | +| Same install, runtime absent, loopback mirror | 1,067.934 ms | 1,127.105 ms | 59.171 ms | +5.5% | + +The three fresh-install rounds show slowdowns of 7.2%, 6.9%, and 4.8%. +Node startup changes by less than 0.5% in every round; npm startup differences +change sign and remain within 0.2%. Short environment commands consistently add +about 0.1–0.2 ms. These builds reduce the executable from 7,991,312 to 4,954,496 +bytes (38.0%). The complete samples, CPU times, output hashes, and binary hashes +are in [the CLI timing evidence](evidence/cli-profile-benchmark.json). + +[benchmark-cli.py](benchmark-cli.py) runs each command in a new process with an +isolated `VP_HOME` and setup markers. Each round uses three warmups per variant +and balanced, randomized adjacent pairs. Ordinary commands have 120 pairs per +round; fresh installs have 10. There are three rounds. Wall times include process +launch and output capture. OS filesystem caches remain warm. + +The installation workload uses the official Node.js `22.13.1` archive and signed +checksum file served from memory over loopback HTTP. It includes signature and +checksum verification, archive extraction, and installation. Removal of the prior +installation and the resulting binary's hash check are outside the timer. No +internet transfer is timed. Other workloads make no mirror requests. + +The runner checks successful exit codes and matching stdout/stderr for every +invocation, and checks the installed Node.js binary after every fresh install. +These measurements do not cover cold filesystem caches, Linux, Windows, full +application builds, or all package-manager operations. + ### NAPI performance The synthetic benchmark uses 1,500 exported functions, TypeScript transformation @@ -100,8 +144,9 @@ materialized-file fast path does not decompress the helpers again. ## Optimization priorities -Start with a dedicated size profile for the standalone CLI and installer, with -command latency and installation benchmarks before release. Pursue embedded +Start with a dedicated size profile for the standalone CLI and installer, and +extend the command latency and installation measurements to Linux and Windows +before release. Pursue embedded artifact compression independently in Vite Task. Keep Oxc and Rolldown at their original optimization level until a selective profile passes representative build benchmarks. Do not add the profile and compression percentages: a combined @@ -240,6 +285,24 @@ python3 bench/binary-size/analyze-macho.py path/to/unstripped-binary \ --cxxfilt /opt/homebrew/opt/llvm/bin/llvm-cxxfilt ``` +For the CLI timing comparison, build with the default symbol stripping and set +`CARGO_PROFILE_RELEASE_OPT_LEVEL` to `3` and then `z`, saving each executable +before the next build. The runner copies the binaries into temporary directories +and creates their setup markers. Prepare the official archive and signed +checksum file, then run: + +```sh +mkdir -p tmp/binary-size/cli-speed/mirror/v22.13.1 +curl --fail --location https://nodejs.org/dist/v22.13.1/node-v22.13.1-darwin-arm64.tar.gz \ + -o tmp/binary-size/cli-speed/mirror/v22.13.1/node-v22.13.1-darwin-arm64.tar.gz +curl --fail --location https://nodejs.org/dist/v22.13.1/SHASUMS256.txt.asc \ + -o tmp/binary-size/cli-speed/mirror/v22.13.1/SHASUMS256.txt.asc +python3 bench/binary-size/benchmark-cli.py \ + --baseline path/to/opt-3/vp --candidate path/to/opt-z/vp \ + --mirror tmp/binary-size/cli-speed/mirror \ + --output tmp/binary-size/cli-speed/results.json +``` + The Mach-O analyzer estimates symbol extents from the next symbol boundary. Anonymous constants can follow a named symbol, so a large constant extent is not proof that the named item owns every byte. Section sizes and final artifact sizes diff --git a/bench/binary-size/benchmark-cli.py b/bench/binary-size/benchmark-cli.py new file mode 100644 index 0000000000..cc7685be5c --- /dev/null +++ b/bench/binary-size/benchmark-cli.py @@ -0,0 +1,249 @@ +#!/usr/bin/env python3 +"""Compare two macOS ARM64 vp binaries with isolated, reproducible workloads. + +The mirror directory must contain the official Node 22.13.1 Darwin ARM64 +tarball and its signed SHASUMS256.txt.asc under v22.13.1/. All timed downloads +use a loopback server. Signature and archive checksum verification stay enabled. +""" + +import argparse +import hashlib +import http.server +import json +import os +from pathlib import Path +import platform +import random +import resource +import shutil +import statistics +import subprocess +import tempfile +import threading +import time + + +VERSION = "22.13.1" +ARCHIVE = f"node-v{VERSION}-darwin-arm64.tar.gz" + + +def digest(path): + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def cpu_time(): + usage = resource.getrusage(resource.RUSAGE_CHILDREN) + return usage.ru_utime + usage.ru_stime + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--baseline", type=Path, required=True) + parser.add_argument("--candidate", type=Path, required=True) + parser.add_argument("--mirror", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--samples", type=int, default=120) + parser.add_argument("--install-samples", type=int, default=10) + parser.add_argument("--rounds", type=int, default=3) + parser.add_argument("--seed", type=int, default=20261016) + args = parser.parse_args() + if platform.system() != "Darwin" or platform.machine() != "arm64": + parser.error("This fixture uses a macOS ARM64 Node.js archive") + if min(args.samples, args.install_samples, args.rounds) < 1: + parser.error("Sample and round counts must be positive") + + files = { + f"/v{VERSION}/{name}": (args.mirror / f"v{VERSION}" / name).read_bytes() + for name in [ARCHIVE, "SHASUMS256.txt.asc"] + } + requests = [] + + class Mirror(http.server.BaseHTTPRequestHandler): + def do_GET(self): + requests.append(self.path) + data = files.get(self.path) + if data is None: + self.send_error(404) + return + self.send_response(200) + self.send_header("Content-Length", str(len(data))) + self.end_headers() + self.wfile.write(data) + + def log_message(self, *_): + pass + + server = http.server.ThreadingHTTPServer(("127.0.0.1", 0), Mirror) + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + try: + with tempfile.TemporaryDirectory(prefix="vp-cli-benchmark-") as temp: + root = Path(temp) + vp_home = root / "vp-home" + vp_home.mkdir() + project = root / "project" + project.mkdir() + (project / "package.json").write_text('{"name":"cli-benchmark","private":true}\n') + (project / ".node-version").write_text(VERSION + "\n") + deep = project.joinpath(*[f"level{i}" for i in range(20)]) + deep.mkdir(parents=True) + binaries = {} + binary_metadata = {} + for label, source in [("baseline", args.baseline), ("candidate", args.candidate)]: + directory = root / label + directory.mkdir() + binary = directory / "vp" + shutil.copy2(source.resolve(), binary) + (directory / ".vp-setup-complete").touch() + binaries[label] = binary + binary_metadata[label] = {"bytes": binary.stat().st_size, "sha256": digest(binary)} + + # Do not inherit shell selections, test hooks, or signature bypasses. + env = { + key: value for key, value in os.environ.items() + if not key.startswith(("VP_", "VITE_", "TOKIO_")) + } + env.update({ + "VP_HOME": str(vp_home), + "VP_NO_UPDATE_CHECK": "1", + "VP_NODE_DIST_MIRROR": f"http://127.0.0.1:{server.server_port}", + "PATH": "/usr/bin:/bin:/usr/sbin:/sbin", + "NO_COLOR": "1", + "CI": "1", + }) + env.pop("FORCE_COLOR", None) + env.pop("RUST_LOG", None) + + def execute(label, argv, cwd): + start_cpu = cpu_time() + start = time.perf_counter_ns() + result = subprocess.run( + [str(binaries[label]), *argv], cwd=cwd, env=env, + stdin=subprocess.DEVNULL, capture_output=True, timeout=90, + ) + elapsed_ms = (time.perf_counter_ns() - start) / 1e6 + cpu_ms = (cpu_time() - start_cpu) * 1000 + if result.returncode: + raise RuntimeError( + f"{label} {argv}: {result.returncode}\n" + f"{result.stdout.decode()}\n{result.stderr.decode()}" + ) + # Paths are identical for both profiles but temporary across runs. + output = (result.stdout + b"\0" + result.stderr).replace(str(root).encode(), b"") + return {"wall_ms": elapsed_ms, "cpu_ms": cpu_ms}, hashlib.sha256(output).hexdigest() + + # Install a real, verified runtime once before steady-state measurements. + execute("baseline", ["env", "install", VERSION], project) + runtime = vp_home / "js_runtime" / "node" / VERSION + node_hash = digest(runtime / "bin" / "node") + cases = [ + ("help", ["--help"], project), + ("env-current", ["env", "current", "node", "--json"], project), + ("env-current-deep", ["env", "current", "node", "--json"], deep), + ("env-which", ["env", "which", "node"], project), + ("node-startup", ["node", "-e", ""], project), + ("npm-version", ["env", "exec", "npm", "--version"], project), + ("install-cached", ["env", "install", VERSION], project), + ("install-fresh", ["env", "install", VERSION], project), + ] + rng = random.Random(args.seed) + results = {} + for name, argv, cwd in cases: + results[name] = {"argv": argv, "cwd_depth": 20 if cwd == deep else 0, "rounds": []} + expected_hash = None + count = args.install_samples if name == "install-fresh" else args.samples + for round_index in range(args.rounds): + samples = {"baseline": [], "candidate": []} + orders = [i % 2 == 0 for i in range(count)] + rng.shuffle(orders) + request_count = len(requests) + for iteration in range(-3, count): + baseline_first = iteration % 2 == 0 if iteration < 0 else orders[iteration] + order = ["baseline", "candidate"] if baseline_first else ["candidate", "baseline"] + for label in order: + if name == "install-fresh": + shutil.rmtree(runtime) + sample, output_hash = execute(label, argv, cwd) + if expected_hash is None: + expected_hash = output_hash + if output_hash != expected_hash: + raise RuntimeError(f"Output mismatch: {name}, {label}") + if name == "install-fresh" and digest(runtime / "bin" / "node") != node_hash: + raise RuntimeError("Installed Node.js binary differs") + if iteration >= 0: + samples[label].append(sample) + request_delta = len(requests) - request_count + expected_requests = (count + 3) * 2 * 2 if name == "install-fresh" else 0 + if request_delta != expected_requests: + raise RuntimeError( + f"Unexpected mirror traffic: {name}: " + f"{request_delta} vs {expected_requests}" + ) + medians = { + label: statistics.median(s["wall_ms"] for s in values) + for label, values in samples.items() + } + change = (medians["candidate"] / medians["baseline"] - 1) * 100 + results[name]["rounds"].append({ + "samples": samples, "wall_medians_ms": medians, "change_percent": change, + }) + print( + f"{name} round {round_index + 1}: {medians['baseline']:.3f} -> " + f"{medians['candidate']:.3f} ms ({change:+.1f}%)", flush=True, + ) + results[name]["output_sha256"] = expected_hash + summary = {} + for label in binaries: + samples = [s for r in results[name]["rounds"] for s in r["samples"][label]] + summary[label] = { + "count": len(samples), + "wall_median_ms": statistics.median(s["wall_ms"] for s in samples), + "cpu_median_ms": statistics.median(s["cpu_ms"] for s in samples), + } + baseline_ms = summary["baseline"]["wall_median_ms"] + candidate_ms = summary["candidate"]["wall_median_ms"] + summary["change_ms"] = candidate_ms - baseline_ms + summary["change_percent"] = (candidate_ms / baseline_ms - 1) * 100 + results[name]["summary"] = summary + + # Keep the raw paired observations without repeating field names. + for case in results.values(): + for round_result in case["rounds"]: + round_result["samples"] = { + label: [[s["wall_ms"], s["cpu_ms"]] for s in samples] + for label, samples in round_result["samples"].items() + } + report = { + "source_commit": subprocess.check_output( + ["git", "rev-parse", "HEAD"], text=True, + ).strip(), + "platform": platform.platform(), + "cpu": subprocess.check_output( + ["sysctl", "-n", "machdep.cpu.brand_string"], text=True, + ).strip(), + "python": platform.python_version(), + "seed": args.seed, + "binaries": binary_metadata, + "node_archive_bytes": len(files[f"/v{VERSION}/{ARCHIVE}"]), + "node_archive_sha256": hashlib.sha256(files[f"/v{VERSION}/{ARCHIVE}"]).hexdigest(), + "installed_node_sha256": node_hash, + "method": ( + "Balanced randomized adjacent pairs; three warmups per variant per round; " + "wall time includes process launch and output capture; CPU time includes " + "children. Fresh installs use loopback HTTP with PGP/SHA-256 verification " + "and extraction; removal and output/hash checks are outside the timer. " + "OS caches remain warm." + ), + "sample_columns": ["wall_ms", "cpu_ms"], + "results": results, + } + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text(json.dumps(report, indent=2) + "\n") + finally: + server.shutdown() + server.server_close() + thread.join() + + +if __name__ == "__main__": + main() diff --git a/bench/binary-size/evidence/cli-profile-benchmark.json b/bench/binary-size/evidence/cli-profile-benchmark.json new file mode 100644 index 0000000000..6fd17b9f4b --- /dev/null +++ b/bench/binary-size/evidence/cli-profile-benchmark.json @@ -0,0 +1,5604 @@ +{ + "source_commit": "a4e9c5932e069b5aea5b9c0136222ddada73bed0", + "platform": "macOS-26.2-arm64-arm-64bit", + "cpu": "Apple M4 Max", + "python": "3.9.6", + "seed": 20261016, + "binaries": { + "baseline": { + "bytes": 7991312, + "sha256": "8c7696daad2fcdb7842613fba238e5475eef6078b1ca8f8984899e49750b36b1" + }, + "candidate": { + "bytes": 4954496, + "sha256": "9b6a8879912330090415905119baed4e99eead050208271fe7200b1c44bb298d" + } + }, + "node_archive_bytes": 48563803, + "node_archive_sha256": "97483ff4361d239a56d038c6335767a56a291e78c10f07446f463f05d9d19b89", + "installed_node_sha256": "79de4c62eb09c9cf7859e4a5fb27502f209533b54fa6a97f5a791015798282c0", + "method": "Balanced randomized adjacent pairs; three warmups per variant per round; wall time includes process launch and output capture; CPU time includes children. Fresh installs use loopback HTTP with PGP/SHA-256 verification and extraction; removal and output/hash checks are outside the timer. OS caches remain warm.", + "results": { + "help": { + "argv": ["--help"], + "cwd_depth": 0, + "rounds": [ + { + "samples": { + "baseline": [ + [4.825625, 4.012000000000127], + [4.681125, 4.709999999999992], + [4.260709, 4.002999999999979], + [4.38825, 3.7719999999998866], + [4.345083, 4.348999999999936], + [4.282834, 4.022999999999888], + [4.204375, 3.782000000000174], + [4.199, 3.8640000000000896], + [4.185667, 3.7399999999998546], + [4.356, 4.1160000000000085], + [4.339875, 4.3079999999997565], + [4.5935, 4.1240000000000165], + [4.444167, 4.474000000000089], + [4.540083, 4.2960000000000775], + [3.864042, 3.5200000000001896], + [4.316041, 4.0559999999998375], + [4.139625, 4.155000000000131], + [4.013208, 4.014000000000184], + [3.819416, 3.9770000000001193], + [4.062416, 4.2159999999999975], + [3.760584, 3.430999999999962], + [3.959417, 3.9569999999997663], + [3.930083, 3.7650000000000183], + [3.987958, 3.4009999999999874], + [3.895041, 3.9249999999999563], + [3.848709, 3.855000000000164], + [4.193917, 3.334999999999866], + [4.019583, 4.174000000000122], + [4.070625, 4.24699999999989], + [3.977459, 4.002999999999757], + [4.036583, 4.084000000000199], + [3.852834, 3.975000000000062], + [3.940667, 3.8649999999997853], + [4.273416, 3.6480000000000956], + [4.105708, 3.354000000000079], + [3.796041, 3.3120000000002037], + [4.204042, 3.6160000000000636], + [3.805584, 3.319000000000072], + [4.0855, 3.8970000000000393], + [4.131209, 4.223000000000088], + [3.728084, 3.321999999999825], + [3.947459, 3.4610000000001584], + [3.880583, 4.048999999999747], + [3.689292, 3.25500000000023], + [3.8145, 3.4650000000000514], + [4.076042, 4.22200000000017], + [3.747125, 3.3639999999999226], + [3.795917, 3.2049999999999024], + [4.014125, 3.9910000000003], + [3.828083, 3.9319999999998245], + [3.839875, 3.493999999999886], + [4.048125, 4.174000000000122], + [3.811625, 4.1739999999999], + [4.417667, 4.402999999999935], + [4.404917, 4.234999999999989], + [3.957125, 4.224000000000228], + [4.003417, 4.0079999999997895], + [4.455125, 4.115000000000091], + [4.126584, 4.057999999999895], + [4.352958, 3.8210000000000743], + [4.27125, 4.145000000000065], + [4.011125, 4.037999999999986], + [3.906917, 3.929999999999989], + [4.132416, 4.364999999999952], + [4.108917, 4.160000000000164], + [4.101875, 4.1320000000000245], + [3.919791, 3.462999999999994], + [4.102708, 3.5690000000001554], + [4.003042, 3.399000000000152], + [3.973834, 3.5169999999999924], + [4.093959, 4.042999999999797], + [4.062917, 4.118000000000288], + [3.823125, 3.2520000000000326], + [3.778917, 3.9890000000000203], + [3.80975, 3.514999999999713], + [3.858625, 3.298999999999941], + [4.105709, 4.642999999999953], + [4.334625, 4.468999999999834], + [3.936417, 4.134999999999778], + [4.074458, 3.8529999999998843], + [3.809042, 3.578000000000081], + [3.7585, 3.921999999999981], + [6.021917, 4.111000000000198], + [4.202667, 4.198000000000146], + [4.210167, 4.10200000000005], + [3.895, 3.8490000000002134], + [4.007792, 3.4519999999997886], + [4.080792, 3.946000000000005], + [3.935625, 3.4770000000001744], + [4.620583, 4.843999999999848], + [4.616291, 4.55899999999998], + [4.079709, 4.076999999999886], + [4.0265, 4.0279999999999205], + [4.079667, 3.5400000000000986], + [4.249792, 3.6800000000001276], + [3.818417, 3.8399999999998435], + [3.99625, 3.8049999999998363], + [3.880834, 3.810000000000091], + [4.010208, 3.419000000000061], + [3.849375, 3.7229999999996988], + [4.002375, 3.7879999999996805], + [3.773333, 3.4610000000001584], + [4.005375, 3.8560000000000816], + [3.997417, 3.907000000000105], + [3.735166, 3.8410000000004274], + [3.931792, 3.9309999999996847], + [3.808458, 3.854000000000024], + [3.816167, 3.93399999999966], + [3.849708, 3.4890000000000754], + [4.133792, 3.8609999999996703], + [3.819875, 3.738999999999937], + [3.708292, 3.701999999999872], + [3.758458, 3.826999999999803], + [4.213375, 4.263000000000128], + [3.872916, 3.326999999999858], + [3.82525, 3.395000000000037], + [4.229042, 3.511000000000486], + [5.316417, 4.557000000000144], + [4.253541, 4.0399999999998215], + [4.355167, 4.205999999999932] + ], + "candidate": [ + [5.61925, 5.596999999999852], + [4.609542, 3.851000000000049], + [4.074459, 3.47900000000001], + [4.267417, 4.3680000000001495], + [4.110917, 3.5439999999997696], + [4.170042, 3.8760000000002126], + [4.328084, 3.9810000000000123], + [4.382583, 4.454999999999876], + [4.296709, 3.8690000000001223], + [4.487791, 4.3480000000000185], + [4.339458, 3.779000000000199], + [4.442917, 4.416999999999893], + [4.490084, 4.272999999999971], + [4.700291, 4.462999999999884], + [4.087042, 3.9359999999999395], + [4.346125, 4.2999999999999705], + [4.162625, 3.8369999999998683], + [4.413042, 4.413], + [4.032875, 4.264999999999741], + [4.023417, 4.007000000000094], + [4.166792, 4.4279999999998765], + [4.114667, 4.162000000000221], + [4.274042, 3.9800000000000946], + [4.038959, 3.83], + [3.823416, 3.3279999999999976], + [4.249542, 3.7849999999999273], + [4.35425, 4.510000000000014], + [4.1935, 3.6760000000000126], + [3.928459, 4.404999999999992], + [3.903875, 3.4090000000002174], + [3.862459, 3.6119999999997265], + [4.092708, 4.171000000000147], + [3.919958, 3.3890000000000864], + [3.950542, 4.169000000000089], + [4.028333, 3.9789999999997328], + [3.988959, 4.28699999999993], + [4.205792, 4.157999999999884], + [4.035125, 3.997999999999946], + [4.317541, 3.673999999999955], + [4.00575, 3.3490000000000464], + [3.985833, 3.47900000000001], + [3.915417, 4.121000000000041], + [3.898542, 3.2689999999999664], + [4.175542, 4.380999999999968], + [3.859583, 3.626999999999825], + [3.915167, 3.4649999999998293], + [4.0045, 4.1560000000000485], + [4.068417, 3.989999999999938], + [3.868, 4.242999999999997], + [3.77925, 3.8840000000002206], + [3.936583, 3.6929999999999463], + [4.006, 4.070000000000018], + [3.991, 4.167000000000032], + [4.531291, 4.345999999999961], + [4.124541, 4.14300000000023], + [4.169041, 4.181999999999686], + [4.378459, 4.1400000000000325], + [4.337917, 4.4840000000001545], + [4.408375, 4.170999999999925], + [4.474333, 4.556999999999922], + [4.067625, 4.281999999999897], + [3.924625, 3.931000000000129], + [4.073875, 4.094000000000042], + [4.168292, 4.680999999999935], + [4.00475, 4.2960000000000775], + [4.01275, 3.9429999999998078], + [4.032458, 4.096999999999795], + [4.169209, 4.25399999999998], + [4.149958, 4.065999999999903], + [4.25625, 4.034000000000093], + [3.953875, 3.490000000000215], + [4.166958, 4.531999999999758], + [3.94975, 4.265999999999881], + [3.843583, 3.259000000000123], + [4.059375, 3.9730000000002264], + [4.279291, 3.8009999999999433], + [4.32575, 4.5640000000000125], + [4.064333, 4.258000000000095], + [4.625583, 4.181000000000212], + [3.955125, 3.882000000000163], + [3.76025, 4.062999999999928], + [4.011959, 4.18099999999999], + [4.500583, 4.1159999999997865], + [4.247667, 4.293999999999798], + [4.0915, 4.5040000000002856], + [4.061666, 4.233999999999849], + [4.227125, 4.410000000000025], + [4.050542, 3.642999999999841], + [3.965958, 4.190999999999834], + [3.906084, 3.923000000000121], + [4.202834, 4.178000000000237], + [4.003542, 3.8690000000001223], + [4.32875, 4.205000000000014], + [4.115667, 3.953999999999791], + [3.987, 3.7120000000001596], + [3.936917, 3.765999999999714], + [4.477625, 4.228000000000343], + [3.907208, 3.541999999999934], + [3.9615, 3.6640000000001116], + [3.975334, 3.699000000000119], + [4.171958, 3.867000000000287], + [5.214084, 3.6769999999999303], + [4.016625, 3.8719999999998755], + [4.133, 3.9810000000000123], + [3.855791, 3.8469999999997118], + [3.992291, 3.938999999999915], + [3.728958, 3.9450000000003094], + [3.854416, 3.8210000000002964], + [4.235542, 4.310999999999954], + [3.873291, 3.95800000000035], + [3.926875, 3.9959999999998885], + [3.863125, 3.5480000000001066], + [4.247584, 3.6160000000000636], + [3.768042, 3.3289999999999154], + [4.128334, 4.172000000000287], + [4.006292, 3.2879999999999576], + [4.622375, 4.321999999999715], + [4.834792, 5.394999999999595], + [4.709833, 4.10900000000014], + [4.649042, 4.515000000000047] + ] + }, + "wall_medians_ms": { + "baseline": 4.013666499999999, + "candidate": 4.080750500000001 + }, + "change_percent": 1.6713894888875647 + }, + { + "samples": { + "baseline": [ + [4.071792, 3.813999999999762], + [3.997958, 3.779000000000199], + [4.201458, 3.775000000000084], + [4.072042, 3.849999999999909], + [4.270625, 4.189999999999916], + [3.846167, 3.747000000000167], + [4.348, 4.477000000000508], + [3.979125, 3.8439999999999586], + [4.022042, 3.9609999999998813], + [4.374375, 4.077999999999804], + [4.414667, 4.105000000000025], + [4.024875, 3.5639999999999006], + [4.175042, 4.2960000000000775], + [4.393625, 4.192999999999891], + [4.242209, 4.187000000000385], + [4.130417, 4.25500000000012], + [4.453041, 4.018999999999995], + [4.253208, 4.670999999999648], + [4.654666, 4.329000000000249], + [4.24625, 3.9669999999998318], + [4.086958, 4.036999999999846], + [4.037625, 4.041999999999657], + [4.245083, 4.520999999999997], + [4.158709, 3.5960000000003767], + [4.183041, 3.7090000000001844], + [4.151375, 3.70299999999979], + [3.907292, 3.745999999999583], + [4.107417, 4.2439999999999145], + [3.955042, 3.3610000000003915], + [4.225917, 3.7359999999999616], + [4.213209, 4.230000000000178], + [4.888833, 4.801000000000055], + [4.080542, 4.001999999999839], + [4.007, 3.4800000000001496], + [4.257625, 4.1679999999999495], + [4.03875, 4.036000000000151], + [3.870166, 3.522999999999943], + [3.804167, 3.387000000000029], + [3.546292, 3.1609999999999694], + [4.051458, 3.907000000000327], + [4.046833, 3.409999999999691], + [3.522834, 3.1050000000001354], + [3.813708, 3.3039999999999736], + [4.557125, 4.465999999999859], + [3.775708, 3.423000000000176], + [4.228209, 3.9970000000000283], + [3.743125, 3.9519999999999555], + [4.124166, 4.18200000000013], + [3.886333, 3.16599999999978], + [3.899791, 3.815000000000346], + [4.247208, 4.113000000000255], + [3.985708, 3.8450000000000983], + [3.804792, 3.737999999999797], + [4.210125, 4.151999999999489], + [3.808834, 3.2210000000003625], + [3.97825, 4.341999999999846], + [3.836791, 3.2930000000002124], + [3.788, 4.152000000000378], + [3.985125, 4.080999999999779], + [3.986, 4.062999999999484], + [4.191834, 3.742000000000356], + [4.376792, 3.8490000000002134], + [4.4275, 4.542999999999964], + [4.229667, 4.110999999999976], + [4.798792, 4.297000000000217], + [4.166625, 3.6410000000000053], + [4.372375, 4.302999999999724], + [4.312792, 3.8239999999998275], + [4.548417, 4.465999999999859], + [4.299916, 3.527000000000058], + [4.628375, 3.8730000000000153], + [4.708708, 4.9760000000005356], + [4.489375, 4.374000000000322], + [4.651583, 4.066999999999599], + [3.896791, 3.322999999999965], + [4.240583, 3.770999999999969], + [4.137292, 3.823000000000132], + [4.149042, 4.309000000000118], + [3.986166, 3.9210000000000633], + [4.167208, 3.986000000000267], + [4.215958, 3.9289999999998493], + [4.214333, 4.364999999999952], + [3.939959, 4.064999999999763], + [4.161041, 4.321999999999715], + [4.035917, 3.594000000000541], + [3.854833, 3.254999999999786], + [4.458292, 4.354000000000191], + [4.355417, 4.042000000000101], + [4.502959, 4.655000000000076], + [3.925458, 4.246000000000194], + [3.829292, 3.2930000000002124], + [4.185667, 4.050000000000331], + [3.809584, 3.206999999999738], + [3.971333, 3.4570000000000434], + [4.873917, 4.6439999999998705], + [4.545583, 3.9810000000004564], + [4.028, 3.515000000000157], + [4.00825, 3.8529999999998843], + [3.880375, 4.360999999999837], + [4.381208, 4.321000000000019], + [4.311666, 4.010000000000069], + [4.593, 4.131000000000107], + [4.620167, 4.377999999999993], + [4.40175, 4.3519999999999115], + [4.095875, 3.5370000000001234], + [4.001375, 4.217000000000581], + [3.794958, 3.3289999999999154], + [4.466875, 4.255000000000564], + [4.400167, 4.249999999999865], + [4.399417, 4.351000000000216], + [4.745167, 4.416999999999671], + [4.285458, 4.3440000000001255], + [4.776416, 4.553000000000029], + [4.472917, 4.2520000000001446], + [4.531125, 4.34900000000038], + [4.339, 3.9799999999994284], + [4.324042, 4.3599999999996975], + [4.343791, 4.430000000000156], + [4.341625, 3.8569999999999993], + [4.335417, 4.0199999999996905] + ], + "candidate": [ + [3.934292, 3.734000000000126], + [3.938792, 3.8239999999998275], + [4.637791, 4.5280000000000875], + [4.374875, 4.347000000000101], + [4.383791, 4.10099999999991], + [4.398167, 4.193999999999587], + [4.127834, 3.961999999999577], + [4.167917, 4.10300000000019], + [4.395792, 4.322000000000159], + [4.565333, 3.9770000000003414], + [4.727541, 4.25500000000012], + [3.829792, 3.490999999999911], + [4.102292, 4.0519999999997225], + [4.131292, 3.978000000000037], + [4.349083, 4.694999999999894], + [4.287625, 4.24699999999989], + [4.339625, 4.270999999999692], + [4.707917, 4.669000000000256], + [4.509042, 4.048000000000052], + [4.149917, 4.33400000000006], + [4.328333, 4.11000000000028], + [4.129625, 4.434000000000271], + [4.097166, 3.937999999999775], + [4.143709, 4.080999999999779], + [4.002125, 4.18200000000013], + [3.891, 3.5320000000003127], + [3.919209, 4.040999999999961], + [4.183416, 3.6160000000000636], + [4.188792, 4.0839999999997545], + [4.124833, 3.9450000000003094], + [4.142958, 3.669999999999618], + [4.03775, 3.390000000000004], + [4.165125, 3.462999999999994], + [4.1585, 4.377999999999993], + [3.807583, 3.4169999999997813], + [3.973917, 3.481999999999985], + [3.977375, 3.6170000000002034], + [3.944541, 3.865999999999925], + [4.182667, 3.6369999999998903], + [3.976584, 3.449999999999509], + [4.11525, 4.082000000000363], + [4.014625, 3.9280000000001536], + [3.967042, 3.681999999999963], + [4.224542, 3.713999999999995], + [3.906458, 3.3479999999999066], + [4.15175, 3.506999999999927], + [3.951166, 3.8320000000000576], + [4.089083, 3.474999999999895], + [3.808375, 3.9490000000004244], + [3.853167, 3.8009999999997213], + [3.891958, 3.3849999999997493], + [4.098542, 3.4449999999996983], + [4.076375, 3.9240000000004827], + [3.97175, 3.642000000000145], + [3.866708, 3.9889999999997983], + [4.053792, 4.1839999999999655], + [4.102292, 4.150999999999794], + [3.997167, 3.5959999999999326], + [4.029167, 3.8079999999998115], + [3.993958, 3.4290000000005705], + [4.569292, 4.310999999999954], + [4.472834, 3.794999999999771], + [4.442125, 3.9759999999997575], + [4.817959, 4.1240000000000165], + [4.390625, 3.9090000000001623], + [4.539833, 4.067000000000043], + [4.325792, 4.333000000000364], + [4.752041, 4.490999999999801], + [4.707666, 4.125000000000156], + [4.763708, 4.322999999999855], + [4.650375, 4.920999999999953], + [4.396542, 4.048999999999747], + [4.968791, 3.9799999999998725], + [4.014375, 3.697999999999979], + [4.174583, 3.521999999999803], + [4.291583, 4.272000000000276], + [4.14075, 3.5970000000000724], + [4.253417, 4.446999999999868], + [4.25325, 4.146999999999679], + [3.878292, 3.849999999999909], + [4.042, 3.578999999999777], + [4.111083, 3.675000000000317], + [4.331375, 3.731000000000151], + [3.933708, 3.3210000000001294], + [4.055166, 4.269999999999996], + [4.085583, 4.09299999999968], + [4.266416, 3.9210000000000633], + [4.29075, 4.522999999999833], + [4.177333, 4.259000000000235], + [3.92225, 3.6349999999996108], + [4.554417, 4.056999999999533], + [3.891875, 4.018000000000299], + [4.031833, 4.18099999999999], + [4.2365, 4.277999999999782], + [4.081042, 3.5359999999999836], + [4.338208, 4.089999999999705], + [4.505583, 3.8210000000002964], + [4.01375, 3.450999999999649], + [4.2235, 3.6119999999999486], + [4.23825, 3.546000000000049], + [4.315875, 4.4360000000001065], + [4.362958, 4.5999999999999375], + [5.34875, 5.42800000000021], + [4.407791, 3.8169999999997373], + [4.187167, 4.3079999999999785], + [4.258167, 3.737999999999797], + [4.188167, 3.6449999999996763], + [4.584916, 4.400999999999655], + [4.763541, 4.573999999999856], + [4.286417, 4.4960000000000555], + [4.682625, 4.79800000000008], + [4.483875, 3.937999999999775], + [4.570667, 4.345000000000265], + [4.791541, 4.654999999999632], + [4.363041, 4.3179999999996], + [4.460625, 3.9360000000003836], + [4.377667, 4.19800000000059], + [4.088, 3.7359999999999616], + [4.398709, 4.030999999999896], + [4.420875, 4.49400000000022] + ] + }, + "wall_medians_ms": { + "baseline": 4.184354, + "candidate": 4.1830415 + }, + "change_percent": -0.031366848980751705 + }, + { + "samples": { + "baseline": [ + [4.118625, 3.972999999999338], + [3.922584, 3.8999999999997925], + [3.761917, 4.178000000000459], + [4.149167, 4.086000000000034], + [4.211583, 3.9240000000000386], + [4.537459, 3.810999999999787], + [5.501875, 4.469000000000278], + [5.296, 5.152999999999963], + [4.756584, 4.529999999999923], + [4.395041, 4.0399999999998215], + [4.0925, 3.9050000000000473], + [3.938167, 3.4369999999999123], + [3.952625, 4.122999999999877], + [4.37825, 4.496999999999751], + [4.260625, 3.6210000000003184], + [4.703541, 4.693999999999754], + [4.421125, 3.7890000000002644], + [4.064625, 3.5650000000000404], + [4.111958, 4.213000000000466], + [3.931833, 3.285999999999234], + [3.95725, 4.304999999999559], + [4.150458, 3.7999999999995815], + [4.282292, 3.7690000000001334], + [4.264042, 3.609999999999669], + [3.948959, 3.943000000000474], + [4.106208, 4.230999999999874], + [4.015417, 3.3649999999996183], + [4.181334, 3.6850000000003824], + [4.10925, 4.360999999999393], + [3.93525, 4.075000000000273], + [3.976625, 3.6849999999999383], + [3.952167, 3.33400000000017], + [4.369375, 4.485000000000294], + [4.131625, 4.025999999999641], + [4.175042, 4.152999999999629], + [4.234167, 4.313000000000233], + [4.229625, 3.9929999999999133], + [4.112625, 3.8210000000002964], + [3.830792, 4.108000000000445], + [4.238459, 3.7399999999996325], + [4.056167, 3.7479999999998626], + [4.007375, 3.4839999999998206], + [3.975583, 3.9000000000002366], + [4.282917, 3.8069999999996718], + [4.033583, 4.242000000000079], + [3.935834, 3.4239999999998716], + [3.891833, 3.330000000000055], + [4.033666, 3.511000000000486], + [3.954667, 3.4649999999998293], + [3.797, 3.3440000000002357], + [4.043, 3.3639999999999226], + [4.163875, 3.482000000000429], + [4.084792, 4.040999999999961], + [4.077292, 4.070000000000018], + [3.655375, 3.2959999999997436], + [3.918416, 4.161999999999999], + [3.946708, 3.3090000000002284], + [4.632959, 3.9509999999998158], + [4.019084, 3.4650000000002734], + [3.896834, 3.677999999999848], + [4.319708, 4.256999999999955], + [3.884333, 4.063000000000372], + [3.997208, 3.626000000000129], + [3.746875, 3.2160000000001077], + [4.014875, 4.247000000000334], + [3.843833, 3.9120000000005817], + [4.039333, 4.061000000000092], + [3.869792, 3.8759999999999906], + [3.870125, 3.713999999999551], + [4.298625, 3.6729999999995933], + [4.305542, 4.028000000000365], + [4.008667, 4.058000000000561], + [3.99275, 3.7679999999999936], + [4.008541, 3.4209999999998963], + [3.761291, 4.154999999999909], + [3.94475, 3.4909999999994668], + [4.029, 3.6480000000005397], + [3.994458, 3.7679999999999936], + [3.981166, 3.4209999999998963], + [3.885917, 4.03100000000034], + [3.77925, 3.277999999999892], + [4.008959, 3.54999999999972], + [3.934959, 3.838000000000008], + [4.081292, 3.375000000000128], + [3.91325, 3.3460000000005152], + [4.12175, 4.17500000000004], + [4.165583, 3.6650000000002514], + [4.110917, 3.7890000000002644], + [4.402083, 3.8359999999997285], + [4.024083, 3.439000000000636], + [4.014916, 3.4240000000003157], + [3.707417, 3.722000000000225], + [4.871792, 4.9440000000000595], + [3.780708, 3.393999999999675], + [3.800958, 4.066000000000347], + [4.465583, 3.63099999999994], + [4.532375, 4.036000000000151], + [4.508875, 4.059000000000257], + [4.362125, 4.072000000000742], + [4.490541, 4.532999999999898], + [4.217916, 4.218000000000277], + [4.479125, 4.211000000000631], + [4.460625, 4.2399999999997995], + [4.087208, 4.081999999999475], + [4.142916, 4.019000000000439], + [4.206125, 4.401999999999795], + [4.238125, 4.169000000000089], + [4.087291, 3.959000000000046], + [4.557334, 4.373999999999878], + [4.250417, 4.385000000000083], + [4.179792, 4.147000000000123], + [4.243375, 4.205999999999932], + [4.082583, 4.151000000000238], + [4.09425, 4.049999999999443], + [4.006542, 3.359000000000556], + [3.918583, 3.290999999999933], + [3.673417, 3.791000000000544], + [3.908, 3.262999999999572], + [4.006791, 4.15099999999935], + [4.082083, 3.4450000000001424] + ], + "candidate": [ + [3.983791, 4.110000000000724], + [3.98225, 4.138000000000197], + [4.308541, 4.700999999999844], + [4.130375, 4.290000000000127], + [4.738291, 4.661000000000026], + [4.235917, 4.217999999999833], + [4.66075, 4.361999999999977], + [5.007875, 4.983999999999877], + [5.110667, 4.751000000000172], + [4.449334, 3.8920000000000066], + [4.128875, 3.6000000000000476], + [4.263375, 4.277000000000086], + [4.0755, 3.4160000000005297], + [4.080083, 3.4839999999998206], + [4.301459, 4.2119999999998825], + [5.211541, 4.48499999999985], + [4.351125, 4.429000000000016], + [4.36525, 4.354000000000191], + [4.001292, 3.8639999999996455], + [4.404541, 4.371000000000791], + [4.296041, 3.7840000000004537], + [4.177667, 3.6049999999998583], + [4.29675, 4.265000000000185], + [4.549042, 5.002999999999869], + [4.157583, 3.5049999999996473], + [4.56725, 4.51000000000068], + [4.0515, 4.286999999999708], + [4.01225, 4.306000000000143], + [3.953125, 3.5090000000002064], + [3.936583, 3.3649999999996183], + [4.411417, 4.2640000000000455], + [5.237042, 5.434000000000161], + [4.177083, 4.055999999999393], + [4.293625, 3.739000000000381], + [4.15475, 3.57400000000041], + [3.941875, 3.387000000000029], + [3.952125, 3.4600000000000186], + [7.51275, 3.553999999999835], + [3.9945, 3.54299999999963], + [4.251167, 4.26100000000007], + [3.890333, 3.526000000000362], + [4.274291, 4.179000000000155], + [4.1585, 3.410999999999831], + [4.027083, 3.9810000000000123], + [4.256958, 4.2960000000000775], + [3.847333, 3.3289999999999154], + [4.331083, 4.157000000000188], + [4.204084, 3.9569999999997663], + [4.481083, 4.442999999999753], + [4.154, 4.011000000000209], + [4.089875, 4.153999999999769], + [4.321333, 4.2239999999997835], + [4.046791, 4.026999999999781], + [3.897, 3.4920000000000506], + [3.93475, 3.307000000000393], + [4.141541, 4.1959999999998665], + [5.069292, 5.126999999999882], + [4.418708, 4.624999999999879], + [3.823916, 3.5080000000000666], + [3.995666, 3.6079999999998336], + [3.922041, 3.4689999999999444], + [4.237916, 3.8489999999997693], + [4.105416, 4.10099999999991], + [4.087334, 3.9829999999998478], + [4.229667, 3.649999999999487], + [3.8745, 3.7479999999998626], + [4.367, 3.661999999999832], + [3.933917, 3.518000000000132], + [4.274625, 3.858000000000139], + [4.54775, 4.229000000000482], + [4.219917, 3.7319999999994025], + [3.878042, 3.358999999999668], + [3.860209, 3.401999999999905], + [3.96325, 3.87000000000004], + [3.912708, 3.343000000000096], + [3.988416, 3.87900000000041], + [4.176875, 4.226999999999759], + [4.207625, 3.6170000000002034], + [3.671459, 3.6290000000001044], + [3.891084, 3.8389999999997038], + [4.03325, 4.32699999999997], + [4.3285, 4.323000000000299], + [4.06225, 3.961999999999577], + [4.224583, 4.1739999999999], + [4.095583, 4.058999999999813], + [3.984667, 3.402999999999601], + [4.055416, 4.153000000000073], + [4.047625, 3.5799999999999166], + [4.130084, 3.893999999999842], + [4.084667, 3.916999999999504], + [4.131666, 4.47099999999967], + [3.843, 3.3490000000000464], + [4.075792, 3.638999999999726], + [3.710958, 3.3650000000000624], + [4.243375, 3.251000000000115], + [4.191458, 4.3839999999999435], + [4.877708, 4.4319999999999915], + [4.412459, 4.385999999999779], + [4.238041, 4.728999999999317], + [4.592708, 4.340999999999706], + [4.228042, 3.759000000000068], + [4.326541, 4.226999999999315], + [4.524375, 4.088000000000314], + [4.315458, 3.9690000000001113], + [4.181291, 3.8640000000000896], + [4.202084, 3.630000000000244], + [4.27575, 4.030999999999452], + [4.08575, 3.7909999999996558], + [4.388375, 3.95800000000035], + [4.265291, 3.830999999999918], + [4.756834, 4.423000000000066], + [4.110791, 3.995000000000193], + [4.175833, 3.9649999999999963], + [4.199833, 4.242999999999775], + [4.032625, 3.954999999999931], + [3.792084, 3.7879999999996805], + [3.981875, 4.348999999999936], + [4.324167, 4.354999999999887], + [4.143125, 3.486000000000544], + [4.233417, 4.47799999999976] + ] + }, + "wall_medians_ms": { + "baseline": 4.079292000000001, + "candidate": 4.176978999999999 + }, + "change_percent": 2.394704767395872 + } + ], + "output_sha256": "44efbafb2b822ee4be08be526ff59f0c8f4ed2f9a1efd15d103414291e1457f0", + "summary": { + "baseline": { + "count": 360, + "wall_median_ms": 4.0816875, + "cpu_median_ms": 3.954499999999861 + }, + "candidate": { + "count": 360, + "wall_median_ms": 4.156166499999999, + "cpu_median_ms": 3.9955000000000407 + }, + "change_ms": 0.0744789999999993, + "change_percent": 1.824710980446187 + } + }, + "env-current": { + "argv": ["env", "current", "node", "--json"], + "cwd_depth": 0, + "rounds": [ + { + "samples": { + "baseline": [ + [4.282333, 4.210999999999743], + [4.17575, 3.8729999999995712], + [4.35475, 4.437000000000246], + [4.478416, 4.473999999999201], + [4.393083, 4.4800000000000395], + [4.410833, 4.472000000000698], + [4.189208, 4.0399999999998215], + [4.666708, 4.541999999999824], + [4.055583, 3.8130000000000663], + [4.292834, 4.125000000000156], + [4.22575, 4.185999999998913], + [4.239958, 3.8959999999992334], + [4.246958, 4.550000000000054], + [4.333, 4.2320000000000135], + [4.176917, 4.278000000000226], + [5.570125, 5.296999999999663], + [5.296875, 4.838999999999594], + [5.608958, 5.283000000000371], + [4.938417, 4.4789999999999], + [5.299041, 4.614000000000118], + [4.275667, 4.025000000000389], + [4.515709, 3.9329999999999643], + [4.773916, 4.776000000000558], + [4.336166, 4.265000000000185], + [4.548583, 4.50100000000031], + [4.639916, 3.9769999999998973], + [5.7035, 4.954000000000569], + [4.86275, 4.169000000000089], + [4.471375, 4.3319999999997805], + [6.694292, 5.561000000000149], + [6.103083, 6.204999999999572], + [7.614584, 5.767000000000522], + [5.70875, 5.193000000000225], + [5.016042, 4.78299999999976], + [4.606167, 4.455999999999349], + [4.268417, 4.306999999999839], + [4.301167, 4.368000000000372], + [4.376125, 4.32599999999983], + [4.384333, 4.51700000000077], + [4.105708, 4.17299999999976], + [4.312667, 4.388000000000503], + [4.24175, 4.260000000000375], + [4.129125, 3.8400000000002876], + [4.332125, 4.078999999999944], + [4.280166, 4.141999999999868], + [4.464584, 4.618999999999929], + [4.163417, 4.072000000000742], + [4.06425, 4.2999999999997485], + [4.4265, 3.8119999999999266], + [4.441667, 4.506000000000121], + [4.021458, 4.071000000000602], + [4.210583, 3.8749999999989626], + [4.118542, 3.577999999999193], + [4.197, 4.437999999999498], + [4.142875, 3.658999999999857], + [4.247917, 3.9839999999999876], + [3.861125, 3.745999999999583], + [4.298458, 3.6009999999997433], + [4.052833, 3.9440000000006137], + [4.039209, 3.959000000000046], + [4.322875, 4.2730000000013035], + [4.331375, 4.726999999999926], + [4.243791, 4.384999999999195], + [4.189291, 3.547000000000189], + [4.084, 4.2759999999999465], + [3.822167, 3.4729999999996153], + [3.626083, 3.306000000000253], + [4.520833, 3.672999999999149], + [4.3625, 3.8370000000007565], + [4.678959, 4.786999999999431], + [4.298667, 4.258000000000095], + [3.892584, 3.633999999999915], + [4.126459, 3.826000000000107], + [4.582375, 4.542000000000712], + [4.529334, 4.274999999999807], + [4.482667, 4.4240000000002055], + [4.477792, 3.8410000000004274], + [4.656459, 4.878999999999856], + [4.722083, 4.914999999999559], + [4.333792, 4.141000000000616], + [4.463584, 4.548000000000663], + [4.877083, 4.709999999999326], + [5.172458, 4.983000000000182], + [5.083708, 4.7040000000002635], + [4.777166, 4.625000000000767], + [4.632, 4.634000000000249], + [5.074292, 4.756999999999678], + [4.756042, 4.438999999999638], + [5.462125, 5.209000000000685], + [4.718458, 4.578999999999667], + [4.731959, 4.3920000000001735], + [4.804083, 4.329000000000249], + [4.632, 4.338999999999871], + [4.726875, 4.18200000000013], + [5.523542, 5.219999999999558], + [4.807542, 4.511999999999183], + [5.601625, 5.351000000000106], + [5.078, 4.751999999999867], + [4.4075, 4.310000000000258], + [4.208667, 4.253000000000284], + [4.542291, 4.775000000000418], + [4.251792, 4.011000000000209], + [4.3045, 4.256999999999955], + [4.192166, 4.035000000000011], + [4.377292, 3.950000000000564], + [4.578291, 4.418999999999507], + [4.927833, 4.5640000000002345], + [4.958084, 4.876999999999576], + [4.813417, 4.649999999999821], + [4.287209, 4.6640000000000015], + [4.554584, 4.673999999999623], + [4.541916, 3.8960000000001216], + [4.296375, 4.152999999999629], + [4.74475, 4.66100000000047], + [4.368583, 3.994000000000497], + [4.436458, 4.254999999999676], + [4.325458, 3.7520000000004217], + [4.366917, 3.826000000000107], + [4.412125, 4.19000000000036], + [4.598584, 4.558000000001172] + ], + "candidate": [ + [4.574625, 4.470000000000418], + [4.516542, 4.884000000000555], + [4.360667, 4.399000000000264], + [4.400792, 4.66200000000061], + [4.336292, 4.353999999999303], + [4.467291, 4.537000000000013], + [4.505667, 4.502999999999702], + [4.503333, 4.545000000000243], + [4.342292, 4.472999999999949], + [4.568042, 4.552000000000334], + [4.366709, 4.258000000000983], + [4.326834, 4.218999999999973], + [4.243708, 4.260000000000375], + [4.335125, 4.446999999999868], + [4.18375, 4.241999999999635], + [4.972833, 4.222000000000392], + [5.753, 5.6280000000006325], + [5.553958, 5.044999999999966], + [5.18375, 5.056999999999867], + [5.447583, 5.241999999999969], + [4.997542, 4.354999999999443], + [4.739334, 4.551999999999445], + [4.643167, 4.141999999999868], + [4.712042, 4.128999999999827], + [4.839459, 4.290000000000127], + [4.684541, 4.869999999999486], + [5.216916, 4.433999999999827], + [5.0665, 5.101999999999052], + [4.513125, 4.20700000000096], + [4.935417, 4.519000000000162], + [5.6205, 5.265999999999771], + [6.415792, 5.933999999999884], + [5.596875, 5.1160000000001205], + [4.860459, 4.626000000000019], + [5.330291, 5.088999999999899], + [5.020917, 4.552000000000334], + [4.474292, 4.551000000000194], + [4.398875, 4.1399999999995885], + [4.372542, 3.9410000000001943], + [4.558042, 4.724999999999646], + [4.406667, 4.437999999999498], + [4.496958, 4.839999999999733], + [4.75025, 4.378999999999245], + [4.399917, 4.4880000000002696], + [4.322458, 4.642000000000479], + [4.402167, 4.46999999999953], + [4.371958, 4.497999999999891], + [4.252208, 4.349999999999632], + [4.233166, 4.526000000000252], + [4.571375, 4.0079999999997895], + [4.162791, 3.5730000000002704], + [4.212416, 4.473000000000837], + [4.135292, 3.7490000000008905], + [4.348166, 3.6849999999999383], + [4.235, 4.4800000000000395], + [4.182416, 3.7320000000002906], + [4.510167, 3.87900000000041], + [4.65775, 4.819000000000351], + [4.156583, 4.588999999999288], + [4.189459, 3.669999999999618], + [4.524084, 3.9359999999994955], + [4.265, 3.641999999999257], + [4.24125, 3.834000000000337], + [4.263958, 3.58300000000078], + [4.080583, 3.7269999999995918], + [4.557542, 4.668000000000561], + [4.282959, 3.7399999999996325], + [4.173416, 4.34900000000038], + [4.568, 4.540000000000433], + [4.614792, 4.057000000000421], + [4.177083, 3.5959999999999326], + [4.11025, 3.5489999999995803], + [4.057291, 3.690999999999889], + [7.44475, 5.1229999999993225], + [4.9905, 5.0400000000001555], + [4.859416, 4.0319999999995915], + [4.794958, 4.6439999999998705], + [4.500875, 4.693999999999754], + [4.005166, 3.547000000000189], + [4.683792, 4.978000000000371], + [4.613125, 4.01199999999946], + [5.346459, 4.853999999999914], + [5.257833, 5.094000000000598], + [5.234417, 4.885999999999058], + [5.18875, 5.1229999999993225], + [4.927625, 4.725999999999786], + [5.078375, 4.8560000000001935], + [4.899584, 4.411000000000165], + [5.33025, 5.010999999999655], + [4.937917, 4.592999999999847], + [4.804292, 4.612000000000727], + [4.687917, 4.277999999999338], + [5.0045, 4.917999999999978], + [4.721542, 4.580000000000695], + [4.522125, 4.16599999999967], + [4.515792, 4.499000000000919], + [5.135, 4.577000000000275], + [4.90275, 4.453999999999958], + [4.355, 4.3839999999999435], + [4.412292, 4.351999999999023], + [4.58025, 4.5000000000001705], + [4.30075, 4.199999999999093], + [4.34625, 4.691000000000223], + [4.404916, 4.5239999999999725], + [4.382292, 4.195000000000171], + [4.712333, 4.827999999999832], + [5.406625, 5.12500000000049], + [5.04775, 4.832999999999643], + [4.725541, 4.593000000000735], + [4.663834, 4.813999999999652], + [4.386459, 4.440000000000666], + [4.519333, 4.495999999999611], + [4.676459, 4.412000000000305], + [4.72125, 4.175999999999291], + [4.400709, 4.680999999999713], + [4.600459, 3.9250000000006224], + [4.469083, 4.6829999999991045], + [4.475875, 4.338999999999871], + [4.793083, 4.5679999999999055], + [4.304375, 4.206999999999184] + ] + }, + "wall_medians_ms": { + "baseline": 4.411479, + "candidate": 4.540813 + }, + "change_percent": 2.931760527478433 + }, + { + "samples": { + "baseline": [ + [4.011875, 4.072999999999993], + [4.127833, 4.1799999999998505], + [4.089709, 4.115000000000535], + [4.208708, 4.178999999999711], + [4.307334, 4.7389999999989385], + [4.328334, 4.666999999999533], + [4.245917, 4.151000000000238], + [4.538458, 4.558999999999536], + [4.372416, 4.701999999999984], + [4.329, 3.7000000000002586], + [4.536083, 3.809999999999647], + [4.353792, 3.86299999999995], + [4.618084, 4.680999999999713], + [3.949083, 3.3560000000001367], + [4.183542, 3.776999999999475], + [6.195708, 3.7359999999999616], + [4.332375, 4.3639999999998125], + [5.656375, 5.73200000000007], + [5.820333, 5.570999999999771], + [5.050541, 4.64700000000029], + [4.949416, 4.141999999999868], + [4.691292, 3.9519999999999555], + [4.686, 4.302000000000916], + [4.791667, 4.6759999999999025], + [4.597583, 4.297999999999469], + [4.63325, 4.020000000000579], + [4.555834, 4.3189999999988515], + [4.50225, 4.205999999999932], + [4.239541, 3.667000000000087], + [5.09175, 4.9720000000004205], + [4.56475, 4.4789999999999], + [4.293291, 4.208000000000212], + [4.480334, 4.332000000000669], + [4.245041, 4.077000000000552], + [4.19325, 4.113000000000255], + [4.27375, 4.224000000000672], + [4.137, 3.9639999999998565], + [4.332458, 3.766999999999854], + [4.207166, 4.190999999999612], + [4.212167, 4.443000000000197], + [4.209667, 3.6140000000006722], + [4.278375, 4.687999999999803], + [4.162542, 3.667000000000087], + [4.094416, 4.089999999999705], + [4.24225, 3.890000000000171], + [4.081042, 3.8840000000002206], + [4.246667, 4.194000000000031], + [4.172208, 4.3720000000000425], + [4.436041, 4.627000000001047], + [4.213958, 4.17600000000018], + [4.217291, 3.5359999999995395], + [4.317209, 4.415000000000724], + [4.372791, 4.551000000000194], + [4.087, 3.998000000000168], + [4.177875, 3.635000000000055], + [4.163292, 3.6599999999999966], + [4.345375, 4.1279999999996875], + [4.362, 3.6730000000009255], + [4.435041, 4.321000000000019], + [4.573542, 4.217999999998945], + [4.503542, 4.412000000000305], + [4.687291, 4.248999999999725], + [4.680709, 4.850999999998606], + [4.5835, 4.686000000000412], + [4.522708, 4.474999999999341], + [4.484209, 4.3189999999988515], + [4.452625, 4.269999999999108], + [4.604792, 4.784999999999151], + [4.3195, 4.33400000000006], + [4.405625, 4.62799999999941], + [4.363625, 4.320000000000768], + [4.263542, 4.090999999998957], + [4.527667, 4.745999999999917], + [4.183708, 3.4970000000003054], + [4.215125, 4.2359999999996845], + [4.317125, 4.222999999999644], + [4.414667, 4.279000000000366], + [4.510167, 4.440000000000666], + [4.193791, 4.150000000000098], + [4.58625, 4.723000000000255], + [4.279333, 3.6280000000008528], + [4.229875, 3.5850000000001714], + [4.349083, 4.069000000000322], + [5.716833, 5.497999999999337], + [6.046541, 5.603000000000691], + [5.210667, 5.383000000000138], + [4.631333, 4.851999999999634], + [4.608541, 4.667000000000421], + [4.255458, 4.415000000000724], + [4.2385, 3.6170000000002034], + [4.177833, 4.387999999999614], + [4.680958, 4.503999999998953], + [4.695292, 3.775000000000972], + [4.40125, 4.36600000000098], + [4.327042, 4.556000000000893], + [3.808083, 3.404000000001517], + [4.13625, 3.4919999999996065], + [4.243416, 3.6560000000003257], + [5.519917, 4.662999999999862], + [4.774125, 4.722000000000115], + [4.194166, 3.638999999999726], + [4.426917, 4.4480000000000075], + [4.349583, 4.569999999999297], + [4.3225, 4.514000000000351], + [4.20025, 4.160999999999859], + [5.012875, 5.009999999999515], + [4.541333, 4.363999999998924], + [4.176291, 3.569999999999851], + [4.272792, 4.208999999999463], + [4.270042, 4.17299999999976], + [4.340291, 4.123000000000765], + [4.432292, 3.671000000000646], + [4.259667, 3.6610000000001364], + [4.37575, 3.7130000000002994], + [6.124417, 3.650000000000375], + [4.063542, 3.5319999999998686], + [4.653084, 4.654999999999632], + [4.0845, 3.501999999999228], + [3.970375, 4.14099999999884], + [4.723041, 4.429000000000904] + ], + "candidate": [ + [4.289375, 3.9879999999996585], + [4.384708, 4.432000000000436], + [4.13075, 4.392999999999425], + [4.560709, 4.582000000000086], + [4.279584, 4.722000000001003], + [4.428291, 4.673000000000371], + [5.156, 3.891000000000311], + [4.122625, 3.616000000000952], + [4.226667, 3.9239999999995945], + [5.287375, 5.542000000000158], + [4.579459, 4.3639999999998125], + [4.558875, 4.9320000000001585], + [4.598958, 3.9800000000003166], + [4.460542, 4.545000000000243], + [4.444417, 4.305999999999699], + [4.382375, 4.373000000000182], + [4.131458, 3.702000000000538], + [4.66225, 4.63099999999983], + [6.375459, 5.461000000000382], + [6.9225, 5.3909999999994795], + [5.1675, 4.839999999999733], + [4.607709, 4.621000000000208], + [4.966, 4.3439999999996814], + [4.905, 4.1719999999996205], + [5.444667, 4.817000000000959], + [5.048791, 4.514999999999603], + [4.670417, 3.975000000000506], + [4.152375, 3.6880000000003577], + [5.674166, 5.678999999999768], + [5.007459, 4.988999999999244], + [4.836792, 4.874000000000933], + [4.872, 4.92699999999946], + [4.417917, 4.180999999999102], + [4.823625, 4.649999999999821], + [4.310708, 4.305999999999699], + [4.486333, 4.291999999999518], + [4.409708, 4.265999999999437], + [4.406, 4.1810000000008785], + [4.430584, 3.7359999999999616], + [4.832625, 3.8770000000001303], + [4.454292, 3.8869999999988636], + [4.175167, 4.49500000000036], + [4.585167, 3.966000000000136], + [4.525709, 3.906000000000631], + [4.453292, 3.893999999998954], + [4.212084, 3.8049999999998363], + [4.377917, 4.557000000000144], + [4.457375, 4.064999999999763], + [4.361708, 3.7839999999995655], + [4.358083, 3.8029999999995567], + [4.397208, 4.048000000000052], + [4.094083, 3.5869999999995628], + [4.539167, 3.970999999999947], + [4.228166, 3.7089999999997403], + [4.072542, 4.2439999999999145], + [4.227, 4.386000000000223], + [4.2295, 3.6810000000002674], + [4.209583, 4.486999999999242], + [4.877625, 3.99699999999914], + [5.228875, 4.940000000001277], + [4.929292, 4.4919999999999405], + [4.744666, 4.364000000000701], + [4.893209, 4.915000000000447], + [4.564042, 4.64800000000043], + [4.47575, 4.316000000001097], + [4.486291, 4.202000000001149], + [4.49775, 4.000000000000448], + [4.553542, 4.9760000000000915], + [4.537083, 4.461000000000936], + [4.637333, 4.150000000000098], + [4.67875, 5.011999999999794], + [4.760334, 4.479000000000788], + [4.554333, 4.693999999999754], + [4.581666, 4.724999999999646], + [4.224625, 3.6850000000008265], + [4.33075, 3.946000000000005], + [4.32675, 4.145999999999539], + [4.391625, 3.7050000000000693], + [4.384292, 3.945999999999117], + [4.381625, 4.0129999999996], + [4.278792, 4.048999999999303], + [4.117708, 4.237999999999964], + [4.224209, 3.7119999999992714], + [5.939333, 5.338000000000953], + [5.386833, 4.623999999999739], + [4.462209, 4.080000000000084], + [4.723333, 4.906999999999329], + [4.531667, 4.02099999999983], + [4.847667, 4.219999999999224], + [4.572, 4.387000000000363], + [4.477667, 4.402999999999935], + [4.339542, 3.8170000000006254], + [4.650958, 4.437999999999498], + [4.536042, 3.8989999999996527], + [4.519084, 4.377999999999105], + [3.971959, 3.656999999998689], + [4.252125, 4.346999999999213], + [4.636042, 4.852999999999774], + [4.716209, 3.982000000000596], + [4.8195, 4.834999999999923], + [4.524167, 3.9920000000002176], + [4.731125, 4.141999999999868], + [4.415292, 3.8090000000003954], + [4.466375, 4.154999999999909], + [4.138084, 4.119999999999457], + [4.284209, 3.907000000000771], + [4.742917, 4.1810000000008785], + [4.3095, 4.387000000001251], + [4.30875, 3.7199999999995015], + [4.54975, 4.218000000000721], + [4.608959, 4.508999999998764], + [4.270459, 4.419000000000395], + [4.237709, 4.251999999999256], + [4.74275, 4.1739999999999], + [4.43325, 4.598999999999798], + [4.333375, 4.432999999999687], + [4.263084, 3.847000000000378], + [4.279167, 3.8570000000008875], + [4.239084, 4.395000000000593], + [4.503542, 3.8809999999998013] + ] + }, + "wall_medians_ms": { + "baseline": 4.342833, + "candidate": 4.481979 + }, + "change_percent": 3.2040375487613737 + }, + { + "samples": { + "baseline": [ + [4.104208, 4.108999999999696], + [4.494542, 4.288999999999987], + [4.584709, 4.929000000000627], + [5.495167, 5.142999999999454], + [4.5105, 4.5760000000001355], + [4.081792, 3.8279999999994985], + [4.230084, 4.313999999999929], + [4.033, 3.947000000000145], + [4.656667, 4.577000000000275], + [4.350875, 4.299000000000497], + [4.258458, 4.145999999999539], + [4.224792, 4.230999999999874], + [4.164708, 4.03700000000029], + [4.495459, 4.460000000000797], + [4.19875, 4.405000000000214], + [4.551917, 4.158000000000328], + [4.71625, 3.8879999999998915], + [4.5205, 4.526999999999504], + [4.005333, 3.9449999999998653], + [4.370625, 3.7609999999999033], + [3.903625, 3.474999999999895], + [4.376583, 4.049999999999443], + [4.044667, 4.424999999999457], + [4.18775, 3.6690000000003664], + [4.196875, 4.1399999999995885], + [4.004833, 3.3879999999992805], + [4.23, 3.6799999999992394], + [4.178583, 3.721999999999781], + [4.223875, 3.607000000000582], + [4.091542, 3.426000000000151], + [4.317875, 3.918000000000532], + [4.026083, 3.86299999999995], + [4.207792, 4.34900000000038], + [3.953, 3.8869999999997518], + [4.472125, 3.755000000000841], + [4.450375, 3.905999999999743], + [4.306833, 3.819000000000017], + [4.105459, 4.374999999999574], + [4.015709, 3.963000000000605], + [4.28875, 4.574999999999108], + [4.411083, 4.1719999999996205], + [4.869708, 4.577999999999527], + [4.291625, 3.8909999999994227], + [4.422834, 4.383000000000692], + [4.09325, 3.9810000000004564], + [4.604125, 4.693999999998866], + [4.26275, 4.153999999999769], + [4.499916, 4.631000000000718], + [4.421875, 4.443999999999448], + [4.338458, 4.393000000000313], + [4.652167, 4.5640000000002345], + [4.345916, 4.137999999999309], + [4.401541, 4.185999999999801], + [4.197292, 4.537000000000013], + [4.339459, 3.9829999999998478], + [4.411458, 4.2320000000000135], + [4.486959, 4.618999999999929], + [4.507041, 4.840999999998985], + [4.359125, 4.236999999999824], + [4.238958, 3.562999999999761], + [4.376042, 4.348999999999492], + [4.070625, 3.663000000000416], + [4.124667, 4.34100000000015], + [4.50625, 3.943000000000474], + [4.035375, 3.5469999999993007], + [4.236166, 3.799000000000774], + [4.272292, 4.618999999999929], + [4.080834, 3.999000000000308], + [4.161375, 4.705999999999655], + [4.273542, 3.87800000000027], + [4.007334, 3.3909999999997], + [5.614458, 5.954000000000015], + [4.816541, 4.849000000000103], + [4.441042, 3.9199999999990354], + [4.562708, 4.767000000000188], + [4.463, 3.8640000000000896], + [4.242208, 4.137999999999309], + [4.883333, 3.989999999999938], + [4.31025, 4.269999999999996], + [4.374625, 4.573999999999856], + [4.186583, 3.6250000000004334], + [4.832834, 4.112999999999367], + [5.344667, 4.621000000000208], + [5.324041, 5.190999999999946], + [4.832292, 4.734999999999268], + [4.7255, 4.384999999999195], + [4.426084, 4.203000000000401], + [4.651375, 4.593999999999987], + [4.424292, 4.16699999999981], + [4.645375, 4.3600000000001415], + [4.3525, 4.347000000000101], + [4.445291, 3.8509999999991607], + [4.147, 4.0300000000002], + [4.48575, 3.7479999999998626], + [4.138625, 3.811000000000675], + [4.200416, 3.790000000000404], + [4.31475, 4.258999999999347], + [4.238042, 3.4080000000002997], + [4.207584, 4.035999999999262], + [4.106084, 4.128000000000576], + [4.364458, 3.6639999999987793], + [4.228958, 3.6519999999997665], + [4.081875, 3.5020000000010043], + [4.033458, 3.635000000000055], + [4.270375, 4.093000000000124], + [4.394542, 4.394000000001341], + [4.120083, 4.203000000000401], + [4.193541, 4.4480000000000075], + [4.31925, 4.431000000000296], + [4.178416, 4.552000000000334], + [4.299166, 4.63599999999964], + [4.039292, 3.581999999999752], + [4.510959, 4.647999999999541], + [4.396291, 3.5769999999999413], + [4.069458, 4.308000000000867], + [4.436292, 3.979000000000177], + [4.352, 4.443999999999448], + [3.85575, 3.4890000000000754], + [3.997167, 4.329999999999501], + [4.047208, 3.6349999999991667] + ], + "candidate": [ + [4.141458, 4.161999999999999], + [6.198084, 4.862000000000144], + [4.738833, 4.412999999999556], + [4.418459, 3.9949999999997488], + [4.858375, 4.8560000000001935], + [4.271, 4.401000000000543], + [4.101042, 4.3519999999999115], + [4.146625, 4.273999999999667], + [4.301, 4.475000000000229], + [4.314083, 4.46799999999925], + [4.53225, 4.696000000000922], + [4.394292, 4.565999999999626], + [4.598958, 4.548999999999026], + [4.423708, 3.7329999999995422], + [4.176666, 4.609999999999559], + [5.364125, 5.173000000000982], + [4.635541, 4.733999999999128], + [4.887459, 4.082000000000363], + [4.510792, 3.9600000000001856], + [4.252625, 4.219000000000861], + [4.088125, 3.629999999999356], + [4.090958, 4.0930000000010125], + [4.4365, 4.701999999999984], + [4.476709, 4.62899999999955], + [4.503083, 3.9170000000012806], + [4.539459, 4.243000000000663], + [4.250583, 4.104000000000774], + [4.287667, 4.342999999999542], + [4.394917, 4.735000000000156], + [4.361667, 4.272999999999527], + [4.162, 3.658999999999857], + [4.19225, 3.7529999999996733], + [4.210083, 3.777999999999615], + [4.386833, 3.7919999999997955], + [5.3405, 5.543999999999549], + [4.3505, 4.725000000000534], + [4.316458, 4.144000000000148], + [4.101334, 3.5799999999994725], + [4.395167, 3.826000000000107], + [4.733792, 4.143000000000896], + [4.39825, 3.8330000000001974], + [5.0095, 5.3520000000002454], + [4.703834, 5.020000000000024], + [4.637625, 4.983000000000182], + [4.559875, 4.31599999999932], + [4.554583, 4.414000000000584], + [4.669292, 4.96800000000075], + [4.772667, 4.5359999999998735], + [4.445833, 4.433000000000575], + [4.502542, 4.426999999999737], + [4.542709, 4.113999999999507], + [4.967292, 4.9960000000002225], + [4.533792, 4.6520000000001005], + [4.527042, 4.703000000000124], + [4.662459, 4.604000000000497], + [4.626167, 4.855000000000054], + [4.320375, 3.9920000000002176], + [4.745625, 4.861000000000892], + [4.851209, 4.506000000000121], + [4.303459, 4.386999999999475], + [4.312958, 3.6660000000008353], + [4.003042, 3.5730000000002704], + [4.020958, 4.126999999999548], + [4.400292, 4.5880000000000365], + [4.46225, 4.913999999999419], + [4.603666, 4.734000000000016], + [4.762, 3.978000000000037], + [4.424042, 4.558000000000284], + [4.369625, 3.773999999999056], + [4.074167, 3.543000000000518], + [4.502458, 4.7160000000001645], + [5.663166, 4.889999999999617], + [4.649791, 4.590000000000316], + [5.005083, 5.027000000000115], + [4.758125, 4.804000000000919], + [4.262917, 4.229999999999734], + [4.392, 3.8920000000004507], + [4.359875, 4.228000000000343], + [4.487083, 3.9349999999993557], + [4.576417, 4.719000000000584], + [4.689917, 4.870999999999626], + [4.424208, 3.8970000000002614], + [4.96175, 5.087999999999759], + [5.702875, 5.696000000000367], + [5.112916, 4.803000000000779], + [4.658167, 4.558000000000284], + [4.657333, 4.458999999999769], + [4.324166, 4.547000000000523], + [4.601958, 4.534999999999734], + [4.25825, 4.531000000000063], + [4.388834, 4.427000000000625], + [4.491833, 3.8759999999999906], + [4.640917, 4.042000000000101], + [4.665125, 3.973999999999478], + [4.4025, 4.939000000000249], + [4.507083, 4.811999999999372], + [4.680042, 4.136000000000806], + [4.248333, 4.141999999999868], + [4.524208, 3.8720000000003196], + [4.161792, 3.610000000000113], + [4.446583, 4.303000000000168], + [4.470667, 4.434999999999967], + [4.472, 4.0959999999996555], + [4.332291, 4.133999999999638], + [4.4625, 3.814000000000206], + [4.367834, 3.888999999999143], + [4.715916, 4.187999999999192], + [4.124625, 3.6209999999998743], + [4.492791, 3.8890000000000313], + [4.194208, 3.5109999999995978], + [4.39975, 3.842000000000567], + [4.211667, 4.424999999999457], + [4.431084, 3.7920000000006837], + [4.349167, 4.533999999999594], + [4.496541, 4.137999999999309], + [4.911333, 4.432000000000436], + [4.455334, 3.8000000000009138], + [4.666208, 4.334999999999312], + [4.145, 3.503000000000256], + [4.242959, 4.734000000000904] + ] + }, + "wall_medians_ms": { + "baseline": 4.3085415000000005, + "candidate": 4.462375 + }, + "change_percent": 3.570430968345062 + } + ], + "output_sha256": "7580ff3b52a2d98af85492b8d877503abd2ba58191106735906656c246a1680a", + "summary": { + "baseline": { + "count": 360, + "wall_median_ms": 4.350229000000001, + "cpu_median_ms": 4.251000000000005 + }, + "candidate": { + "count": 360, + "wall_median_ms": 4.497354, + "cpu_median_ms": 4.386999999999919 + }, + "change_ms": 0.14712499999999906, + "change_percent": 3.382005866817561 + } + }, + "env-current-deep": { + "argv": ["env", "current", "node", "--json"], + "cwd_depth": 20, + "rounds": [ + { + "samples": { + "baseline": [ + [5.024917, 4.95100000000015], + [4.926042, 5.174999999999486], + [4.745792, 4.805000000001058], + [5.379792, 5.484000000000933], + [5.412458, 5.354999999999777], + [4.783875, 4.273000000000415], + [4.924084, 5.066000000000237], + [4.744375, 4.229000000000482], + [4.646542, 4.421999999999926], + [5.043125, 4.509999999999792], + [4.817708, 4.692999999999614], + [5.036709, 4.371000000000791], + [4.767458, 4.756999999999678], + [6.252333, 5.4000000000007375], + [5.377583, 5.467999999999584], + [5.104042, 5.393999999999011], + [4.942292, 4.433999999999827], + [4.909292, 4.679000000000322], + [5.0045, 5.245000000000388], + [5.068875, 4.334999999999312], + [5.20225, 5.207999999999657], + [4.968833, 4.680000000000462], + [4.82875, 4.827999999999832], + [4.984666, 4.686999999999664], + [5.551333, 4.96700000000061], + [5.335166, 4.701999999999984], + [5.048417, 4.81400000000054], + [5.375667, 4.903000000000546], + [5.025792, 5.022000000000304], + [5.1735, 5.039000000000016], + [5.058334, 4.800999999999611], + [5.099208, 4.850000000001131], + [4.986625, 4.8320000000003915], + [5.583375, 5.6840000000004665], + [5.445833, 5.704999999998961], + [5.008125, 4.8040000000000305], + [5.230958, 5.204000000000875], + [5.346875, 5.073000000000327], + [5.66375, 5.452000000000901], + [5.395167, 5.324999999999136], + [5.0795, 4.887000000000086], + [5.519959, 5.361000000000615], + [4.645834, 4.182999999999382], + [5.124166, 5.349999999999966], + [4.789459, 4.99000000000116], + [4.808416, 4.567000000000654], + [4.90825, 5.197000000000784], + [5.203583, 4.900999999999378], + [4.908791, 4.239000000000104], + [4.602125, 4.272000000000276], + [4.6475, 4.151000000000238], + [4.903375, 4.698000000000313], + [5.034334, 4.737999999999687], + [4.569667, 3.999000000001196], + [5.039958, 5.190999999999946], + [4.900292, 4.821999999998994], + [4.427208, 4.1679999999999495], + [5.725416, 6.069000000000102], + [5.205042, 5.179000000000045], + [4.846209, 4.493999999999332], + [4.936, 4.634000000001137], + [5.901958, 6.1229999999996565], + [4.850125, 4.687000000000552], + [4.674, 4.197999999999702], + [4.7575, 4.075000000001161], + [4.689208, 4.887000000000086], + [5.038917, 4.381999999999664], + [4.645542, 4.239000000000104], + [4.602833, 4.129999999999967], + [4.837208, 4.137000000000057], + [4.96725, 4.455000000000098], + [4.3855, 4.005000000000258], + [4.790709, 4.056999999998645], + [4.576833, 4.7680000000003275], + [4.703542, 4.45499999999921], + [4.7425, 4.871000000000514], + [4.867208, 4.65400000000038], + [4.358541, 4.020000000000579], + [4.987792, 5.008999999999375], + [4.738583, 5.022000000000304], + [4.564125, 4.151000000000238], + [4.356708, 4.0519999999997225], + [4.689708, 4.472000000000698], + [4.789334, 4.776999999998921], + [6.401875, 6.2309999999996535], + [6.446292, 6.46199999999908], + [6.165084, 5.639999999999645], + [5.664625, 5.057000000000755], + [7.281584, 6.465999999999639], + [5.441458, 5.548000000000997], + [4.92525, 4.443000000000197], + [5.03175, 5.217000000000027], + [4.768667, 4.571000000000325], + [5.327875, 5.560000000000898], + [5.907125, 5.943999999999505], + [5.375833, 5.627000000000493], + [5.042166, 5.138000000000531], + [5.11825, 4.974999999999952], + [4.935, 5.022000000000304], + [4.915292, 4.7269999999990375], + [4.991375, 5.120999999999043], + [5.029167, 5.069000000000656], + [4.799959, 4.144000000000148], + [4.949125, 5.231000000000208], + [4.803625, 4.690999999999335], + [4.792125, 4.457000000000377], + [4.403333, 4.027000000000669], + [5.483459, 4.962000000000799], + [4.564125, 4.170000000000229], + [4.473833, 3.9290000000011815], + [5.457083, 4.936999999998193], + [6.0385, 4.30199999999914], + [5.166958, 4.975000000001728], + [5.564, 5.211000000000965], + [5.12625, 4.33600000000034], + [5.88325, 5.123000000001099], + [4.889667, 5.162000000000333], + [5.016709, 4.398000000000124], + [5.096583, 5.622999999999934], + [5.142375, 4.5640000000002345] + ], + "candidate": [ + [5.245417, 5.590999999999902], + [5.075167, 5.279999999999951], + [4.66725, 4.616999999999649], + [5.236791, 5.369999999999209], + [5.504042, 4.77499999999953], + [5.128125, 5.199000000000176], + [5.543917, 5.504999999999427], + [5.186959, 5.266999999999911], + [4.890708, 4.78899999999971], + [4.683625, 4.717000000000304], + [5.178875, 4.573999999999856], + [5.846166, 5.371000000000237], + [4.889917, 4.194999999999283], + [5.924459, 5.503000000000036], + [5.394625, 4.615000000000258], + [4.819666, 4.274000000000555], + [4.834709, 4.978000000000371], + [4.90875, 4.405999999999466], + [5.23925, 4.580999999999946], + [4.841042, 4.730000000000345], + [5.84475, 5.755999999999872], + [5.323708, 5.391000000000368], + [5.592791, 5.888999999999811], + [5.487417, 5.736999999999881], + [5.237667, 4.715000000000913], + [5.794334, 5.467999999998696], + [5.72, 5.488999999999855], + [5.64525, 5.364999999999398], + [4.850167, 4.837999999999454], + [5.54325, 5.166000000000892], + [5.462833, 5.198000000000036], + [5.241708, 5.040999999999407], + [5.273167, 5.160999999999305], + [5.717375, 5.739999999999412], + [5.66175, 5.914999999999893], + [5.54825, 5.529000000001005], + [5.660125, 5.813999999999098], + [5.680416, 5.428999999999462], + [5.2925, 5.26900000000019], + [6.0045, 5.644999999999456], + [5.595917, 5.537000000000347], + [6.138125, 5.969999999999587], + [5.062959, 5.202999999999847], + [5.263042, 5.29400000000102], + [4.881125, 4.897999999998959], + [5.362625, 5.655999999999217], + [5.074125, 4.538999999999405], + [5.206542, 5.363000000000007], + [4.689375, 4.271000000000136], + [4.88525, 4.921999999999649], + [4.891542, 5.046000000000106], + [4.950083, 4.558999999999536], + [4.6995, 4.247999999999585], + [4.856959, 4.391000000000034], + [4.627667, 4.455999999999349], + [5.129542, 5.152000000000712], + [5.351667, 5.43900000000086], + [5.095958, 4.289999999999239], + [4.960875, 4.364999999999952], + [5.406959, 5.738000000000909], + [5.666584, 5.132999999998944], + [4.927208, 4.300999999999888], + [5.630125, 5.156999999999634], + [5.162, 4.521000000000441], + [5.02875, 4.868999999999346], + [4.983583, 4.548999999999026], + [5.103334, 5.10799999999989], + [4.594917, 4.933000000000298], + [4.928875, 5.296999999999663], + [4.853125, 4.544000000000992], + [4.993584, 5.1709999999989265], + [4.96, 4.34400000000057], + [5.020167, 5.209000000000685], + [4.912125, 4.418000000000255], + [4.794375, 4.138000000000197], + [4.6355, 4.114999999999647], + [4.743375, 4.379000000000133], + [4.721125, 4.721999999999227], + [4.947709, 4.760000000000986], + [4.702167, 4.15599999999916], + [4.884958, 4.995000000000083], + [4.646958, 4.192999999999891], + [5.135125, 4.590999999999568], + [5.008792, 4.271000000001024], + [6.798667, 6.619000000000597], + [5.815084, 5.378000000000327], + [6.062125, 6.271000000001692], + [6.038917, 6.001999999998731], + [6.164208, 6.119999999999237], + [5.3155, 4.7280000000000655], + [5.150042, 4.681999999998965], + [5.533292, 5.466000000000193], + [4.933167, 4.491999999999052], + [5.86725, 6.127000000001104], + [5.5245, 5.37299999999874], + [5.040958, 5.024999999999835], + [5.483958, 5.646999999999736], + [5.121, 5.1360000000002515], + [5.357208, 5.228999999999928], + [5.289542, 4.954000000001457], + [5.093292, 5.088000000000648], + [5.247417, 5.471999999999255], + [5.403542, 5.074000000000467], + [5.401709, 4.597999999997882], + [4.833292, 4.306000000001475], + [4.649458, 4.436999999999358], + [5.070917, 4.695999999999145], + [4.916166, 4.46799999999925], + [4.921667, 4.806999999999562], + [5.04525, 4.398000000000124], + [4.97925, 4.515000000001379], + [4.665458, 4.958999999999492], + [5.156, 4.353999999999303], + [5.80175, 5.354999999999777], + [5.229292, 5.083999999998312], + [5.131208, 4.457999999999629], + [4.657167, 4.095999999998767], + [5.159209, 5.43000000000049], + [5.232167, 4.537000000000901], + [5.749792, 6.16299999999903] + ] + }, + "wall_medians_ms": { + "baseline": 4.9895835, + "candidate": 5.153021 + }, + "change_percent": 3.2755740033211023 + }, + { + "samples": { + "baseline": [ + [4.586166, 4.268999999998968], + [4.794917, 4.570000000001073], + [4.986542, 5.01700000000227], + [4.926125, 4.811000000000121], + [4.759708, 4.730000000000345], + [4.763917, 4.801000000000499], + [4.936666, 4.632000000000858], + [4.661334, 4.144999999999399], + [4.666292, 4.65400000000038], + [4.511916, 4.194000000001807], + [4.912833, 4.432000000001324], + [4.608209, 4.611000000000587], + [4.688709, 4.331000000000529], + [4.896792, 4.7800000000002285], + [4.789541, 4.953000000000429], + [4.839291, 4.288999999999987], + [4.944125, 5.183999999999855], + [4.921042, 4.993999999999943], + [4.617666, 4.944999999999311], + [5.423417, 4.760999999998461], + [5.70125, 5.131000000000441], + [5.55875, 4.926999999998571], + [5.651583, 5.031000000000674], + [5.450416, 5.105999999999611], + [4.941083, 4.928999999998851], + [4.803625, 4.211000000001519], + [5.00025, 4.975999999999203], + [4.987292, 4.310000000000258], + [4.856833, 4.720999999999975], + [4.971916, 5.261999999998324], + [4.643709, 4.052000000001499], + [6.196917, 5.582000000002196], + [5.560833, 4.882000000000275], + [5.940792, 6.071999999999633], + [5.905292, 5.87900000000019], + [5.036125, 5.028999999998618], + [5.177375, 4.599000000000686], + [5.215083, 4.486999999999242], + [4.8345, 4.084000000002419], + [5.390833, 5.284999999998874], + [5.005291, 5.095999999999989], + [5.069833, 4.9850000000013495], + [5.092167, 4.538000000000153], + [4.709792, 4.331999999998004], + [4.8025, 4.143000000000896], + [5.127542, 4.871999999998877], + [4.781, 4.6860000000013], + [4.760042, 4.578999999999667], + [4.85875, 4.920999999999509], + [4.7245, 4.177000000000319], + [4.62825, 4.742000000000246], + [5.001709, 4.979000000000511], + [4.97575, 5.085999999998592], + [4.73675, 4.78799999999957], + [4.44825, 3.9440000000006137], + [4.970792, 4.197999999998814], + [4.754834, 5.134000000001748], + [4.770125, 4.3720000000000425], + [4.524125, 4.049000000001968], + [5.084542, 5.064000000000846], + [4.313958, 3.9879999999996585], + [4.8325, 4.98300000000107], + [4.683875, 4.068000000000183], + [4.775375, 4.065999999998127], + [4.691, 4.17500000000004], + [4.733416, 4.164999999998642], + [4.9165, 4.45399999999907], + [4.851375, 5.293999999999244], + [4.845583, 4.47699999999962], + [4.574625, 3.9290000000011815], + [4.397083, 4.0160000000000196], + [4.425708, 3.8879999999998915], + [4.637625, 4.47699999999962], + [4.396167, 4.244999999999166], + [4.822584, 4.261999999998878], + [4.360084, 3.9250000000006224], + [4.518208, 4.025000000000389], + [4.522167, 3.9569999999997663], + [4.406875, 3.849999999999909], + [4.610708, 4.775000000000418], + [4.357583, 4.411999999998528], + [4.671083, 4.180000000001627], + [4.467042, 3.9010000000008205], + [4.5345, 4.03700000000029], + [5.483542, 5.548999999998472], + [5.2385, 5.192000000000974], + [5.776459, 5.062000000002342], + [5.3385, 5.173999999998458], + [5.277167, 4.583999999999477], + [4.858875, 4.3210000000009074], + [5.2995, 5.336999999999037], + [5.85725, 5.705000000000737], + [6.154, 5.931999999999604], + [5.891917, 5.528000000001754], + [5.448709, 5.304999999999893], + [4.9535, 4.859999999998976], + [4.557416, 4.499000000000919], + [4.938708, 4.7280000000000655], + [4.855292, 4.78799999999957], + [5.0265, 4.929000000000627], + [5.363792, 4.679999999998685], + [4.751459, 4.99000000000116], + [5.175375, 4.466000000000747], + [4.869667, 4.547000000000523], + [5.800208, 5.859000000000947], + [5.338541, 5.584999999999951], + [4.884334, 4.531000000000063], + [4.840292, 4.8040000000000305], + [4.7635, 4.295000000000826], + [4.684584, 4.8440000000002925], + [4.921125, 4.987999999999104], + [4.811959, 5.373000000002293], + [5.038083, 4.984999999999573], + [4.636667, 4.241000000000383], + [4.986833, 4.875999999999436], + [4.657083, 5.110000000001946], + [5.020417, 5.046000000000106], + [4.862125, 4.62899999999955], + [4.783291, 4.588000000001813], + [4.716709, 4.4069999999987175] + ], + "candidate": [ + [5.218, 5.058000000000007], + [5.225542, 5.110999999999422], + [5.239375, 4.885999999999058], + [5.16425, 5.0819999999980325], + [5.055334, 4.457000000000377], + [4.8735, 4.4469999999989795], + [5.039458, 4.605999999999], + [4.993459, 5.221000000000586], + [5.073, 4.50200000000045], + [4.912333, 5.248999999999171], + [4.877125, 5.077999999997473], + [4.922458, 4.4189999999986185], + [5.005375, 4.528000000000532], + [4.99, 4.4599999999999085], + [4.725417, 4.279999999999617], + [4.659167, 4.253999999999536], + [4.832709, 4.236999999999824], + [5.109083, 4.470000000001306], + [5.077541, 4.266000000001213], + [5.700875, 5.473999999999535], + [6.048917, 6.280999999999537], + [8.057625, 5.60000000000116], + [6.052042, 5.917000000000172], + [5.06125, 4.607000000000028], + [5.477375, 5.217000000000027], + [5.305375, 5.755000000000621], + [5.181167, 4.649000000000569], + [5.068542, 4.964999999998554], + [4.674541, 4.194000000000031], + [4.826584, 4.258000000001871], + [4.978625, 4.78299999999976], + [5.842708, 5.301999999998586], + [6.4065, 6.7779999999988405], + [6.438833, 6.285999999999348], + [5.176416, 5.199000000001064], + [5.519542, 5.2880000000001814], + [5.296667, 5.129999999999413], + [5.23575, 5.25299999999973], + [4.928709, 5.312999999999235], + [6.093375, 5.588000000001259], + [5.535375, 4.713999999999885], + [5.389917, 5.085999999998592], + [5.023042, 5.171000000000703], + [5.04, 4.78999999999985], + [5.028792, 4.865999999999815], + [5.269583, 4.6920000000003625], + [5.077084, 4.374999999999574], + [5.054708, 4.4360000000001065], + [4.706333, 4.186000000000689], + [5.0165, 4.3720000000000425], + [4.831917, 4.2549999999987875], + [5.043459, 4.50200000000045], + [5.194709, 4.480000000000928], + [5.195042, 4.582000000000974], + [4.986, 4.479999999999151], + [5.31225, 5.264999999999631], + [4.741125, 4.2149999999985255], + [4.863792, 4.903999999999797], + [5.111708, 5.25500000000001], + [4.795708, 4.099999999999326], + [4.970875, 4.434999999999079], + [4.912084, 4.300000000000637], + [4.807292, 4.92399999999904], + [5.139334, 5.058000000001783], + [5.883625, 5.905000000000271], + [5.042333, 5.475000000000563], + [5.048167, 5.044000000001603], + [4.855166, 4.307000000000727], + [4.931875, 5.079000000000278], + [4.555042, 4.269999999999996], + [4.865708, 4.627999999998522], + [4.367167, 4.070000000000462], + [4.738584, 4.18400000000041], + [4.714125, 4.964000000001079], + [4.550708, 4.542999999999964], + [4.552417, 4.839999999999733], + [4.930917, 4.863000000000284], + [4.630958, 4.646999999998513], + [4.204791, 4.000000000001336], + [4.733292, 5.060999999999538], + [4.335792, 4.0180000000020755], + [4.662209, 4.335999999998563], + [4.905041, 4.779999999998452], + [5.006458, 5.060999999999538], + [4.7315, 4.229000000000482], + [5.249667, 4.5770000000011635], + [5.500917, 5.18899999999789], + [5.328417, 4.765000000000796], + [5.53125, 5.257000000000289], + [5.22, 4.580999999999946], + [5.461458, 5.266999999999911], + [5.83925, 5.643999999998428], + [5.669875, 6.016999999999939], + [6.348917, 5.829999999999558], + [5.542125, 4.993000000000691], + [5.073834, 5.065000000000097], + [5.400292, 5.1069999999988624], + [5.368125, 5.337000000000813], + [5.210625, 4.898999999999987], + [5.218666, 4.730999999999597], + [4.812417, 4.276000000000835], + [5.106, 4.646999999998513], + [5.161958, 5.506000000000455], + [5.108958, 5.09199999999943], + [5.270834, 5.351999999998469], + [5.9005, 5.70199999999943], + [5.46575, 5.6840000000004665], + [5.011458, 5.112999999999701], + [4.870917, 5.0589999999992585], + [5.712625, 5.779000000000423], + [5.297625, 5.464999999999165], + [5.114958, 4.984999999997797], + [4.89825, 4.938000000000997], + [4.977542, 4.986000000000601], + [4.949042, 5.1469999999991245], + [4.864459, 4.327999999999221], + [4.8715, 4.386999999999475], + [5.191125, 4.325000000001467], + [4.796292, 4.143999999998371], + [4.968542, 4.227000000000203] + ] + }, + "wall_medians_ms": { + "baseline": 4.8560625, + "candidate": 5.055021 + }, + "change_percent": 4.097115718753619 + }, + { + "samples": { + "baseline": [ + [5.1225, 5.046000000000106], + [4.834333, 4.572000000001353], + [4.940459, 5.073000000001215], + [4.732916, 4.850999999998606], + [5.19475, 5.10300000000008], + [4.76425, 4.17500000000004], + [4.521917, 4.2149999999985255], + [4.992375, 5.015000000000214], + [4.791833, 4.524999999999224], + [5.346167, 4.716999999999416], + [5.196, 4.545000000000243], + [4.67325, 4.300000000000637], + [4.945208, 4.390000000000782], + [5.245167, 5.275999999998504], + [4.969541, 4.484000000001487], + [5.172458, 4.531000000000063], + [4.95325, 4.884999999999806], + [4.965959, 4.953999999999681], + [4.730208, 4.129999999999967], + [4.968125, 4.853000000000662], + [4.724584, 4.255000000000564], + [4.821666, 4.2960000000000775], + [5.0285, 4.684999999998496], + [4.99775, 4.33400000000006], + [4.975375, 4.459000000000657], + [4.713625, 4.448999999999259], + [5.189333, 5.156999999998746], + [4.755875, 4.189999999999472], + [4.980583, 4.386000000000223], + [6.064708, 5.720000000000169], + [6.542708, 6.111999999999895], + [5.880458, 5.723999999998952], + [5.436583, 5.28700000000093], + [5.312709, 4.614000000000118], + [4.952708, 4.842999999999265], + [5.022375, 4.2960000000000775], + [5.17175, 5.284000000001399], + [4.894292, 4.376000000000602], + [5.130875, 4.256999999999067], + [4.870917, 4.279000000000366], + [6.506208, 5.739999999999412], + [5.55125, 5.6300000000018], + [5.301, 5.383999999999389], + [5.0495, 4.9850000000013495], + [4.974042, 5.459999999999354], + [4.980083, 4.514000000000351], + [5.403375, 4.583999999999477], + [5.020875, 4.142000000001644], + [4.806583, 5.2400000000005775], + [5.16075, 4.9429999999990315], + [4.939125, 4.9320000000001585], + [5.176208, 4.453000000001595], + [4.938167, 4.694999999999894], + [4.741458, 5.093000000000458], + [4.689583, 4.8130000000004], + [5.322875, 5.630000000000024], + [5.099917, 4.414000000000584], + [5.016958, 4.567999999999017], + [5.369084, 5.002999999998536], + [5.479541, 5.529000000001005], + [5.206834, 4.629999999998802], + [5.086292, 4.879999999998219], + [5.016667, 4.95100000000015], + [4.947542, 4.7170000000011925], + [4.952125, 4.569999999999297], + [5.285083, 5.062999999999818], + [4.821084, 4.80800000000059], + [4.899625, 4.691999999998586], + [5.1615, 5.011000000001431], + [5.291833, 4.835999999999174], + [4.97475, 4.400999999999655], + [4.948458, 4.786999999998542], + [4.935041, 4.911999999997363], + [4.661667, 4.166000000001446], + [4.590625, 4.059999999999064], + [5.086709, 4.381999999999664], + [4.95275, 4.46099999999916], + [4.846708, 4.715000000000913], + [4.89075, 4.870000000000374], + [5.151458, 4.503999999998953], + [5.165875, 4.887000000000086], + [4.95825, 5.21199999999844], + [4.903333, 4.291000000000267], + [4.768042, 4.339000000001647], + [4.815875, 4.758000000000706], + [4.943417, 4.972999999999672], + [5.143958, 4.6229999999987115], + [5.722208, 5.188999999999666], + [5.597875, 5.535000000001844], + [5.381625, 4.78999999999985], + [4.990208, 4.402999999999935], + [4.881583, 4.431000000000296], + [4.739334, 4.244999999999166], + [4.610208, 4.039999999998045], + [4.682917, 3.9610000000003254], + [4.666833, 4.066000000001679], + [4.795916, 4.747999999999308], + [5.315125, 4.497999999999891], + [4.779917, 4.3189999999988515], + [5.412917, 5.568000000000239], + [5.273792, 5.252000000002255], + [5.456333, 5.449000000002258], + [5.155667, 5.205000000000126], + [4.948792, 4.906999999999329], + [4.704583, 4.561000000000703], + [4.882917, 4.697999999999425], + [5.026875, 4.818999999999463], + [5.058709, 5.14400000000137], + [4.775167, 4.717999999998668], + [4.923958, 4.936000000000718], + [5.11575, 5.140999999998286], + [4.43875, 4.559000000000424], + [4.680333, 4.348000000000241], + [5.134042, 4.331000000000529], + [5.00875, 4.045999999998884], + [5.308959, 5.414000000001806], + [6.549292, 6.759000000000626], + [6.014292, 5.142999999998565], + [5.859917, 6.034000000001427], + [5.489416, 4.853999999999914] + ], + "candidate": [ + [5.059209, 4.979999999999762], + [5.189375, 5.119999999998015], + [5.24475, 5.4560000000005715], + [5.136041, 5.568000000000239], + [5.003583, 4.974999999999952], + [5.189334, 5.114999999999981], + [4.9995, 5.202000000000595], + [5.169083, 4.622000000001236], + [4.719834, 4.319000000000628], + [5.017708, 5.07599999999897], + [5.3255, 5.129000000000161], + [5.158625, 4.507000000000261], + [5.709584, 6.099999999999994], + [5.960417, 4.925000000000068], + [5.345542, 5.389999999998452], + [5.293584, 5.354000000000525], + [4.932417, 4.412000000000305], + [5.196833, 4.583000000000226], + [5.114208, 4.745999999999029], + [5.120125, 4.554999999999865], + [4.940542, 4.8330000000014195], + [4.752708, 4.509999999999792], + [4.840334, 4.394000000001341], + [4.992709, 4.89899999999821], + [4.939584, 5.143000000000342], + [5.094583, 5.074000000000467], + [5.774625, 4.879000000000744], + [4.794209, 5.130000000001189], + [5.17025, 4.536999999999125], + [4.989709, 4.3210000000009074], + [5.83525, 5.971999999999866], + [5.651083, 4.925000000000068], + [5.813625, 5.1469999999991245], + [5.53675, 5.58000000000014], + [5.51375, 4.549000000000802], + [5.225166, 5.247000000000668], + [5.11625, 4.45199999999879], + [5.625625, 4.633999999999361], + [5.221834, 5.471000000000004], + [5.203375, 4.961999999999023], + [7.426958, 5.711000000001576], + [6.898958, 5.548999999998472], + [5.606458, 5.329999999998947], + [6.5225, 5.223000000000866], + [5.010459, 5.1009999999998], + [5.307291, 4.656999999999911], + [5.046958, 4.979000000000511], + [5.349208, 5.183999999998079], + [5.025125, 4.552999999999585], + [5.134666, 4.526999999999504], + [5.292916, 4.6280000000002985], + [4.918, 4.5869999999990085], + [5.154375, 5.219999999999558], + [5.384, 5.57500000000033], + [5.088, 4.336999999999591], + [5.6955, 4.804999999999282], + [5.37, 5.525999999999698], + [5.369125, 4.758999999999958], + [5.645417, 5.424000000001428], + [5.379833, 5.271999999999721], + [5.473416, 5.46200000000141], + [5.456959, 5.504000000001952], + [5.151834, 4.963999999999302], + [5.018083, 4.915999999999698], + [5.363208, 5.0480000000003855], + [4.963083, 4.9440000000000595], + [5.233709, 5.034999999999457], + [5.380292, 5.084000000001865], + [5.434333, 5.142999999998565], + [5.283708, 4.812000000001149], + [4.792916, 4.818000000000211], + [5.036708, 4.312000000002314], + [5.056041, 4.71300000000241], + [5.684666, 5.6659999999979505], + [5.136542, 5.193000000002002], + [5.073584, 4.90999999999886], + [4.846333, 5.018000000001521], + [4.947, 4.403999999999186], + [4.9875, 4.496999999998863], + [5.326291, 4.6530000000011285], + [5.308375, 5.441999999998615], + [5.08325, 4.644000000002535], + [4.986709, 4.9829999999992935], + [5.176416, 4.987999999999104], + [4.862167, 4.344999999998933], + [4.91525, 4.340000000000899], + [5.240375, 4.820000000002267], + [5.79975, 6.099999999998218], + [6.045791, 6.0509999999993624], + [5.32275, 5.316999999999794], + [4.966708, 4.904999999999049], + [4.870542, 4.428000000000765], + [5.075083, 4.898000000000735], + [5.52725, 5.277000000001308], + [4.558416, 4.1570000000010765], + [4.748458, 4.708999999998298], + [5.2805, 4.742000000000246], + [4.945125, 5.095999999999989], + [4.943708, 4.877000000000464], + [4.879917, 4.348000000000241], + [6.468958, 6.15799999999922], + [5.163833, 5.291999999997188], + [5.106375, 5.39799999999957], + [5.162708, 5.046000000000106], + [4.930541, 4.913000000000167], + [5.345375, 5.21899999999853], + [5.665584, 5.491000000001023], + [4.987584, 4.673000000000371], + [5.179417, 5.169000000000423], + [4.975417, 5.198000000000036], + [4.822208, 4.744000000000526], + [4.88375, 5.017000000000493], + [5.049292, 4.9829999999992935], + [5.47825, 5.402000000000129], + [4.919583, 5.265999999998883], + [6.396667, 5.5789999999991124], + [6.632834, 6.115000000001203], + [5.580959, 5.253999999998982], + [5.730209, 5.580999999999392], + [6.293, 6.339000000000539] + ] + }, + "wall_medians_ms": { + "baseline": 4.9853955, + "candidate": 5.1696665 + }, + "change_percent": 3.696216278126774 + } + ], + "output_sha256": "7580ff3b52a2d98af85492b8d877503abd2ba58191106735906656c246a1680a", + "summary": { + "baseline": { + "count": 360, + "wall_median_ms": 4.952729, + "cpu_median_ms": 4.771500000000373 + }, + "candidate": { + "count": 360, + "wall_median_ms": 5.130375, + "cpu_median_ms": 4.979500000000137 + }, + "change_ms": 0.1776460000000002, + "change_percent": 3.586830613990788 + } + }, + "env-which": { + "argv": ["env", "which", "node"], + "cwd_depth": 0, + "rounds": [ + { + "samples": { + "baseline": [ + [4.438875, 4.321999999998383], + [4.580959, 4.4260000000022615], + [5.07825, 4.519000000000162], + [4.837917, 4.572000000001353], + [4.397208, 4.2960000000000775], + [4.549333, 4.427999999998988], + [4.590541, 4.329999999999501], + [4.658792, 3.87100000000018], + [4.623833, 4.1970000000013385], + [4.3915, 4.197999999998814], + [4.383125, 3.8669999999996207], + [4.310375, 4.549000000000802], + [4.316208, 3.603000000000023], + [4.495958, 4.557000000000144], + [4.225625, 3.5930000000004014], + [4.43225, 3.717999999999222], + [4.278333, 3.892999999997926], + [4.512375, 3.854000000000468], + [4.223041, 3.5729999999993822], + [4.0925, 4.155000000000797], + [4.374291, 4.1269999999986595], + [4.223125, 4.177999999999571], + [4.16625, 3.6610000000010245], + [4.102625, 4.139000000000337], + [4.445125, 4.110999999999976], + [4.183417, 3.7450000000003314], + [4.358, 3.7820000000010623], + [4.199542, 3.5360000000004277], + [4.322666, 4.166999999998922], + [4.631833, 4.468000000001027], + [4.754584, 4.604999999999748], + [4.234917, 3.864000000001866], + [4.389917, 4.1789999999988225], + [4.654916, 4.5349999999988455], + [4.523625, 4.849000000000103], + [4.563375, 4.293999999998022], + [4.659542, 4.753999999998371], + [4.758791, 5.11000000000017], + [4.501166, 4.450000000000287], + [4.286542, 4.2839999999984], + [4.281083, 4.481000000001956], + [4.573, 4.453000000001595], + [4.128, 3.994000000000497], + [4.462959, 4.500999999999422], + [3.956334, 3.9479999999993964], + [4.129209, 4.103000000000634], + [4.17575, 4.204999999998904], + [4.382416, 4.6520000000001005], + [4.426666, 3.787000000000873], + [4.446041, 3.805999999999088], + [4.3525, 3.7120000000001596], + [4.05325, 4.162000000000887], + [4.712125, 4.023999999999361], + [4.261792, 4.1399999999995885], + [3.976583, 3.516000000001185], + [4.40825, 3.8809999999998013], + [4.319333, 3.8689999999999003], + [4.186, 3.8909999999994227], + [4.686584, 5.24599999999964], + [5.270833, 5.466000000000193], + [5.705417, 5.958999999997161], + [5.131791, 4.276000000000835], + [5.089459, 4.184999999999661], + [5.212958, 4.659000000000191], + [4.28325, 3.720999999998753], + [4.526542, 4.3720000000000425], + [4.072292, 3.7010000000012866], + [4.663333, 3.9010000000008205], + [4.169041, 3.671999999998121], + [4.477333, 3.8590000000020552], + [4.378, 3.8330000000001974], + [4.351875, 4.288000000000736], + [4.351291, 4.286000000000456], + [4.2935, 3.788999999999376], + [4.463084, 3.973999999999478], + [4.430083, 4.5239999999999725], + [4.761875, 4.445999999999728], + [4.62675, 3.752000000002198], + [4.57025, 3.9639999999998565], + [4.285584, 4.057999999998785], + [4.380416, 3.7079999999996005], + [4.074292, 4.108000000000445], + [4.239417, 4.247999999998697], + [4.053042, 3.8400000000002876], + [4.159416, 3.648000000001872], + [4.317167, 4.519999999999413], + [4.509416, 4.521000000000441], + [4.404917, 3.6959999999996995], + [4.187709, 3.6249999999995453], + [4.454375, 3.8669999999996207], + [4.755042, 4.9429999999990315], + [4.314125, 3.906999999999883], + [4.250125, 3.568000000001348], + [4.52125, 4.660000000001219], + [4.195292, 4.298999999999609], + [4.382875, 3.711000000000908], + [4.149625, 4.067000000000931], + [4.880833, 4.935000000001466], + [4.146667, 4.381000000000412], + [4.4215, 4.481999999999431], + [4.373292, 4.516999999999882], + [4.54575, 4.310000000000258], + [4.178291, 4.865999999999815], + [4.228083, 4.125000000001933], + [4.305583, 4.465999999998971], + [4.471334, 4.523000000000721], + [4.311917, 4.645000000001787], + [4.143458, 4.342000000001178], + [4.634875, 5.0589999999992585], + [4.29625, 4.428000000000765], + [4.224791, 4.316999999998572], + [4.453084, 4.510000000001568], + [4.123334, 4.36600000000098], + [4.361584, 4.531000000001839], + [4.492125, 4.884999999999806], + [4.194083, 3.9130000000007215], + [4.207167, 4.293999999999798], + [4.337292, 4.346999999999213], + [4.357334, 4.535000000000622], + [4.217166, 4.273999999998779] + ], + "candidate": [ + [4.973417, 5.053000000000196], + [4.528875, 4.660999999998694], + [4.901417, 4.9200000000002575], + [6.115959, 5.129999999999413], + [4.526833, 3.865999999998593], + [4.687375, 3.9720000000009748], + [4.665916, 4.1330000000012745], + [4.417542, 4.580000000000695], + [3.981208, 3.6269999999980485], + [4.341833, 3.811000000000675], + [4.451833, 4.523000000000721], + [5.092708, 3.9749999999987295], + [4.338291, 4.419999999999646], + [4.424416, 4.272000000000276], + [4.433416, 4.293000000000546], + [4.724166, 5.071000000000936], + [4.198125, 4.318000000001376], + [4.183208, 3.8309999999981414], + [4.512709, 4.623000000002264], + [4.669125, 4.118999999999318], + [4.318292, 3.663000000001304], + [4.332833, 3.7880000000001246], + [4.682208, 4.936999999998193], + [4.037375, 3.5609999999994812], + [4.342209, 3.994000000000497], + [4.54475, 4.876999999998688], + [4.439334, 3.873999999999711], + [4.250125, 4.445000000000476], + [4.583292, 4.04800000000094], + [4.638291, 5.023999999998807], + [4.731333, 4.583999999999477], + [4.696042, 4.856999999997669], + [4.775375, 4.989000000001909], + [4.847333, 4.5770000000011635], + [4.554334, 4.5010000000011985], + [4.488042, 3.9900000000017144], + [4.389041, 4.34300000000043], + [4.857958, 5.3909999999994795], + [4.087333, 4.271000000001024], + [4.795125, 4.702999999999236], + [4.371458, 4.262999999999906], + [4.641542, 4.60399999999872], + [4.484375, 4.724999999998758], + [4.641417, 4.5880000000000365], + [4.349292, 4.595000000000127], + [4.261584, 4.322000000001935], + [4.517458, 4.6749999999988745], + [4.381833, 4.483000000000459], + [4.592667, 4.754999999999399], + [4.589334, 4.48599999999999], + [4.382875, 4.146999999999679], + [4.6195, 5.088000000000648], + [4.593083, 3.9840000000008757], + [4.542125, 4.024999999998613], + [4.486542, 4.006000000000398], + [4.213334, 4.2039999999996525], + [4.442, 3.8359999999997285], + [4.716542, 3.9370000000005234], + [5.446542, 4.690000000000083], + [5.371833, 4.580999999999946], + [5.086334, 5.245000000002165], + [5.810166, 5.6480000000007635], + [5.114084, 5.046000000000106], + [4.691334, 4.666000000000281], + [4.804292, 4.850000000001131], + [4.663584, 4.071999999998965], + [4.361416, 3.948999999998648], + [4.550792, 4.884999999999806], + [4.257791, 4.52900000000156], + [4.267416, 4.201999999999373], + [4.497583, 4.903999999999797], + [4.274375, 4.688999999999055], + [4.259334, 3.7719999999996645], + [4.409833, 4.846999999999824], + [4.609875, 4.611000000000587], + [4.313667, 3.619000000000483], + [4.667166, 3.8999999999997925], + [4.810084, 4.861999999999256], + [4.924083, 5.193999999999477], + [4.326417, 3.883000000000081], + [4.573375, 4.820999999999742], + [4.400209, 4.153000000000517], + [4.739208, 4.3600000000001415], + [4.311959, 3.6810000000002674], + [4.426333, 4.345999999998185], + [4.414708, 3.823000000000576], + [4.472375, 4.784000000000788], + [4.38525, 5.010999999999655], + [4.315083, 4.545999999999495], + [4.347958, 4.52900000000156], + [4.740917, 4.176000000001068], + [4.640958, 4.643999999998982], + [4.4115, 4.380999999998636], + [4.362875, 3.99799999999928], + [4.356917, 3.866000000000369], + [4.243292, 3.7399999999987443], + [4.342166, 3.805999999999088], + [4.827292, 4.812999999998624], + [4.321833, 4.345999999999961], + [5.113, 4.79900000000022], + [4.293416, 4.34300000000043], + [4.465083, 4.433999999999827], + [4.393458, 4.103000000000634], + [4.418208, 4.324999999997914], + [4.206333, 4.315000000000069], + [4.364917, 4.561999999999955], + [4.120666, 4.436999999999358], + [4.344791, 4.566999999997989], + [4.332417, 4.435000000000855], + [4.436625, 4.720999999999975], + [4.663333, 4.828999999999084], + [4.303208, 4.765999999998272], + [4.550875, 4.781999999998732], + [4.1815, 4.337999999998843], + [4.345375, 4.19800000000059], + [4.572084, 4.252000000001033], + [4.087709, 4.3309999999987525], + [4.613208, 4.6280000000002985], + [4.471292, 4.184999999999661], + [4.517458, 4.411000000001053] + ] + }, + "wall_medians_ms": { + "baseline": 4.3761455, + "candidate": 4.471833500000001 + }, + "change_percent": 2.1865817761315576 + }, + { + "samples": { + "baseline": [ + [4.730708, 4.1039999999998855], + [4.207125, 4.217000000000581], + [4.037, 4.0300000000002], + [4.370083, 4.348999999999492], + [4.270417, 4.486999999999242], + [4.251459, 4.039000000002346], + [3.942875, 4.01199999999946], + [4.202791, 3.668000000001115], + [4.541041, 4.208999999999463], + [4.230083, 4.198999999999842], + [4.002375, 4.045000000001409], + [4.115875, 4.068000000000183], + [4.194792, 3.97299999999845], + [4.43775, 3.866000000000369], + [4.407959, 4.191000000002276], + [4.384708, 4.128999999998939], + [4.345042, 4.355000000000331], + [4.494541, 4.687999999999803], + [4.296, 4.431999999999547], + [4.264458, 4.315000000001845], + [4.462417, 4.253999999999536], + [4.382583, 4.351999999999023], + [4.327125, 4.1910000000005], + [4.481542, 4.632999999998333], + [4.3125, 4.270999999999248], + [4.83275, 4.6520000000001005], + [4.453166, 4.455000000000098], + [4.414584, 4.197999999998814], + [4.168125, 4.370999999999015], + [4.491542, 4.196999999997786], + [4.238667, 3.695000000000448], + [4.016792, 4.180999999999102], + [4.412375, 3.9100000000011903], + [4.039667, 3.3569999999993883], + [4.047917, 4.563000000000983], + [4.07675, 3.3320000000003347], + [4.4655, 4.521999999999693], + [4.197333, 3.5229999999994988], + [4.262375, 4.208999999999463], + [4.25075, 4.469000000000278], + [4.046541, 3.475000000001671], + [4.215292, 3.6829999999987706], + [4.297792, 4.193000000000779], + [4.600875, 4.05500000000103], + [4.2385, 4.364999999998176], + [3.943916, 3.4879999999990474], + [4.487042, 4.52900000000156], + [4.4205, 3.7499999999983658], + [4.4025, 4.426000000000485], + [4.192, 3.686000000000078], + [4.471125, 4.585999999999757], + [4.214083, 3.7169999999999703], + [4.206708, 4.2850000000012045], + [3.893291, 4.229999999999734], + [4.387042, 4.371000000000791], + [4.497875, 4.633000000001886], + [4.407458, 4.434999999997302], + [3.939792, 4.100000000001103], + [4.011333, 4.279000000000366], + [4.1215, 4.06200000000112], + [4.304042, 4.452999999999818], + [4.17425, 4.255000000000564], + [4.321416, 4.410000000000025], + [3.940958, 3.916999999999504], + [4.174625, 4.348999999999492], + [4.228417, 3.9400000000000546], + [3.978625, 4.388999999999754], + [3.948667, 4.125999999999408], + [4.109334, 3.9600000000010738], + [3.882875, 4.130999999999219], + [4.085125, 4.036000000001039], + [3.835, 3.7309999999983745], + [4.122125, 4.056999999999533], + [4.324792, 4.313000000001566], + [4.128833, 3.976999999999009], + [4.128833, 4.305000000000447], + [5.593167, 5.338000000000065], + [4.878458, 4.776999999998921], + [4.878875, 4.452999999999818], + [5.201375, 4.926000000001096], + [5.548333, 5.482999999999905], + [4.810958, 4.704999999999515], + [4.6765, 4.393000000000313], + [4.377667, 3.9210000000000633], + [4.773625, 4.616000000000398], + [4.567083, 4.580000000000695], + [4.299625, 4.231000000000762], + [5.002709, 4.438999999997861], + [4.928958, 4.703000000001012], + [4.875625, 4.6459999999974855], + [4.529459, 4.068000000000183], + [4.281666, 4.096999999999795], + [4.462833, 4.395000000000593], + [4.456334, 4.389999999999006], + [4.236083, 4.3419999999976255], + [4.345958, 4.110000000000724], + [4.208417, 4.314999999998292], + [4.754875, 4.471000000002334], + [4.29475, 4.008999999999929], + [4.248208, 3.7279999999988434], + [3.911125, 3.6170000000002034], + [4.221417, 3.750000000000142], + [4.129917, 4.35900000000089], + [4.036417, 4.151000000000238], + [4.432625, 3.7759999999984473], + [4.948708, 3.56700000000032], + [4.203792, 4.0399999999998215], + [4.218625, 4.482000000002984], + [4.183, 3.5919999999993735], + [4.2565, 3.6290000000001044], + [4.574958, 4.436999999999358], + [4.460084, 3.9839999999990994], + [4.79575, 4.625000000000767], + [4.339166, 4.792999999999381], + [4.326667, 3.6249999999995453], + [4.219041, 3.653999999999158], + [4.126625, 3.6360000000001946], + [4.424834, 4.322999999999411], + [3.973667, 3.519000000000716], + [4.478792, 4.376999999999853] + ], + "candidate": [ + [4.326875, 4.605999999999], + [4.39025, 4.5469999999987465], + [4.264625, 4.23200000000179], + [4.230792, 4.417999999999367], + [4.401166, 4.298000000000357], + [4.261667, 4.31599999999932], + [4.187, 4.336999999999591], + [4.203167, 4.454999999998321], + [4.352917, 4.372000000001819], + [4.34425, 4.013999999997964], + [4.095708, 4.135999999999029], + [4.686459, 4.540999999999684], + [4.396084, 4.243000000002439], + [4.549917, 4.392999999998537], + [4.520667, 4.311999999998761], + [4.372041, 4.336000000002116], + [4.36975, 4.208999999999463], + [4.387, 3.949999999999676], + [4.494291, 4.346999999999213], + [4.737083, 4.9829999999992935], + [4.700083, 4.266000000001213], + [4.61675, 4.566999999999766], + [4.742291, 4.707000000001571], + [4.666083, 4.623999999999739], + [4.525042, 4.266000000001213], + [4.808625, 4.645999999999262], + [4.706375, 4.551000000001082], + [4.837542, 4.678999999999434], + [4.42, 4.021000000001607], + [4.42575, 3.679000000001764], + [4.23075, 4.552000000000334], + [4.388, 3.7680000000008818], + [5.1425, 5.110999999999422], + [4.382334, 4.262000000000654], + [4.176292, 4.216999999998805], + [4.246083, 4.618000000000677], + [4.245166, 3.665999999999059], + [4.140542, 3.743000000000052], + [4.611709, 3.982000000000596], + [4.246041, 4.336999999999591], + [4.511833, 4.064999999998875], + [4.519042, 4.423000000000954], + [4.434333, 3.814000000000206], + [3.99675, 3.5229999999994988], + [4.334625, 4.380000000001161], + [4.400041, 4.061000000000092], + [4.799917, 3.8909999999994227], + [4.84375, 4.542999999999964], + [4.539542, 3.766000000000602], + [4.760417, 5.041999999999547], + [4.586167, 3.9680000000004156], + [4.706083, 4.846000000000572], + [4.466291, 3.865999999998593], + [4.207292, 4.575000000000884], + [4.093709, 4.252999999998508], + [4.808334, 4.935999999998941], + [4.315834, 4.4770000000013965], + [4.227208, 4.31099999999951], + [4.19325, 4.243000000000663], + [4.126209, 4.186999999998164], + [4.1725, 4.45399999999907], + [4.284, 4.315000000000069], + [4.378541, 4.258000000000095], + [4.276292, 4.137999999999309], + [4.533041, 4.924000000000817], + [4.587541, 4.535000000000622], + [4.028791, 4.174000000000788], + [3.92175, 4.14099999999884], + [4.170291, 4.376999999999853], + [4.028291, 4.156000000001825], + [3.937291, 4.344999999998933], + [4.057125, 3.9519999999999555], + [4.382333, 4.551000000002858], + [4.492625, 4.039999999998045], + [4.328625, 4.737999999999687], + [4.309667, 4.642999999999731], + [4.793708, 4.690000000000083], + [6.133708, 6.145000000000067], + [5.431083, 5.246000000001416], + [5.218125, 5.132999999998944], + [5.0015, 4.839999999999733], + [4.6645, 4.735000000000156], + [4.756125, 4.63799999999992], + [4.787458, 4.595000000000127], + [4.657375, 4.434999999999079], + [4.855, 4.691999999998586], + [4.681792, 4.598000000001434], + [4.428625, 4.305999999999699], + [4.904875, 4.655000000001408], + [4.531875, 4.414000000000584], + [4.627542, 4.335000000001088], + [4.563417, 4.846999999999824], + [4.257625, 4.723000000000255], + [4.529, 4.451000000001315], + [4.707667, 4.739000000000715], + [4.60375, 4.801000000000499], + [4.154792, 4.225999999999175], + [4.5295, 4.376000000000602], + [4.699666, 4.737999999999687], + [4.709, 4.477999999998872], + [4.309334, 4.5410000000014605], + [4.699625, 4.701999999998208], + [3.973458, 3.516000000001185], + [4.2915, 3.5799999999994725], + [4.270041, 4.362000000000421], + [4.606292, 4.836000000000951], + [4.456958, 3.6339999999981387], + [4.421083, 3.936999999998747], + [4.497792, 4.2320000000000135], + [4.259833, 4.381000000000412], + [4.187167, 4.399000000001152], + [4.126625, 3.6410000000000053], + [4.778709, 3.8999999999997925], + [4.773333, 4.4130000000013325], + [4.553417, 3.9970000000000283], + [4.376916, 4.260000000000375], + [4.340167, 4.7170000000011925], + [4.169041, 3.6589999999989686], + [4.223917, 4.251000000000005], + [4.602916, 3.9290000000011815] + ] + }, + "wall_medians_ms": { + "baseline": 4.295375, + "candidate": 4.4234165 + }, + "change_percent": 2.9809155195995807 + }, + { + "samples": { + "baseline": [ + [4.633166, 4.490999999998024], + [4.461625, 4.33400000000006], + [4.298625, 4.260000000000375], + [4.247834, 4.087999999999425], + [4.454917, 4.205999999999932], + [4.346084, 4.146000000000427], + [4.445333, 4.328000000000998], + [4.201417, 4.009000000001706], + [4.404, 4.419000000000395], + [4.163333, 4.1679999999999495], + [4.623959, 4.340999999998374], + [4.04975, 3.686000000000078], + [5.405667, 5.444999999999922], + [4.226584, 4.229999999999734], + [4.837792, 4.36800000000126], + [4.368125, 4.391000000000034], + [4.471333, 4.3179999999996], + [4.467583, 4.096999999999795], + [4.391834, 3.5840000000000316], + [4.745542, 5.236000000000018], + [5.201834, 4.5589999999986475], + [4.886167, 4.30199999999914], + [4.762208, 4.519999999999413], + [5.057459, 5.371999999999488], + [4.705459, 4.7399999999999665], + [4.475375, 4.250000000000753], + [4.449375, 4.5469999999987465], + [4.368666, 4.508999999998764], + [4.219542, 3.623000000001042], + [3.857167, 3.5279999999993095], + [4.353625, 4.096000000000544], + [4.326625, 3.7469999999988346], + [4.307583, 4.434999999999079], + [4.430666, 4.068000000000183], + [4.212625, 4.044000000000381], + [4.431958, 3.713999999998663], + [5.782792, 5.207999999999657], + [4.842958, 4.723000000000255], + [4.693416, 4.499999999998394], + [4.588583, 4.607999999997503], + [4.448625, 4.445000000000476], + [4.229417, 4.426999999999737], + [4.484042, 4.33400000000006], + [4.343125, 4.893000000000924], + [4.349708, 4.206000000001708], + [4.135792, 3.501999999999228], + [4.618667, 4.552999999999585], + [3.883833, 3.4360000000006607], + [4.120042, 3.750000000000142], + [4.697166, 4.719000000001472], + [4.743208, 4.113999999999507], + [4.339625, 3.906999999999883], + [4.331333, 3.690000000000637], + [4.672, 3.9970000000000283], + [4.005583, 4.4010000000014315], + [5.027167, 4.9029999999987695], + [4.554709, 4.35000000000052], + [4.67425, 4.396999999999096], + [5.031, 4.291000000000267], + [4.765084, 3.9829999999998478], + [5.105291, 4.626000000001795], + [4.916667, 4.213000000000022], + [4.90325, 4.842999999999265], + [4.988667, 4.526999999999504], + [4.603791, 4.727000000000814], + [5.11625, 4.67200000000112], + [5.716458, 4.979999999999762], + [4.933167, 4.129000000000715], + [4.545541, 3.696000000001476], + [4.411375, 4.137000000000057], + [4.385792, 3.7330000000004304], + [4.54575, 3.71900000000025], + [4.560083, 4.578999999999667], + [4.330791, 4.338000000000619], + [4.510291, 3.875000000000739], + [4.214875, 3.644000000001313], + [4.460417, 3.819000000000017], + [4.559958, 4.564999999999486], + [4.095042, 4.1919999999997515], + [4.202459, 3.955000000001263], + [4.112208, 3.5109999999995978], + [4.394625, 4.20700000000096], + [4.342291, 4.3439999999996814], + [4.325375, 3.7010000000012866], + [4.32725, 4.328999999998473], + [4.104625, 3.6249999999995453], + [4.255166, 3.8340000000012253], + [4.1035, 4.123999999999128], + [4.0835, 3.531000000000617], + [4.122667, 4.0530000000007504], + [4.039375, 3.5720000000001306], + [4.508167, 3.98199999999882], + [4.338125, 3.7380000000020175], + [4.183208, 3.52599999999903], + [4.170416, 3.7920000000006837], + [4.150708, 4.1170000000008145], + [4.183458, 4.137000000000057], + [4.234959, 4.479999999999151], + [4.151458, 3.9650000000008845], + [4.070166, 3.6479999999983193], + [4.533958, 4.056000000000282], + [4.435291, 4.450000000000287], + [4.479459, 4.326000000000718], + [4.361958, 4.42199999999815], + [4.584625, 4.287999999998959], + [4.333875, 4.274000000000555], + [5.134167, 4.777000000000697], + [4.272, 4.138000000001085], + [4.597125, 4.614000000000118], + [4.572167, 4.250000000000753], + [4.491042, 4.201000000000121], + [4.2235, 4.083000000001391], + [4.610542, 4.234999999997768], + [4.634833, 4.1789999999988225], + [4.361375, 4.249999999998977], + [4.478542, 4.363000000001449], + [4.367542, 4.289999999999239], + [4.265833, 4.34100000000015], + [4.230125, 4.137000000001834], + [4.207292, 4.208999999999463] + ], + "candidate": [ + [4.276666, 4.1050000000009135], + [4.440292, 4.364999999999952], + [4.3945, 4.1909999999987235], + [4.419875, 4.279000000000366], + [4.400792, 4.302000000000916], + [4.667666, 4.61999999999918], + [4.548666, 4.4589999999988805], + [4.668083, 4.459999999998132], + [4.458459, 4.433000000000575], + [4.711292, 4.570000000001073], + [4.784542, 4.355000000000331], + [4.689167, 4.376000000000602], + [4.636334, 4.271999999998499], + [4.276959, 4.438000000000386], + [4.505375, 4.421999999999926], + [4.292041, 4.279999999999617], + [4.367, 3.9080000000009107], + [4.582125, 4.513999999998575], + [4.246709, 3.875000000000739], + [4.2365, 3.835000000000477], + [5.216458, 4.889000000002142], + [5.195458, 5.196000000001533], + [5.185917, 5.1469999999991245], + [5.502708, 5.290000000000461], + [4.668417, 4.184999999999661], + [4.956708, 4.823000000000022], + [4.273834, 3.808000000001144], + [4.400333, 4.67200000000112], + [4.208, 3.665999999999059], + [4.488, 4.020000000000579], + [4.368542, 3.7169999999999703], + [4.309292, 4.543999999999215], + [4.521292, 4.322000000001935], + [4.245083, 3.5709999999991027], + [4.436708, 3.811000000000675], + [4.319375, 4.665000000001029], + [5.384125, 5.131000000000441], + [4.948792, 5.1640000000006125], + [4.827292, 4.832999999999643], + [4.709, 4.844000000002069], + [4.680833, 4.508000000001289], + [4.610833, 4.598000000001434], + [4.67675, 4.870999999997849], + [4.333084, 3.8049999999998363], + [4.542375, 4.1269999999986595], + [4.274917, 4.571000000000325], + [4.405375, 3.773999999999944], + [4.097292, 3.6039999999992745], + [4.248917, 3.7160000000007187], + [4.100416, 3.6759999999986803], + [4.554167, 4.573000000000604], + [4.758042, 4.877000000000464], + [4.241, 4.722999999998478], + [4.502333, 4.507000000000261], + [4.87775, 4.501999999998674], + [5.491042, 5.218000000001055], + [4.782958, 4.338000000000619], + [4.651, 4.187999999999192], + [5.01375, 5.198000000000036], + [4.959125, 5.1240000000003505], + [5.092459, 5.2109999999991885], + [5.147083, 5.398999999998821], + [4.944667, 4.298000000000357], + [4.830709, 5.000000000000782], + [5.49725, 5.968999999998559], + [5.804, 5.511999999999517], + [5.6735, 5.24399999999936], + [4.967042, 4.718999999999696], + [4.778833, 4.756999999997902], + [4.517375, 4.015000000000768], + [4.819458, 4.596000000001155], + [4.578417, 4.621000000000208], + [4.49725, 4.180999999999102], + [4.756417, 4.041999999998325], + [4.815291, 4.853999999999914], + [4.938958, 4.911999999999139], + [4.4555, 4.311999999998761], + [4.4605, 3.7900000000021805], + [4.552959, 4.076999999998776], + [4.914208, 4.719999999998947], + [4.490625, 4.611000000000587], + [4.463792, 4.118999999999318], + [4.346333, 3.992999999999469], + [4.455709, 4.383000000000692], + [4.312084, 3.69399999999942], + [4.193416, 4.287000000001484], + [4.648292, 4.503999999997177], + [4.119417, 3.7450000000021078], + [4.26975, 4.621000000000208], + [4.505083, 4.14099999999884], + [4.381625, 4.423000000000954], + [4.33975, 4.448999999999259], + [4.181417, 4.248999999997949], + [4.118833, 4.422000000001702], + [4.288667, 4.161999999999111], + [4.410708, 3.8060000000008642], + [4.284792, 3.7949999999984385], + [4.048666, 3.5050000000005355], + [4.254208, 4.66300000000075], + [4.503209, 3.854000000000468], + [4.684833, 4.018999999999551], + [5.023917, 5.09399999999971], + [4.607, 4.571000000000325], + [4.503834, 4.431000000000296], + [4.627375, 4.429000000001793], + [4.913708, 4.823000000000022], + [4.849459, 4.642999999997954], + [4.710167, 4.498999999999143], + [4.83625, 4.609000000000307], + [4.630083, 4.488999999999521], + [4.714792, 4.583999999999477], + [4.521125, 4.581999999999198], + [4.53675, 4.2970000000011055], + [4.587833, 4.319000000000628], + [4.6075, 4.314000000000817], + [4.4505, 4.255000000000564], + [4.511042, 4.596000000001155], + [4.423958, 4.206999999997407], + [4.655083, 4.548999999999026], + [4.257208, 4.494000000001108] + ] + }, + "wall_medians_ms": { + "baseline": 4.4210205, + "candidate": 4.5395625 + }, + "change_percent": 2.681326630356029 + } + ], + "output_sha256": "f388283b5044705a64e616e7b5527e8cdd176835ab01b64bde99d1452e860c99", + "summary": { + "baseline": { + "count": 360, + "wall_median_ms": 4.3614795, + "cpu_median_ms": 4.210999999999743 + }, + "candidate": { + "count": 360, + "wall_median_ms": 4.4957705, + "cpu_median_ms": 4.413500000000958 + }, + "change_ms": 0.13429100000000016, + "change_percent": 3.0790239871584912 + } + }, + "node-startup": { + "argv": ["node", "-e", ""], + "cwd_depth": 0, + "rounds": [ + { + "samples": { + "baseline": [ + [33.571833, 31.767000000000323], + [35.573416, 33.64100000000114], + [33.7765, 32.18700000000041], + [33.8535, 32.246999999999915], + [33.284334, 31.784999999999286], + [33.941542, 32.22900000000095], + [34.377625, 32.68800000000027], + [32.881791, 31.299000000000632], + [37.270125, 35.320999999999714], + [35.906084, 34.28499999999879], + [36.394375, 34.18000000000099], + [34.201625, 32.37000000000023], + [33.243417, 31.44400000000047], + [33.976292, 32.053999999998695], + [33.867917, 31.828000000000856], + [33.676417, 31.847999999998322], + [33.785208, 32.09099999999765], + [34.004458, 32.32200000000063], + [32.8555, 30.65100000000065], + [31.427708, 29.896999999998286], + [34.530041, 32.68399999999971], + [31.927208, 30.45299999999962], + [32.135792, 30.647999999999342], + [34.927167, 33.20299999999854], + [34.409625, 32.81800000000068], + [35.388583, 33.08900000000037], + [35.538958, 33.796999999999855], + [33.49125, 31.99099999999966], + [34.031708, 32.33900000000034], + [33.795708, 32.01500000000124], + [33.505833, 31.587999999999283], + [33.292292, 31.836000000001974], + [33.79225, 32.007999999997594], + [33.490458, 31.743000000002297], + [33.404167, 31.704000000001287], + [34.73725, 32.79600000000116], + [34.111916, 32.362000000002666], + [35.823583, 34.000999999996395], + [35.372, 33.707999999997185], + [32.682875, 30.915000000000248], + [32.327792, 30.616000000001975], + [32.1325, 30.53899999999743], + [32.574875, 30.639999999998224], + [32.913541, 31.103000000001657], + [33.1435, 31.432999999999822], + [32.18875, 30.550999999999107], + [32.098042, 30.307000000000528], + [32.507709, 30.865999999999616], + [32.449833, 30.797999999997216], + [31.873084, 30.381999999999465], + [32.828291, 31.12199999999632], + [35.520375, 33.66899999999973], + [34.462542, 32.79600000000116], + [34.02125, 32.50699999999895], + [33.289958, 31.434000000004403], + [33.57325, 31.95599999999743], + [32.07725, 30.466999999998023], + [32.966458, 30.96299999999985], + [32.88275, 30.87199999999868], + [33.147084, 31.69199999999961], + [34.158958, 32.336999999998284], + [32.195459, 30.573000000000405], + [32.501875, 30.732000000000426], + [33.693083, 32.11200000000147], + [32.231292, 30.56100000000228], + [34.063917, 32.24199999999655], + [34.896417, 33.090000000001396], + [32.126208, 30.425000000001035], + [33.983, 32.298000000000826], + [33.114208, 31.059999999996535], + [33.368583, 31.44800000000103], + [32.504833, 30.70700000000315], + [32.104209, 30.394999999998618], + [32.886209, 31.069000000002234], + [32.687541, 30.973000000003026], + [32.185625, 30.752999999997144], + [32.402708, 30.567000000001343], + [33.1145, 31.490999999999048], + [32.796333, 31.17300000000256], + [33.00325, 31.08800000000045], + [35.822292, 34.01999999999816], + [33.613792, 31.95700000000201], + [32.780709, 31.130999999998465], + [32.0745, 30.444000000002802], + [32.015667, 30.38800000000208], + [32.994542, 31.200999999999368], + [32.807833, 30.973000000003026], + [31.598209, 30.122999999996125], + [32.747541, 30.952000000002755], + [32.594667, 30.82200000000057], + [33.006166, 31.435999999999353], + [32.641125, 30.93600000000052], + [33.109625, 31.3180000000024], + [32.376208, 30.626000000001596], + [34.579875, 32.97199999999734], + [35.086958, 33.471999999999724], + [33.868334, 32.28899999999868], + [32.729583, 31.18800000000377], + [32.686541, 30.95700000000079], + [32.846166, 31.052999999999997], + [33.61725, 31.762999999997987], + [32.404708, 30.87899999999877], + [32.335166, 30.604999999997773], + [32.65775, 30.81200000000095], + [32.1715, 30.4109999999973], + [32.571042, 30.882000000001852], + [32.715083, 30.985999999998626], + [32.959125, 31.040000000000845], + [35.101167, 33.40700000000041], + [34.708041, 32.79099999999957], + [33.925875, 32.17700000000079], + [33.171625, 31.34499999999818], + [32.9315, 31.116999999998285], + [32.695209, 31.088999999997924], + [32.671208, 30.875000000001762], + [32.705625, 31.030000000001223], + [35.037458, 33.29899999999952], + [32.988458, 31.499000000000166], + [32.96175, 31.154000000000792], + [32.379958, 30.839999999997758] + ], + "candidate": [ + [36.812458, 33.640999999999366], + [35.048208, 33.34799999999838], + [34.258625, 32.53000000000128], + [34.519167, 32.403000000000404], + [34.104041, 32.31099999999998], + [35.07975, 33.287999999998874], + [33.879375, 32.171000000001726], + [33.489333, 31.97099999999864], + [38.399375, 34.51699999999924], + [36.6015, 34.890000000000754], + [36.03275, 33.11799999999998], + [34.056917, 32.00199999999853], + [34.498292, 32.710999999999046], + [34.564875, 32.60700000000227], + [33.925042, 31.914999999999694], + [33.347125, 31.74100000000024], + [32.524125, 30.85500000000252], + [31.533917, 30.042999999999154], + [33.267959, 31.47100000000158], + [32.426625, 30.82800000000141], + [34.674667, 32.62900000000002], + [33.020292, 31.37199999999929], + [32.463208, 30.750000000001165], + [33.706292, 32.07300000000224], + [35.311917, 33.71099999999849], + [35.219375, 33.98099999999893], + [33.959333, 32.25000000000122], + [33.14425, 31.486000000001013], + [34.201791, 31.995999999997693], + [34.041792, 32.23900000000057], + [34.099542, 32.230999999999455], + [33.4435, 31.667999999999807], + [33.310834, 31.69199999999961], + [33.162333, 31.317999999998847], + [33.4925, 31.824000000000296], + [34.809208, 32.700999999999425], + [35.608083, 33.590999999997706], + [36.255916, 34.31900000000354], + [35.374959, 33.64300000000142], + [32.695584, 31.045999999999907], + [32.8035, 31.300999999999135], + [32.51525, 30.790000000003204], + [33.006125, 31.293999999999045], + [32.537833, 30.770000000000408], + [32.585083, 30.91699999999875], + [32.595916, 30.991000000000213], + [32.15375, 30.426999999999538], + [32.21775, 30.754000000001724], + [32.562167, 31.054000000001025], + [32.355667, 30.69500000000147], + [34.605209, 32.780000000002474], + [34.648083, 32.931000000001376], + [37.387333, 34.69600000000028], + [33.185916, 31.491999999996523], + [33.147792, 31.393000000001337], + [33.155, 31.410000000001048], + [31.638291, 29.779000000001332], + [32.642334, 30.95599999999976], + [32.992875, 31.45500000000112], + [32.688167, 31.043000000000376], + [33.010459, 31.114000000002306], + [33.190375, 31.403000000000958], + [32.655334, 31.17799999999704], + [32.668958, 30.96700000000041], + [32.36075, 30.657999999998964], + [35.376541, 33.71500000000083], + [35.613541, 33.9219999999969], + [34.340292, 32.81199999999984], + [33.035167, 31.270000000002796], + [33.058459, 31.244999999998413], + [33.076917, 31.276999999999333], + [32.540834, 30.875999999999237], + [33.055417, 31.37100000000359], + [32.405708, 30.82899999999711], + [32.559625, 30.575999999996384], + [31.936667, 30.31599999999912], + [32.662291, 31.13000000000099], + [31.956417, 30.428000000000566], + [32.556875, 30.528999999997808], + [32.452, 30.96000000000032], + [35.009834, 33.32800000000091], + [35.207416, 33.37900000000005], + [32.611, 30.89999999999904], + [32.589791, 31.039999999997292], + [33.298958, 30.978999999998535], + [32.377792, 30.4789999999997], + [32.444, 30.507000000000062], + [32.825375, 31.192000000000775], + [32.758292, 30.943999999998084], + [33.198042, 31.477999999999895], + [33.148584, 31.681999999999988], + [33.703834, 31.428999999999263], + [33.886916, 32.05099999999916], + [31.601917, 29.928999999995654], + [33.87625, 32.143000000001365], + [35.831917, 34.003000000002004], + [32.865084, 31.243000000003462], + [33.050917, 31.560999999996397], + [32.748291, 31.232999999996736], + [32.525083, 31.044000000001404], + [33.234, 31.239000000002903], + [32.838125, 31.226000000000198], + [32.579, 30.8010000000003], + [33.059834, 31.510000000000815], + [33.134541, 31.370000000002563], + [32.330458, 30.890999999996893], + [32.935125, 31.30400000000222], + [32.289042, 30.779000000002554], + [33.643583, 31.93499999999716], + [35.383791, 34.18100000000024], + [34.773458, 32.91799999999867], + [33.204583, 31.808000000001613], + [32.860083, 31.227000000001226], + [32.873416, 31.377000000002653], + [32.773834, 30.89199999999792], + [33.774875, 31.898999999999234], + [33.225291, 31.674000000002422], + [32.811333, 31.179999999999097], + [32.443167, 30.857999999998498], + [33.106541, 31.27800000000036] + ] + }, + "wall_medians_ms": { + "baseline": 33.1119165, + "candidate": 33.1393955 + }, + "change_percent": 0.08298824986465725 + }, + { + "samples": { + "baseline": [ + [34.950875, 32.85600000000244], + [35.268958, 33.71500000000083], + [34.179208, 32.293999999996714], + [32.993416, 31.033000000000754], + [33.21075, 31.351000000000795], + [32.146375, 30.53200000000089], + [32.090375, 30.566000000000315], + [32.282708, 30.836999999998227], + [32.748041, 31.04499999999888], + [32.144708, 30.51800000000071], + [32.421875, 30.878000000001293], + [32.158458, 30.57799999999844], + [33.109417, 31.009000000000952], + [33.37025, 31.404000000001986], + [34.450084, 32.85899999999842], + [34.482166, 33.034000000000674], + [33.38675, 31.573999999999103], + [33.435584, 31.75900000000098], + [32.969292, 31.27100000000027], + [32.865459, 31.19599999999778], + [36.483708, 34.64100000000059], + [38.691333, 33.96199999999894], + [33.654167, 31.860000000001776], + [33.187708, 31.55299999999528], + [32.370917, 30.89299999999895], + [31.820417, 30.129999999999768], + [33.012167, 31.25999999999962], + [33.363417, 31.508000000002312], + [34.641875, 33.255999999997954], + [33.610208, 32.13500000000025], + [33.020584, 31.50799999999876], + [32.558, 31.235000000002344], + [33.23775, 31.46499999999719], + [31.300083, 29.77700000000283], + [32.52025, 30.82199999999702], + [32.614541, 30.979000000002088], + [33.474916, 31.521000000001465], + [32.625416, 31.000999999999834], + [32.675791, 30.861999999999057], + [32.459833, 30.343999999999482], + [32.863375, 31.290999999999514], + [32.077292, 30.33100000000033], + [34.285167, 32.302000000001385], + [35.119666, 33.50899999999868], + [34.737333, 32.88300000000177], + [32.771709, 31.02400000000216], + [32.672875, 30.96100000000135], + [33.314416, 31.568999999997516], + [33.321084, 31.530000000000058], + [33.285375, 31.33799999999809], + [32.625625, 30.71000000000268], + [31.930042, 30.263000000001483], + [32.361958, 30.742999999997522], + [32.3335, 30.677999999998207], + [32.171041, 30.363999999998725], + [32.12125, 30.408000000001323], + [35.619958, 33.7949999999978], + [34.733708, 32.81299999999732], + [32.633333, 30.874000000000734], + [32.12275, 30.489000000002875], + [32.828125, 31.213000000001045], + [32.679666, 30.830999999999165], + [34.598292, 32.5969999999991], + [32.744792, 31.10799999999614], + [32.909167, 31.057000000000556], + [32.929041, 31.05199999999897], + [32.429208, 30.706999999996043], + [32.456916, 30.768999999995827], + [32.761709, 31.15100000000126], + [32.796167, 31.162000000005463], + [34.499708, 32.91699999999764], + [34.9735, 32.83100000000161], + [34.182083, 32.367999999998176], + [33.441917, 31.639999999995894], + [32.395791, 30.79100000000068], + [32.170667, 30.557999999999197], + [32.858625, 31.093999999995958], + [33.245333, 31.580000000001718], + [32.597916, 30.776999999996946], + [32.789291, 31.02800000000272], + [31.986208, 30.383000000004046], + [33.616834, 31.631000000004406], + [32.334959, 30.737999999999488], + [32.807084, 31.09600000000512], + [33.778542, 31.81599999999918], + [34.950166, 33.239000000001795], + [34.939625, 33.345000000000624], + [32.305, 30.882999999999328], + [33.697833, 31.878999999996438], + [33.496958, 31.818000000001234], + [33.359791, 31.515999999999877], + [32.954167, 30.971999999998445], + [33.667458, 31.77700000000172], + [32.954917, 31.2039999999989], + [32.83925, 31.13899999999603], + [32.691667, 30.850000000004485], + [32.475334, 30.814999999996928], + [33.298, 31.247999999997944], + [32.510625, 30.878000000001293], + [34.703625, 32.844000000004314], + [34.198042, 32.46599999999944], + [33.055292, 31.067000000000178], + [33.126542, 31.46799999999672], + [33.062833, 31.35199999999827], + [32.44875, 31.24199999999888], + [33.231875, 31.55399999999986], + [32.905917, 31.31100000000231], + [33.496583, 31.75300000000192], + [32.778625, 31.20200000000395], + [32.440167, 30.615999999998422], + [32.584208, 30.841999999999814], + [32.745541, 30.912999999998192], + [32.823959, 31.3769999999991], + [34.192917, 32.25400000000178], + [32.839542, 31.455999999998596], + [34.063916, 32.36300000000014], + [31.483583, 29.906000000000432], + [33.073917, 31.502999999997172], + [33.128625, 31.360999999996864], + [34.531875, 32.62300000000096] + ], + "candidate": [ + [34.557709, 32.84999999999627], + [32.832291, 31.419999999997117], + [32.308834, 30.91600000000483], + [32.04875, 30.311000000001087], + [33.06625, 31.064999999998122], + [32.837042, 31.120999999998844], + [33.3225, 31.419999999997117], + [32.501333, 31.040000000004397], + [32.818583, 31.226000000000198], + [33.460458, 31.905999999999324], + [32.749959, 31.248000000001497], + [32.655667, 31.045999999999907], + [33.052833, 31.480999999999426], + [32.540125, 31.13299999999697], + [35.77075, 33.90500000000074], + [33.893125, 32.36900000000276], + [33.034792, 31.33499999999856], + [34.301292, 32.60399999999919], + [32.903167, 31.303999999998666], + [33.377291, 31.362000000001444], + [34.387583, 32.35700000000108], + [34.109166, 32.31999999999857], + [33.438041, 31.80600000000311], + [31.290083, 29.71300000000099], + [32.757084, 31.094000000003064], + [33.322375, 31.51499999999885], + [33.939458, 31.860000000001776], + [33.072375, 31.226999999997673], + [34.627541, 33.145999999998565], + [34.272541, 32.83400000000114], + [33.181667, 31.522000000002492], + [32.484125, 30.82899999999711], + [34.005, 32.313000000002035], + [31.444583, 29.761000000000593], + [32.84825, 31.38399999999919], + [33.9465, 32.05299999999767], + [33.747667, 32.016000000002265], + [33.079875, 31.79799999999844], + [32.63625, 31.036000000000286], + [32.3215, 30.698000000001002], + [32.073542, 30.414000000000385], + [33.164042, 31.41199999999955], + [34.792583, 33.20799999999835], + [34.899708, 33.12900000000241], + [33.66275, 31.97099999999864], + [33.224875, 31.51499999999885], + [32.887833, 31.155999999999295], + [33.060584, 31.300999999999135], + [32.823208, 31.175000000001063], + [32.682167, 31.18700000000274], + [32.893208, 31.17899999999807], + [32.639792, 30.84599999999682], + [32.8315, 31.214000000002073], + [32.7895, 30.906000000001654], + [31.937042, 30.245000000000744], + [34.269375, 33.13099999999736], + [33.5295, 31.749000000004912], + [34.827166, 33.26799999999963], + [35.074292, 33.286000000003924], + [32.865625, 31.25599999999551], + [33.102667, 31.406999999997964], + [33.050375, 31.348000000001264], + [33.019083, 31.497000000001663], + [33.196708, 31.56900000000107], + [32.853834, 30.998000000003856], + [32.593042, 30.97500000000153], + [32.534916, 30.931000000002484], + [33.596792, 31.913000000002967], + [32.6495, 31.07199999999466], + [32.536709, 30.958999999999293], + [32.243333, 30.55400000000219], + [35.144667, 33.339999999995484], + [35.086375, 33.105000000002605], + [34.778542, 33.057000000003], + [32.563417, 30.8690000000027], + [36.87175, 32.23100000000301], + [32.314542, 30.666000000000082], + [33.195167, 31.333000000000055], + [32.326625, 30.830999999999165], + [32.104084, 30.46799999999905], + [33.814042, 31.81599999999918], + [33.357625, 31.805999999996004], + [32.832333, 31.183999999996104], + [32.727666, 30.968999999998914], + [32.5395, 30.777999999997974], + [35.319, 33.757999999998844], + [34.105291, 32.465000000001965], + [33.834708, 32.0430000000016], + [33.254542, 31.62799999999777], + [33.318292, 31.41400000000516], + [32.817791, 31.30299999999764], + [32.646375, 31.05899999999906], + [33.904792, 32.03800000000001], + [33.067791, 31.14800000000173], + [32.74525, 31.00000000000236], + [32.773375, 31.039999999997292], + [33.509459, 31.600000000004513], + [32.5455, 30.977999999997508], + [33.689292, 31.81099999999759], + [34.931417, 33.23199999999815], + [34.698292, 32.96500000000435], + [31.678167, 30.191999999996], + [33.278333, 31.62500000000179], + [33.484792, 31.607000000004604], + [33.769375, 31.994000000000966], + [32.516916, 30.625999999998044], + [33.02875, 31.447999999997478], + [32.986125, 31.25800000000112], + [33.798917, 32.05399999999514], + [32.773042, 30.985999999998626], + [32.592083, 31.03200000000328], + [32.546417, 30.863000000000085], + [33.274833, 31.80500000000208], + [35.16475, 33.43399999999974], + [34.461958, 32.71399999999858], + [33.561417, 31.95100000000295], + [32.219292, 30.668999999999613], + [33.750916, 32.08100000000158], + [33.298834, 31.32200000000296], + [33.030416, 31.387000000002274] + ] + }, + "wall_medians_ms": { + "baseline": 32.941604, + "candidate": 33.0670205 + }, + "change_percent": 0.3807237194642932 + }, + { + "samples": { + "baseline": [ + [33.431958, 31.904999999998296], + [32.881125, 30.86799999999812], + [32.830625, 31.11099999999567], + [33.232, 31.61400000000114], + [35.327833, 33.69599999999906], + [35.154708, 33.70699999999616], + [32.660333, 30.96100000000135], + [33.276917, 31.414000000001607], + [33.327375, 31.43700000000038], + [33.069291, 31.30300000000119], + [32.645875, 30.906000000001654], + [35.002291, 32.40299999999863], + [33.308958, 31.67799999999943], + [33.017625, 31.43100000000132], + [33.242291, 31.788999999999845], + [33.021583, 31.06899999999868], + [32.656917, 31.12000000000137], + [32.526833, 30.90400000000315], + [33.034041, 31.13400000000155], + [34.914209, 33.23300000000273], + [32.801458, 31.53700000000015], + [33.774167, 31.96900000000369], + [33.380875, 31.346999999996683], + [32.707709, 30.877000000003818], + [32.318667, 30.80500000000086], + [32.616791, 31.204999999999927], + [33.519833, 31.914000000000442], + [32.883375, 31.179000000001622], + [32.371708, 30.53499999999687], + [33.63325, 31.755999999997897], + [32.978541, 31.303999999998666], + [32.355041, 30.888000000000915], + [34.532584, 32.56100000000117], + [35.628666, 33.76999999999697], + [33.475917, 31.756999999995372], + [32.305834, 30.78299999999956], + [32.442125, 30.608000000000857], + [33.5385, 32.074999999998965], + [32.378416, 30.7420000000036], + [32.564458, 30.77199999999891], + [32.177166, 30.41300000000291], + [34.866041, 33.1949999999992], + [33.598041, 31.76599999999752], + [32.989542, 31.16099999999733], + [33.151208, 31.10900000000072], + [32.368291, 30.580000000000496], + [32.327208, 30.87200000000223], + [34.835084, 32.89000000000186], + [34.154792, 32.61100000000283], + [34.504584, 33.0459999999988], + [32.841959, 31.106999999998663], + [32.667041, 30.987999999993576], + [32.767916, 31.258999999998593], + [33.235625, 31.63200000000188], + [33.008709, 31.320999999998378], + [32.607458, 30.914999999993142], + [32.495709, 30.661000000002048], + [33.503041, 31.837000000003002], + [33.356042, 31.532999999996036], + [34.016875, 32.20200000000517], + [33.676709, 32.097000000000264], + [35.467584, 33.458999999993466], + [34.12575, 32.39899999999807], + [32.452375, 30.655000000002985], + [32.087583, 30.57799999999844], + [32.939916, 31.487999999995964], + [32.259916, 30.673999999997648], + [32.441209, 30.683000000003346], + [32.045459, 30.039000000002147], + [32.513208, 30.80700000001002], + [31.619916, 30.183999999998434], + [32.625583, 31.040000000004397], + [32.287875, 30.560999999991623], + [32.01075, 30.41699999999281], + [33.952917, 32.41099999999619], + [34.587458, 32.808000000002835], + [34.966958, 33.12299999999624], + [33.734875, 31.93600000000174], + [33.298417, 31.617000000004225], + [32.709125, 31.078000000000827], + [33.149834, 31.424999999998704], + [32.643459, 31.04600000000346], + [31.629958, 30.178999999996847], + [31.86675, 30.203000000000202], + [31.533292, 29.683999999996047], + [32.892, 31.04400000000851], + [32.076625, 30.603999999996745], + [32.254334, 30.40300000000684], + [32.784333, 31.27500000000083], + [33.2415, 31.440999999993835], + [35.286583, 33.363999999991734], + [34.521708, 32.82800000000208], + [32.441292, 30.79200000000526], + [32.198125, 30.526999999999305], + [32.650542, 31.058000000001584], + [32.577041, 30.929999999997904], + [32.037334, 30.293999999997823], + [32.020375, 30.539999999994905], + [32.352875, 30.876999999996713], + [32.163459, 30.535999999997898], + [32.657875, 30.88000000000335], + [32.619166, 30.797999999997216], + [32.551333, 30.783999999997036], + [32.858958, 30.750999999995088], + [34.312, 32.5160000000011], + [34.077375, 32.29600000000232], + [32.857958, 31.359000000001913], + [33.51925, 31.71999999999997], + [33.052708, 31.179999999999097], + [33.006958, 31.204000000002452], + [32.619875, 30.723999999999307], + [32.237041, 30.68299999999624], + [32.570125, 30.982000000008725], + [32.2565, 30.798000000004322], + [32.004375, 30.436000000001684], + [32.76725, 30.959000000002845], + [32.422625, 30.321999999998184], + [34.165208, 32.29600000000232], + [34.488292, 32.76100000000781], + [35.0205, 33.34800000000371] + ], + "candidate": [ + [32.651875, 30.825999999997578], + [32.372042, 30.847000000004954], + [32.818708, 31.216000000000577], + [32.684083, 31.721999999998474], + [34.09625, 31.7670000000021], + [35.729, 33.91600000000139], + [34.845625, 33.105000000002605], + [32.891292, 31.504999999999228], + [34.489708, 32.93899999999894], + [32.649916, 30.95199999999565], + [32.882917, 31.171000000000504], + [32.710625, 31.15800000000135], + [34.017625, 32.28499999999812], + [33.386041, 31.75200000000089], + [33.270792, 31.786000000000314], + [32.627542, 31.013999999998987], + [32.400875, 30.675999999999704], + [32.681625, 31.21799999999908], + [35.099834, 33.36199999999678], + [35.027834, 33.3919999999992], + [34.489334, 32.78999999999854], + [33.741084, 32.212999999998715], + [33.616916, 31.897999999998206], + [33.074542, 31.300999999999135], + [32.650167, 30.822999999998046], + [33.146375, 31.681999999999988], + [34.43925, 32.60599999999769], + [32.392625, 30.99300000000227], + [32.898375, 31.115000000003334], + [33.65775, 32.36400000000117], + [32.819959, 31.24000000000038], + [32.906833, 31.119999999997816], + [32.911291, 31.15500000000182], + [35.948042, 34.28399999999954], + [35.093459, 33.34500000000418], + [33.36525, 31.61500000000217], + [32.947709, 31.077000000003352], + [32.92075, 30.963999999997327], + [33.616208, 31.79699999999741], + [32.850708, 31.280999999999892], + [32.477917, 30.83499999999617], + [32.945959, 31.458000000000652], + [33.705666, 31.974000000005276], + [33.46575, 31.82199999999824], + [33.602541, 31.908999999998855], + [32.4905, 30.815000000004034], + [33.41375, 31.76899999999705], + [35.034375, 33.22199999999498], + [35.073583, 33.2870000000014], + [33.999584, 32.53999999999735], + [33.726125, 31.86200000000383], + [32.436583, 30.807000000002915], + [33.403, 31.69300000000419], + [33.439625, 31.78100000000228], + [32.604, 30.814999999996928], + [32.482625, 31.056000000006634], + [33.86975, 31.92099999999698], + [33.304791, 31.395000000003392], + [32.427166, 30.658000000002517], + [32.958708, 31.111999999993145], + [32.880875, 31.204000000002452], + [36.125666, 34.24400000000105], + [35.461417, 33.81000000000256], + [32.687042, 30.946999999997615], + [33.106125, 31.358000000004438], + [32.261541, 30.545000000003597], + [32.864458, 31.092999999998483], + [33.892958, 32.15500000000304], + [32.889625, 31.269999999999243], + [33.536, 31.687999999988392], + [32.70175, 31.056999999997004], + [33.200958, 31.458000000000652], + [32.943875, 31.31200000000689], + [32.555084, 30.8340000000058], + [32.219666, 30.470999999998583], + [34.434792, 32.896000000000925], + [34.83575, 32.90499999999952], + [32.115083, 30.539000000004535], + [31.243292, 29.582999999995252], + [32.668958, 31.02599999999711], + [32.126583, 30.554999999999666], + [32.645625, 30.937999999999022], + [32.499541, 30.989000000005262], + [31.855791, 30.394999999998618], + [30.703875, 29.249999999997556], + [33.509834, 31.826999999992722], + [33.001916, 31.283000000001948], + [32.41725, 31.030000000001223], + [33.346834, 31.472000000000833], + [35.698917, 34.1060000000013], + [35.28325, 33.364000000005944], + [31.882917, 30.39799999999815], + [32.271709, 30.59999999999974], + [33.239791, 31.424999999998704], + [31.911583, 30.27399999999858], + [32.814917, 31.03500000000281], + [33.450334, 31.736000000002207], + [32.427875, 30.787000000003673], + [32.336125, 30.57900000000302], + [33.318583, 31.64499999999748], + [32.8785, 31.153000000003317], + [32.822959, 31.03500000000281], + [39.014417, 31.63200000000188], + [33.660541, 31.879000000003543], + [34.805458, 33.0239999999975], + [35.849625, 33.75499999999931], + [34.967625, 33.470999999998696], + [32.464, 31.07599999999877], + [32.956166, 31.178000000004147], + [33.112292, 31.346999999996683], + [32.391958, 30.77899999999545], + [32.80175, 31.125000000002956], + [32.973583, 31.426999999993654], + [32.99, 31.16399999999686], + [32.020833, 30.55599999999714], + [32.853, 31.51799999999838], + [32.978708, 31.221000000002164], + [33.0905, 31.159999999999854], + [34.811584, 32.88199999999364], + [34.332916, 32.63099999999497] + ] + }, + "wall_medians_ms": { + "baseline": 32.858458, + "candidate": 32.966145499999996 + }, + "change_percent": 0.3277314474099624 + } + ], + "output_sha256": "6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", + "summary": { + "baseline": { + "count": 360, + "wall_median_ms": 32.9604375, + "cpu_median_ms": 31.20450000000119 + }, + "candidate": { + "count": 360, + "wall_median_ms": 33.063417, + "cpu_median_ms": 31.37150000000144 + }, + "change_ms": 0.10297950000000355, + "change_percent": 0.3124336562583707 + } + }, + "npm-version": { + "argv": ["env", "exec", "npm", "--version"], + "cwd_depth": 0, + "rounds": [ + { + "samples": { + "baseline": [ + [68.985375, 65.98900000000185], + [71.330167, 67.90800000000274], + [71.751666, 68.5360000000017], + [68.878875, 67.1650000000028], + [68.976, 65.51100000000076], + [67.621916, 64.52600000000075], + [69.26725, 66.81999999999988], + [67.638625, 64.782000000001], + [72.289375, 68.87100000000146], + [71.795417, 68.24399999999997], + [69.833, 66.279999999999], + [68.900333, 65.85900000000322], + [68.053375, 64.79399999999913], + [68.100333, 65.02800000000519], + [68.821916, 66.02399999999875], + [73.158875, 69.76399999999927], + [68.623292, 65.47799999999881], + [69.508708, 66.0480000000021], + [68.011583, 64.78700000000259], + [69.485834, 66.53500000000179], + [77.217208, 71.49799999999829], + [70.182625, 66.63700000000006], + [72.252916, 69.01099999999616], + [72.427334, 68.9350000000033], + [72.898875, 68.84399999999857], + [68.335292, 65.34099999999654], + [69.816625, 65.64400000000603], + [71.533875, 67.31999999999516], + [74.649208, 67.3800000000071], + [71.282542, 68.28900000000004], + [69.758333, 66.16400000000056], + [69.350666, 66.8500000000023], + [69.04975, 65.48500000000246], + [70.074166, 66.8980000000019], + [72.597542, 68.91999999999854], + [70.519625, 67.66600000000267], + [73.922125, 70.49500000000108], + [71.268959, 67.577], + [71.188375, 67.28300000000331], + [71.067083, 67.24499999999978], + [70.016875, 66.16600000000261], + [68.317458, 65.96600000000308], + [71.736458, 68.35000000000235], + [71.815958, 69.20900000000074], + [70.208958, 66.989999999997], + [69.200125, 65.5140000000003], + [69.309625, 65.9169999999989], + [67.883625, 64.74000000000757], + [70.979375, 65.97700000000373], + [74.22275, 70.86200000000531], + [71.027542, 67.69200000000097], + [71.201291, 66.56699999999915], + [69.369917, 65.73099999999243], + [71.342459, 67.55700000000076], + [71.622583, 68.34200000000124], + [69.482417, 66.25100000000117], + [72.533959, 69.08100000000417], + [68.629666, 65.7679999999985], + [68.208792, 65.50000000000722], + [69.155875, 66.14700000000084], + [68.6685, 65.73399999999907], + [70.459917, 67.40499999999372], + [68.210375, 65.7020000000017], + [72.616542, 69.41000000000486], + [70.306125, 67.73599999999647], + [71.817833, 68.91900000000106], + [68.417833, 65.10699999999758], + [67.370666, 63.79299999999688], + [68.313417, 64.5019999999974], + [69.542209, 65.60199999999838], + [68.871208, 65.48200000000293], + [69.538917, 66.19199999999381], + [68.150292, 65.09000000000498], + [70.285125, 65.51499999999777], + [68.472875, 65.33799999999701], + [68.969583, 65.84900000000005], + [71.671, 68.30500000000228], + [72.183834, 69.04999999999717], + [69.7555, 66.72299999999609], + [69.376667, 65.6980000000047], + [66.174666, 63.33599999999251], + [70.190625, 66.76299999999458], + [68.373417, 64.6160000000009], + [72.641792, 68.81599999999821], + [68.976833, 65.65299999999752], + [68.632833, 65.51999999999936], + [68.701791, 65.46900000000022], + [67.663, 64.22299999999836], + [68.657166, 65.55399999999878], + [70.341083, 66.42599999999987], + [71.1825, 67.66199999999856], + [70.861333, 67.41200000000447], + [68.873583, 65.66399999999817], + [69.974167, 66.99700000000064], + [70.034792, 66.86799999999948], + [70.9245, 66.792999999997], + [69.819833, 66.46800000000042], + [70.484625, 67.35600000000375], + [69.516916, 66.16000000000355], + [70.106542, 66.5169999999975], + [68.812625, 65.57999999999709], + [68.296666, 65.17399999999895], + [69.301583, 65.99500000000091], + [71.269458, 67.73000000000451], + [72.594584, 69.02600000000803], + [68.607667, 65.41700000000361], + [68.6075, 65.82099999999969], + [69.060792, 65.73700000000571], + [68.93475, 65.50599999999918], + [69.799625, 66.20000000000914], + [70.634417, 67.1390000000045], + [69.614625, 65.7900000000069], + [69.146166, 66.01700000000221], + [68.58575, 65.26499999999658], + [69.303541, 66.13300000000066], + [68.731459, 65.57300000000055], + [71.352542, 67.30799999999704], + [72.062459, 69.89300000000753], + [69.950791, 66.80800000000175], + [69.307333, 66.12399999999496] + ], + "candidate": [ + [69.625458, 66.65499999999724], + [69.426125, 67.36300000000028], + [73.357125, 70.00399999999729], + [69.56575, 66.58900000000045], + [74.075292, 67.66700000000014], + [69.089958, 66.19299999999839], + [69.049125, 65.70999999999572], + [68.848208, 65.41200000000202], + [68.933208, 66.03299999999734], + [72.738334, 69.85600000000147], + [69.570084, 66.54199999999832], + [68.043875, 65.04400000000032], + [68.605625, 64.74099999999794], + [68.470375, 65.0929999999974], + [68.633709, 64.76800000000082], + [72.300583, 68.27700000000192], + [71.838916, 68.9220000000006], + [70.011625, 66.66399999999584], + [69.661834, 67.01999999999941], + [68.758958, 64.83599999999967], + [71.211917, 67.88099999999986], + [70.253958, 66.74100000000038], + [73.335917, 69.8900000000009], + [70.487792, 67.14099999999945], + [68.332959, 65.94400000000178], + [68.73325, 65.51699999999983], + [70.312333, 66.41100000000222], + [70.303167, 66.473000000002], + [69.478541, 65.89299999999554], + [71.505, 68.40699999999345], + [68.714833, 65.8730000000034], + [69.880041, 66.49199999999666], + [69.5525, 66.28999999999508], + [72.039292, 68.61299999999915], + [70.256541, 67.08499999999873], + [73.830083, 70.72000000000145], + [70.507541, 67.28399999999368], + [70.477667, 67.23500000000371], + [71.994209, 68.23699999999633], + [71.817375, 67.98500000000018], + [71.2845, 67.97499999999701], + [70.762, 67.77199999999794], + [73.299833, 69.60099999999869], + [69.821917, 66.27699999999948], + [68.57275, 65.0449999999978], + [70.783708, 67.02900000000511], + [69.106667, 66.36899999999457], + [68.927083, 65.11799999999823], + [69.075125, 66.00599999999446], + [74.072208, 70.24099999999578], + [70.65875, 67.27399999999761], + [71.1645, 67.66600000000267], + [71.362584, 68.0240000000012], + [71.657542, 67.37500000000551], + [70.462708, 66.98300000000046], + [70.794375, 67.2919999999948], + [71.510625, 68.43500000000091], + [70.207167, 67.21399999999278], + [74.989125, 66.41899999999623], + [72.209291, 68.60600000000261], + [69.765209, 66.4510000000007], + [70.806917, 67.9190000000034], + [71.910791, 68.66799999999529], + [70.246333, 66.97499999999934], + [68.627375, 65.66899999999976], + [68.644917, 65.55200000000383], + [69.003959, 65.95399999999785], + [67.721916, 64.82300000000407], + [68.719667, 65.29300000000404], + [73.63475, 70.83300000000747], + [73.352, 70.0909999999979], + [69.764542, 66.73800000000085], + [66.995791, 63.66899999999731], + [69.391791, 66.89899999999938], + [69.657291, 66.31500000000301], + [68.619375, 65.3780000000026], + [73.461083, 69.74400000000003], + [69.4355, 66.08799999999349], + [68.603417, 65.26700000000574], + [67.878417, 64.84100000000126], + [69.894792, 66.04900000000669], + [68.565208, 64.95000000000317], + [68.14825, 64.60299999999819], + [71.494541, 67.77900000000159], + [70.05475, 66.52700000000777], + [68.642792, 65.13399999999336], + [68.896958, 65.35500000000383], + [70.285708, 66.66500000000042], + [70.807375, 66.88100000000219], + [67.263292, 64.10599999999533], + [73.377709, 70.24700000000195], + [69.291042, 65.94199999999972], + [69.736167, 66.03400000000192], + [68.174958, 64.95600000000223], + [68.577417, 65.90699999999572], + [67.686833, 64.72000000000122], + [72.161125, 68.29900000000322], + [72.917792, 69.60199999999617], + [69.545625, 66.3330000000002], + [68.6, 65.73399999999907], + [68.678458, 65.56499999999943], + [69.48975, 65.19100000000577], + [68.852417, 65.653999999995], + [73.54, 70.25799999999549], + [69.241292, 66.63399999999342], + [69.009208, 65.36700000000195], + [71.131416, 67.98499999999308], + [69.82525, 66.56600000000168], + [69.199625, 66.03799999999183], + [71.414625, 67.59099999999307], + [74.115958, 70.61499999999654], + [70.558917, 67.21699999999942], + [68.969375, 65.1369999999929], + [69.233875, 66.59499999999952], + [68.972875, 65.62400000000679], + [69.106875, 65.5749999999955], + [69.1205, 65.98199999999821], + [73.347833, 69.92099999999368], + [71.495917, 67.45700000000454], + [70.04425, 66.96000000000168] + ] + }, + "wall_medians_ms": { + "baseline": 69.6850625, + "candidate": 69.793563 + }, + "change_percent": 0.155701230805394 + }, + { + "samples": { + "baseline": [ + [68.880375, 65.31400000000076], + [71.59925, 68.26800000000333], + [68.65275, 65.57800000000213], + [69.539791, 65.67900000000293], + [69.486084, 66.68499999999256], + [68.1195, 65.2550000000005], + [68.723417, 66.30899999999684], + [72.092875, 68.58299999999673], + [73.966292, 70.42299999999813], + [69.241167, 66.20300000000157], + [68.932792, 65.48099999999835], + [69.586667, 65.77600000000672], + [69.154667, 65.56699999999438], + [69.700791, 65.84000000000145], + [69.593041, 66.12499999999955], + [71.44175, 68.27600000000444], + [70.445334, 66.35499999999439], + [67.415084, 64.62499999999949], + [70.861125, 67.61400000000606], + [69.9415, 65.77000000000055], + [69.565125, 66.24000000000052], + [70.185291, 67.14000000000198], + [72.890708, 69.72799999999779], + [69.486667, 67.30600000000209], + [71.648209, 67.54800000000216], + [68.646167, 65.87000000000387], + [68.512, 65.23100000000426], + [68.465625, 64.76300000000634], + [74.3825, 71.04400000000766], + [74.864083, 71.41300000000683], + [72.239458, 69.2239999999984], + [71.927125, 68.71199999999789], + [70.575208, 67.60600000000494], + [70.219708, 67.1040000000005], + [70.359333, 66.99400000000111], + [75.248625, 71.77099999999825], + [78.245792, 73.79600000000153], + [78.3515, 74.14700000000352], + [77.707542, 73.58200000000181], + [77.30025, 73.19000000000386], + [74.65575, 70.73799999999864], + [74.891209, 71.35799999999648], + [72.875, 70.01900000000205], + [67.660959, 64.20200000000165], + [71.043834, 67.2840000000079], + [70.346333, 66.96600000000075], + [68.6185, 65.41400000000408], + [69.182667, 65.53800000000365], + [71.772375, 68.36299999999795], + [70.590667, 66.81100000000129], + [69.418833, 66.3589999999985], + [70.234416, 66.68699999999461], + [69.415417, 66.2229999999937], + [69.905292, 66.17299999999915], + [68.942042, 66.03199999999987], + [71.987833, 68.90700000000294], + [70.937209, 67.190999999994], + [73.610125, 69.84400000000335], + [71.863084, 68.29600000000369], + [74.809583, 70.67500000000138], + [71.842292, 68.5410000000104], + [72.91375, 69.21899999999681], + [71.776792, 68.25700000000268], + [70.132834, 66.60300000000774], + [72.041292, 69.07799999999753], + [71.27, 67.43999999999772], + [70.537, 67.72800000000245], + [70.797042, 67.62600000000418], + [71.960125, 68.53899999999413], + [69.901292, 66.75200000000814], + [71.5085, 67.96599999999842], + [69.199583, 65.75100000000589], + [70.091666, 66.65600000000182], + [70.023291, 66.98000000000093], + [74.289459, 70.77000000001021], + [70.218917, 67.32200000000432], + [70.030375, 66.52299999998945], + [72.298792, 68.52499999999395], + [70.641584, 66.53700000001095], + [71.538084, 66.18600000001607], + [70.385709, 67.5510000000088], + [72.1615, 68.5799999999972], + [72.530708, 69.86100000000306], + [69.189, 65.97100000000466], + [69.840417, 66.81299999999624], + [69.208791, 66.03300000000445], + [69.394125, 66.24700000000416], + [70.241041, 66.84199999999407], + [71.7545, 68.57200000000319], + [71.3055, 67.94299999999964], + [66.749708, 63.65900000000124], + [69.92675, 66.31200000001058], + [70.812875, 67.04100000000324], + [71.717458, 67.65500000000202], + [68.948291, 65.00599999999679], + [72.635583, 69.25699999999324], + [69.336167, 66.24999999999659], + [69.59475, 66.6789999999935], + [68.43425, 65.2290000000022], + [70.905375, 68.14899999999113], + [70.687834, 66.99700000001485], + [70.025834, 66.89999999998975], + [73.212792, 69.48299999999108], + [70.223875, 67.65400000000454], + [70.3065, 67.34199999999646], + [69.303834, 66.52100000000871], + [69.128333, 65.74799999999925], + [70.902416, 68.20799999999849], + [71.662792, 68.4049999999985], + [71.474875, 68.86400000000492], + [69.829917, 66.8539999999922], + [69.572583, 66.307000000009], + [69.8875, 66.57699999999522], + [71.81075, 67.6559999999995], + [69.26825, 65.9300000000087], + [70.75625, 66.796999999994], + [70.524542, 67.29599999999891], + [71.151667, 67.1740000000085], + [68.254625, 65.3949999999952], + [69.650875, 66.60399999999811] + ], + "candidate": [ + [71.787875, 68.325999999999], + [72.523792, 69.40399999999869], + [69.952375, 66.51300000000049], + [70.456084, 66.92900000000179], + [68.985625, 65.71800000000394], + [69.669875, 66.24399999999753], + [68.348542, 64.92000000000075], + [70.89775, 66.90100000000143], + [69.323375, 66.40400000000568], + [69.676042, 66.73399999999674], + [69.957084, 67.07600000000724], + [69.528959, 66.1749999999941], + [68.945625, 65.29599999999647], + [69.477834, 66.14800000000542], + [73.051, 69.73099999999732], + [69.495875, 66.29099999999966], + [68.275542, 65.06300000000209], + [68.509875, 65.49400000000105], + [71.718375, 68.08799999999593], + [69.130417, 65.75099999999878], + [68.150583, 65.10499999999553], + [72.999541, 69.79900000000328], + [69.743666, 66.59599999999699], + [68.560084, 65.41599999999903], + [70.4355, 66.6439999999966], + [69.538583, 65.58700000000073], + [68.046958, 65.07999999998759], + [71.782958, 67.79399999999214], + [73.15725, 69.78499999999599], + [74.225625, 70.99699999999842], + [75.142292, 71.62399999999991], + [69.749375, 67.07300000000771], + [69.41975, 65.96799999999092], + [69.706292, 66.5909999999954], + [73.820917, 70.18400000000469], + [75.275125, 71.90399999999642], + [77.351667, 74.52299999999923], + [80.470875, 76.05000000000217], + [78.535916, 74.62799999998992], + [78.083875, 73.7489999999994], + [76.563792, 72.61499999999899], + [74.006083, 69.5530000000062], + [71.575542, 68.23599999999885], + [70.039334, 66.94199999999739], + [70.491708, 67.35099999999505], + [69.171875, 66.02399999999164], + [70.014041, 66.75599999999804], + [71.9655, 67.6339999999982], + [73.992917, 70.06799999999913], + [72.309833, 69.68600000000436], + [70.183291, 66.58200000000392], + [69.75225, 66.22899999999987], + [71.334375, 67.28600000000284], + [68.869458, 65.56100000000953], + [72.617791, 68.77299999999309], + [72.242083, 68.6850000000021], + [75.517542, 72.38600000000162], + [73.097541, 69.59400000000215], + [70.447291, 67.38299999999242], + [75.661291, 71.15100000000041], + [71.252167, 67.9619999999943], + [71.992541, 69.01699999999522], + [74.537625, 70.44499999999942], + [70.186458, 66.60599999999306], + [69.623459, 66.42200000000287], + [71.403, 67.19000000000364], + [73.305834, 69.34799999999797], + [71.185042, 67.74499999999506], + [72.999, 69.75500000000068], + [69.794208, 66.36299999999551], + [70.706583, 68.22799999999773], + [70.653125, 68.64900000000063], + [70.752166, 67.92499999999535], + [71.403709, 67.93399999999394], + [71.030625, 67.87599999999827], + [72.518334, 69.22699999999793], + [69.199833, 66.22699999999782], + [70.220417, 67.0120000000054], + [70.2565, 66.82799999998679], + [69.826, 66.04699999999752], + [68.799458, 65.88099999999031], + [71.611541, 68.65700000000174], + [70.49075, 66.84899999999061], + [70.097667, 66.38700000000597], + [72.319416, 68.93999999999778], + [70.130083, 66.94799999999645], + [71.998542, 66.90799999999797], + [69.2965, 66.22600000000034], + [70.195167, 66.64299999999912], + [69.780917, 66.24999999999659], + [68.86025, 65.90099999999666], + [70.132416, 67.03999999999155], + [71.579, 67.99099999999214], + [69.285917, 65.87799999999788], + [69.543875, 66.00600000001577], + [73.761875, 70.43700000001252], + [68.9985, 65.55399999999167], + [68.308792, 65.10400000000516], + [69.956, 66.58500000000345], + [70.185583, 67.17899999999588], + [70.923125, 67.45899999998528], + [69.689583, 66.3900000000126], + [73.074666, 69.51600000000724], + [68.858833, 65.83000000000538], + [70.446083, 67.03300000000922], + [67.797417, 65.04199999999116], + [70.43475, 67.37199999999177], + [68.485292, 65.32400000000393], + [73.554084, 69.62000000000046], + [72.837375, 69.38800000000356], + [70.559167, 66.97599999999682], + [69.355167, 65.82099999999969], + [70.26025, 66.68200000000013], + [70.235625, 67.11199999999451], + [69.88175, 66.68600000000424], + [74.150916, 70.5949999999973], + [72.451291, 68.54199999999366], + [70.222583, 66.85699999999883], + [69.444833, 66.36500000000467], + [70.268792, 66.51399999999796] + ] + }, + "wall_medians_ms": { + "baseline": 70.372521, + "candidate": 70.351771 + }, + "change_percent": -0.02948594096835455 + }, + { + "samples": { + "baseline": [ + [73.219, 69.60600000000738], + [75.49375, 70.82900000000336], + [71.154917, 68.06000000000267], + [71.273958, 67.58500000000822], + [70.813791, 67.41800000000353], + [71.403541, 67.55400000000122], + [71.655209, 68.7069999999892], + [74.43875, 71.31499999999846], + [71.361417, 68.78199999999879], + [70.504417, 67.0029999999997], + [70.931709, 67.20599999999877], + [72.239584, 68.31100000000845], + [72.0375, 67.6729999999992], + [71.709833, 67.90799999998853], + [70.027542, 66.50899999999638], + [70.736584, 67.42500000000007], + [71.372875, 68.25000000000614], + [70.795541, 67.6729999999992], + [72.053208, 68.80100000000766], + [74.3825, 70.76599999999189], + [74.071458, 70.68100000000754], + [69.787125, 66.55999999999551], + [69.14125, 65.72600000001216], + [68.509292, 65.37199999999643], + [69.12725, 66.11899999998627], + [72.118417, 68.92499999999302], + [73.172916, 69.55299999999909], + [69.672417, 66.61900000000287], + [69.916417, 66.62599999999941], + [68.855959, 65.80100000000755], + [68.56725, 65.68800000000863], + [69.465333, 66.1839999999927], + [71.190375, 67.72700000000498], + [73.064709, 70.04099999998914], + [71.774958, 67.8180000000026], + [69.84575, 66.74699999999234], + [69.315709, 65.85800000000575], + [70.447208, 67.29699999998218], + [70.267333, 67.01799999999025], + [71.518125, 68.1900000000013], + [71.690875, 68.53700000000629], + [69.096459, 66.24300000001426], + [70.404167, 67.36499999999523], + [68.959417, 65.8379999999994], + [70.329084, 66.75500000000056], + [72.532542, 68.96900000000983], + [73.367791, 69.96099999999217], + [73.893125, 70.5600000000004], + [70.803167, 67.81200000000354], + [71.07675, 67.70600000000115], + [70.385875, 67.09700000000396], + [68.49525, 65.0890000000004], + [68.816125, 65.72600000001216], + [73.376792, 69.67700000001287], + [69.128625, 66.37100000000373], + [68.844666, 66.99100000000158], + [68.920583, 65.96000000000402], + [69.358958, 66.29499999999666], + [70.102083, 66.43899999998837], + [70.468375, 67.4449999999922], + [73.707041, 71.19699999999796], + [70.228041, 66.81000000000381], + [69.853625, 67.53000000000497], + [70.18925, 67.26100000000201], + [69.147084, 65.73000000000206], + [68.897209, 65.89000000001022], + [71.365792, 68.10099999999863], + [74.186, 70.69500000000062], + [69.72575, 67.0419999999865], + [69.434791, 65.0359999999921], + [68.673167, 65.30300000000011], + [70.695458, 66.82899999999847], + [69.009042, 65.96000000000402], + [74.459458, 70.40500000000804], + [70.725708, 67.52199999999675], + [69.060875, 65.79999999999586], + [69.851625, 66.10799999999983], + [69.35375, 66.53299999999263], + [69.400834, 66.16700000000719], + [68.883708, 65.75700000000495], + [71.731833, 68.53800000000376], + [71.588542, 68.87100000000146], + [71.540584, 68.08700000000556], + [71.196791, 67.7999999999912], + [69.021708, 65.2639999999991], + [69.024792, 65.83700000000192], + [70.40075, 66.4380000000051], + [74.104583, 70.81499999999608], + [70.657208, 67.38500000000158], + [70.127584, 66.86999999999443], + [70.293, 66.66699999999537], + [69.840792, 66.31199999999637], + [69.632709, 65.98400000000026], + [68.442375, 65.40200000000596], + [70.458834, 67.16599999998607], + [70.585583, 68.1250000000091], + [71.608458, 68.09300000000462], + [68.939459, 65.83200000000033], + [70.268083, 66.78100000000597], + [69.841, 66.78899999999999], + [70.622292, 67.03000000000259], + [73.465875, 70.26499999999203], + [73.060042, 69.82299999999952], + [73.852959, 69.84699999999577], + [73.871375, 70.03899999999419], + [74.099417, 70.25900000000718], + [73.8975, 70.03999999999166], + [72.942333, 69.77400000000955], + [70.047583, 66.77700000000186], + [72.059708, 68.45799999999258], + [69.78975, 67.00399999999718], + [70.03675, 66.67000000001622], + [68.809792, 65.85400000000163], + [68.629, 65.70700000000329], + [72.818041, 69.33500000000947], + [71.473375, 67.53199999998571], + [70.723542, 67.09800000001565], + [68.649334, 65.4180000000224], + [69.390167, 66.00400000000661], + [68.296125, 65.36099999999578] + ], + "candidate": [ + [74.335333, 70.92900000000668], + [71.297666, 67.82499999999914], + [73.37875, 68.95499999998833], + [73.426125, 69.11999999999807], + [73.5885, 70.57499999999095], + [74.2215, 70.09700000000407], + [73.410958, 69.9769999999944], + [72.820083, 69.54100000001517], + [72.010666, 68.91999999999143], + [70.4465, 67.1830000000142], + [69.58, 66.371999999987], + [70.0135, 66.75199999999393], + [72.671459, 69.09800000001098], + [69.760792, 66.69100000000583], + [70.193375, 66.71699999999703], + [69.415083, 66.23100000000193], + [70.281083, 66.98199999999588], + [71.765167, 68.57300000000066], + [72.726542, 68.88999999999612], + [75.300375, 71.82400000000655], + [73.285792, 70.21099999998626], + [69.934709, 66.8760000000077], + [70.698458, 67.1169999999961], + [67.935625, 64.75000000000364], + [68.944583, 65.60800000001166], + [71.185208, 68.28900000000715], + [72.464458, 68.9040000000034], + [69.656417, 66.40199999999652], + [68.31425, 64.55300000000364], + [69.381334, 65.98899999998764], + [70.433416, 66.765999999987], + [69.096875, 65.52200000000141], + [71.634, 68.25100000000361], + [71.616125, 68.31200000000592], + [71.724417, 68.16100000000347], + [68.553917, 65.36200000000747], + [69.063792, 66.01799999999969], + [68.329167, 65.57400000001223], + [70.62075, 67.52600000000086], + [72.927833, 69.55299999999909], + [71.676916, 68.55499999998926], + [70.019709, 66.99100000000158], + [71.976375, 67.80299999999784], + [70.721166, 67.3010000000005], + [70.304542, 67.29599999999891], + [69.242208, 65.99299999999175], + [71.053625, 67.608000000007], + [69.170417, 65.90900000000488], + [69.775125, 66.62299999999277], + [70.837625, 67.18299999999999], + [70.137042, 66.70099999999479], + [69.459209, 66.3369999999901], + [70.044375, 66.16099999999392], + [74.498417, 70.95899999998778], + [70.177666, 66.35799999999392], + [69.897625, 66.2669999999963], + [70.723208, 67.43000000000166], + [69.10425, 66.42600000000698], + [69.320125, 66.27100000000041], + [68.956583, 66.04100000001267], + [74.47375, 71.05200000000877], + [70.512875, 67.10199999999134], + [69.966333, 66.58999999999082], + [67.957666, 64.9530000000027], + [69.709083, 65.97399999999709], + [71.328833, 67.67700000000332], + [69.21175, 66.09999999999161], + [74.541416, 70.38800000000833], + [68.554167, 65.41900000000567], + [69.394834, 66.24300000000005], + [69.365459, 66.54900000000907], + [69.991833, 67.07199999999602], + [69.607666, 66.05499999999154], + [69.42575, 65.87100000000135], + [73.156583, 69.61499999999887], + [70.297542, 67.52600000000086], + [68.947959, 65.86800000000892], + [68.246375, 65.10000000000105], + [69.149125, 65.45500000000004], + [70.86225, 67.62599999998997], + [72.563792, 69.20799999998906], + [69.046125, 65.69100000000105], + [71.242917, 68.14900000000534], + [68.665625, 65.48800000000199], + [68.809875, 65.8990000000017], + [69.829292, 66.21799999999212], + [69.036166, 65.39200000000278], + [74.066209, 70.08900000001006], + [69.7005, 66.94299999999487], + [70.9165, 67.47900000000584], + [69.084833, 65.99699999999586], + [68.702917, 65.62100000000726], + [68.824542, 65.41599999999903], + [71.712125, 67.89699999998788], + [73.93575, 69.95700000001648], + [69.859667, 67.08799999998405], + [70.719416, 67.32500000001096], + [70.347333, 67.09099999999069], + [70.643, 67.39399999999307], + [70.536084, 67.46800000000519], + [74.854334, 71.38199999999983], + [74.470041, 71.13600000000986], + [72.786375, 69.6659999999838], + [75.430542, 71.53200000001902], + [73.231084, 69.76099999999974], + [72.174042, 68.58200000000636], + [72.042041, 68.90199999999425], + [73.203, 69.57500000000039], + [72.059, 68.7679999999915], + [70.112958, 66.91000000000713], + [71.263416, 68.33699999999965], + [69.953834, 66.96799999998859], + [70.098958, 66.91899999999862], + [71.344125, 68.55299999999431], + [73.348458, 69.53099999999779], + [70.126583, 67.25000000000136], + [70.176417, 68.09599999999705], + [71.318083, 68.47199999998566], + [68.835917, 66.76799999998195], + [69.680375, 66.23899999999594] + ] + }, + "wall_medians_ms": { + "baseline": 70.4636045, + "candidate": 70.32593750000001 + }, + "change_percent": -0.19537320149438653 + } + ], + "output_sha256": "7efeac41a7e977323dc230cf27df01e3a37170497a392175ce09042ec2d7d2cc", + "summary": { + "baseline": { + "count": 360, + "wall_median_ms": 70.225958, + "cpu_median_ms": 66.86099999999584 + }, + "candidate": { + "count": 360, + "wall_median_ms": 70.22149999999999, + "cpu_median_ms": 66.94549999999566 + }, + "change_ms": -0.00445800000001384, + "change_percent": -0.006348080007700929 + } + }, + "install-cached": { + "argv": ["env", "install", "22.13.1"], + "cwd_depth": 0, + "rounds": [ + { + "samples": { + "baseline": [ + [4.202, 4.270000000019536], + [4.347375, 4.038000000008424], + [4.270958, 4.340000000013333], + [4.201833, 4.58600000000331], + [4.308333, 4.070999999996161], + [4.437917, 4.390999999998257], + [4.602541, 4.216999999997029], + [4.947125, 4.758000000009588], + [4.869625, 4.46199999998953], + [4.299, 4.1149999999987585], + [4.815458, 4.390999999998257], + [4.372208, 4.207000000008065], + [4.400542, 4.278999999996813], + [4.368875, 4.033999999990101], + [4.205, 4.2439999999999145], + [4.522208, 4.508999999998764], + [4.196125, 3.893000000019242], + [4.458625, 4.19499999999573], + [4.303875, 4.165999999997894], + [4.524542, 4.024999999998613], + [4.436125, 4.373999999998546], + [4.3675, 4.179000000007704], + [4.354667, 4.170999999999481], + [4.722292, 4.342999999991548], + [4.158792, 3.9490000000199643], + [4.532875, 4.714999999990255], + [4.057, 4.005000000006476], + [4.098084, 3.7240000000053897], + [4.347292, 4.447999999996455], + [4.071083, 4.1290000000060445], + [4.060416, 4.236000000005902], + [4.454834, 4.634999999993283], + [3.979375, 3.9579999999972415], + [4.075, 4.033000000006837], + [4.007875, 4.0600000000097225], + [4.326166, 4.187000000001717], + [4.039958, 3.9119999999996935], + [4.264042, 3.8109999999988986], + [4.296833, 4.153000000002294], + [3.971083, 3.660999999993919], + [4.229792, 4.136000000002582], + [4.205875, 4.205999999996379], + [4.0745, 4.170999999999481], + [4.098875, 3.505000000004088], + [4.468709, 4.447999999996455], + [4.123625, 4.2400000000100135], + [4.086709, 4.046999999999912], + [4.155292, 3.814000000005535], + [4.0475, 3.6029999999840356], + [4.051375, 3.6949999999933425], + [4.476792, 4.898999999994658], + [4.188958, 3.6600000000106547], + [5.310166, 5.450999999993655], + [4.87975, 4.704000000003816], + [5.374167, 5.052000000006274], + [5.732833, 5.533000000013999], + [4.402917, 4.390000000014993], + [4.43275, 4.527999999993426], + [4.21375, 4.439000000019178], + [4.44025, 4.038000000008424], + [4.534583, 4.0370000000109485], + [4.03475, 4.429999999999268], + [4.529, 4.665000000002806], + [4.216291, 4.145999999991545], + [4.288958, 3.7179999999921165], + [4.635625, 4.695999999995593], + [4.466542, 4.300999999998112], + [4.222958, 4.379999999997608], + [4.451333, 4.085000000003447], + [3.960958, 3.792999999987501], + [4.233875, 4.440000000002442], + [4.089208, 3.5810000000111586], + [4.004333, 4.106999999990535], + [4.237125, 3.540000000000987], + [4.038917, 4.191000000005829], + [4.15, 3.615000000010582], + [4.298458, 3.720000000001278], + [4.207542, 4.5939999999973224], + [4.107583, 3.5009999999857655], + [4.07075, 3.642999999996732], + [4.029583, 4.142000000001644], + [4.5, 4.715000000004466], + [5.121667, 5.591999999992936], + [4.259, 4.183000000011816], + [4.443292, 4.491999999999052], + [4.304958, 3.754000000000701], + [4.318208, 3.766999999996301], + [3.985583, 4.018999999999551], + [3.876375, 3.655999999992332], + [4.356166, 3.7229999999937036], + [4.170292, 4.3769999999909714], + [3.969667, 4.137000000000057], + [4.067, 4.31900000000951], + [4.218625, 3.789999999995075], + [4.308625, 4.322999999999411], + [3.985, 3.9450000000016416], + [3.996416, 3.7280000000095015], + [4.169291, 4.215999999999553], + [4.047417, 4.116999999993709], + [4.159084, 3.562999999999761], + [4.535041, 3.454000000004953], + [4.684917, 4.632999999998333], + [4.295375, 3.9850000000001273], + [4.399542, 4.315000000005398], + [4.224625, 4.691000000008216], + [4.030458, 4.32499999998015], + [4.355666, 4.501999999988016], + [4.316958, 4.14499999999407], + [4.164208, 4.256999999995514], + [3.844125, 3.631999999996083], + [4.32825, 4.417999999986932], + [4.122333, 4.292000000006624], + [4.419333, 4.1290000000060445], + [3.885125, 3.8619999999980337], + [4.396583, 4.2630000000087875], + [3.92925, 3.4999999999882903], + [4.94475, 4.722000000001003], + [4.762083, 4.267999999996164], + [4.453375, 4.033000000006837], + [4.716958, 4.43599999999833] + ], + "candidate": [ + [4.226875, 4.728999999997541], + [4.332042, 4.3819999999925585], + [4.188875, 4.19699999999068], + [4.717292, 4.872999999989247], + [4.41575, 4.123000000006982], + [4.631792, 4.455000000007203], + [4.662834, 4.54899999999725], + [4.434917, 4.502999999999702], + [4.878291, 4.558000000002949], + [4.97875, 4.654000000002156], + [4.431667, 4.249999999998977], + [4.396959, 4.284999999995875], + [4.613375, 4.227999999997678], + [4.467875, 4.404000000008068], + [4.435583, 4.062000000004673], + [4.752667, 4.474000000001865], + [4.313125, 4.059999999981301], + [4.579125, 4.294000000001574], + [4.492833, 4.09499999999241], + [4.5705, 4.455000000007203], + [4.521584, 4.5939999999973224], + [4.403917, 4.427000000006842], + [4.575709, 4.572999999993499], + [4.59475, 4.6820000000025175], + [4.45325, 4.454999999992992], + [4.402375, 4.162999999991257], + [4.220541, 4.581000000001723], + [4.418833, 4.482999999993353], + [4.654125, 4.4240000000002055], + [4.300875, 4.39699999999732], + [4.402166, 4.362000000000421], + [4.318, 4.228000000011889], + [4.341125, 4.267999999996164], + [4.172375, 4.184999999992556], + [4.358958, 4.165999999983683], + [4.756625, 4.941000000002305], + [4.2485, 4.278999999996813], + [4.265375, 4.241000000007489], + [4.254459, 4.187999999999192], + [4.250875, 4.174000000006117], + [4.57625, 4.582999999996673], + [4.2925, 4.463999999998691], + [4.464208, 4.565999999996961], + [4.185334, 4.23200000000179], + [4.577, 3.993000000008351], + [4.401958, 4.234999999994216], + [4.226792, 3.640999999987571], + [4.526166, 4.470999999995229], + [3.995125, 3.656000000006543], + [4.323834, 4.4570000000163645], + [3.861333, 3.5019999999974516], + [5.22125, 5.563999999992575], + [5.171917, 4.5630000000187465], + [4.675, 3.84099999999421], + [5.102333, 4.964999999984343], + [4.820666, 4.131999999984259], + [4.373458, 3.917999999998756], + [4.512125, 4.386999999994146], + [4.472458, 3.974999999996953], + [4.41425, 4.435999999984119], + [4.268208, 4.830999999995811], + [4.220375, 4.292999999989888], + [4.605584, 4.052000000001499], + [4.292, 3.9080000000097925], + [4.618917, 4.6780000000126165], + [4.189416, 3.622999999990384], + [4.9485, 4.238999999998327], + [4.348959, 3.9170000000154914], + [4.377375, 3.832000000002722], + [4.245875, 3.669999999999618], + [4.531417, 3.991999999996665], + [4.409458, 4.554999999996312], + [4.156958, 3.771999999997888], + [4.402167, 4.497000000000639], + [4.265167, 4.340999999996598], + [4.599083, 4.482999999993353], + [4.338167, 4.451999999986356], + [4.420583, 4.473000000018601], + [4.35275, 4.394000000004894], + [4.2685, 4.7650000000061254], + [4.205416, 4.344000000003234], + [4.27375, 3.745000000009213], + [4.310875, 3.705999999979781], + [4.231584, 3.771000000000413], + [4.293667, 3.8749999999936335], + [4.271542, 3.6500000000074806], + [4.548917, 4.629000000008432], + [4.109667, 3.8059999999973115], + [4.729125, 4.978000000008365], + [4.185834, 3.8720000000154187], + [4.526542, 4.8850000000015825], + [3.998583, 4.282999999986714], + [4.381834, 4.7050000000012915], + [4.032417, 4.141000000004169], + [4.10425, 3.8810000000069067], + [4.102208, 3.8889999999867086], + [4.111833, 4.208999999988805], + [4.280917, 4.161000000010517], + [4.131958, 4.104999999995584], + [4.39475, 4.615999999998621], + [4.151959, 4.276000000004387], + [4.438458, 3.8059999999973115], + [4.553041, 4.08000000000186], + [4.309416, 3.789999999995075], + [4.133459, 3.867999999997096], + [4.267, 4.151000000021554], + [4.340542, 4.141000000004169], + [4.097125, 4.277000000001863], + [4.374833, 4.397000000011531], + [4.094875, 3.7480000000158498], + [4.213584, 4.452999999998042], + [4.107167, 4.261999999997101], + [4.303459, 4.440000000002442], + [4.735959, 4.755999999986216], + [4.170166, 3.767000000010512], + [4.278791, 3.7149999999996908], + [4.71475, 4.295999999996525], + [4.700375, 4.761000000002014], + [4.627833, 4.217999999994504], + [4.670542, 5.013000000005263] + ] + }, + "wall_medians_ms": { + "baseline": 4.279958000000001, + "candidate": 4.376104 + }, + "change_percent": 2.2464239135056685 + }, + { + "samples": { + "baseline": [ + [4.539958, 4.080000000016071], + [4.515584, 4.000999999988153], + [4.647, 4.315000000005398], + [4.208792, 4.012000000003013], + [4.599458, 4.494000000008214], + [4.601083, 4.351999999997247], + [4.4945, 4.354999999989673], + [4.062959, 3.9579999999972415], + [4.334834, 4.098999999996522], + [4.227375, 4.064999999997099], + [4.541917, 4.264000000006263], + [4.022959, 4.222999999996091], + [4.041375, 3.7039999999990414], + [4.441875, 4.353000000008933], + [4.119292, 4.3539999999921974], + [4.393917, 4.348000000007346], + [4.899334, 5.141000000008944], + [4.09725, 3.966000000005465], + [4.107958, 3.7630000000064], + [4.013375, 3.733999999994353], + [4.137792, 3.9349999999984675], + [4.225666, 4.4049999999913325], + [4.166458, 4.320999999990249], + [3.992334, 3.9770000000061145], + [4.437084, 4.366000000004533], + [4.122875, 4.264999999989527], + [4.106333, 4.027000000007774], + [3.998833, 3.8289999999960855], + [4.039042, 4.00200000001405], + [4.291584, 3.859000000005608], + [3.914542, 3.8420000000058963], + [4.425917, 4.556000000007998], + [4.073375, 4.389000000003307], + [4.268416, 4.620000000002733], + [4.103416, 3.6119999999897345], + [4.5905, 3.9429999999924803], + [3.977041, 3.5989999999941347], + [3.932833, 4.176000000001068], + [4.186875, 3.602000000014982], + [4.233792, 3.5839999999893735], + [4.231333, 3.5529999999965867], + [4.153916, 3.7930000000017117], + [4.392625, 4.407999999997969], + [4.150291, 4.277999999985127], + [4.277791, 3.7419999999883657], + [4.177, 4.18000000000518], + [4.15775, 3.619000000000483], + [4.36125, 4.314000000007923], + [4.326042, 3.799000000000774], + [4.2155, 4.4189999999986185], + [4.369834, 3.9310000000085665], + [4.570834, 3.839999999996735], + [4.133833, 4.004999999992265], + [4.2975, 3.7130000000047403], + [4.0335, 3.5099999999914644], + [4.241833, 4.173999999991906], + [4.271833, 3.7730000000095743], + [4.119125, 4.474000000001865], + [4.692375, 4.5709999999985484], + [3.995333, 3.5709999999937736], + [4.122333, 3.7130000000047403], + [4.496583, 4.669000000006918], + [4.67125, 4.187999999999192], + [4.177833, 4.179999999990969], + [4.08575, 3.9390000000025793], + [4.336417, 4.559999999997899], + [4.232708, 4.306999999997174], + [4.224042, 3.680000000002792], + [4.16, 4.068000000003735], + [4.220625, 4.399000000006481], + [3.983292, 4.393000000007419], + [4.222084, 4.203000000003954], + [4.203208, 3.8420000000058963], + [4.335125, 3.799000000014985], + [4.010291, 3.733999999994353], + [3.959458, 3.5009999999857655], + [4.167334, 4.055000000008135], + [3.958625, 3.4800000000103637], + [4.03025, 4.249999999998977], + [4.324333, 4.230999999990104], + [4.146542, 4.255999999998039], + [3.937792, 4.071000000010372], + [3.890459, 3.8170000000121718], + [4.07425, 3.9720000000045275], + [4.151167, 4.272999999997751], + [3.958959, 3.715999999997166], + [4.14, 4.08199999999681], + [4.028708, 4.004000000009], + [4.094291, 3.7229999999937036], + [4.130125, 4.172000000011167], + [4.372959, 4.288999999999987], + [4.053458, 4.162000000007993], + [4.501042, 3.793999999999187], + [4.453333, 4.085000000003447], + [3.869084, 4.337000000006697], + [3.815417, 3.8710000000037326], + [3.903875, 4.100999999991473], + [4.226084, 4.227999999997678], + [4.200458, 3.9949999999890906], + [4.451958, 3.8380000000017844], + [4.484792, 4.253000000005613], + [4.392417, 3.804000000002361], + [4.259083, 4.098999999996522], + [4.10975, 3.5660000000063974], + [4.24225, 4.519000000016149], + [5.553375, 5.351000000004547], + [4.80625, 4.5339999999924885], + [4.651, 4.615999999998621], + [4.5265, 4.621000000000208], + [4.386583, 4.25799999999299], + [4.419625, 4.2439999999999145], + [4.679167, 4.2019999999922675], + [4.719667, 4.683999999997468], + [4.303542, 4.0300000000002], + [4.288125, 4.344000000003234], + [4.512833, 4.0460000000024365], + [4.449, 4.352000000011458], + [4.195041, 4.295999999996525], + [4.41525, 4.536999999999125], + [4.636708, 4.836999999980662] + ], + "candidate": [ + [4.639, 4.3780000000026575], + [4.516458, 4.193000000000779], + [4.4255, 4.355999999987148], + [4.375292, 4.06700000000626], + [4.379916, 4.230999999990104], + [4.764292, 4.57300000000771], + [4.474708, 4.2350000000084265], + [4.212292, 4.24499999999739], + [4.175208, 3.9070000000123173], + [4.620792, 4.542000000000712], + [4.373708, 4.075999999997748], + [4.093292, 4.24499999999739], + [4.338959, 4.189999999994143], + [4.205875, 4.299000000003161], + [4.451584, 4.131000000000995], + [4.238667, 4.33400000000006], + [5.356833, 5.061999999981026], + [4.312709, 4.587000000000785], + [4.357458, 4.390999999998257], + [4.32175, 4.419999999996094], + [4.225084, 4.343000000005759], + [4.3615, 4.477000000008502], + [4.292291, 4.322000000001935], + [4.389208, 3.780000000006112], + [4.305417, 4.379999999997608], + [4.11275, 4.200999999994792], + [4.662084, 4.453999999995517], + [4.149958, 4.42300000000273], + [4.225416, 4.006000000003951], + [4.054333, 3.945999999984906], + [4.401791, 4.090999999988298], + [4.126417, 4.227999999997678], + [4.216667, 4.482999999993353], + [4.14025, 4.158000000003881], + [4.198333, 4.430999999996743], + [5.066042, 5.182000000019116], + [4.624792, 4.739000000000715], + [4.41575, 4.118000000005395], + [4.748125, 4.91999999998427], + [4.299375, 4.631000000003382], + [4.214125, 3.951000000000704], + [5.07575, 5.274000000000001], + [4.414334, 3.937000000007629], + [4.037584, 3.9910000000134005], + [4.250959, 4.322000000016146], + [4.698667, 4.19499999999573], + [4.199208, 4.281999999989239], + [4.307542, 3.6960000000050286], + [4.190375, 4.193999999998255], + [4.539458, 4.087999999995873], + [4.258417, 4.2529999999914025], + [4.399375, 4.380000000011819], + [4.160875, 4.368999999996959], + [4.789583, 4.876999999993359], + [4.161792, 3.689000000008491], + [4.226584, 3.855000000015707], + [4.349667, 3.871999999986997], + [4.7445, 4.262999999994577], + [4.514, 3.8049999999998363], + [4.315292, 4.16900000000453], + [4.539667, 4.718999999994367], + [4.527, 3.9550000000048158], + [4.500042, 3.974999999996953], + [4.754333, 4.007000000001426], + [4.561666, 4.087000000012608], + [4.117292, 4.23399999999674], + [4.223958, 3.849999999985698], + [4.399583, 4.556000000007998], + [4.172292, 3.67400000000373], + [4.540792, 3.9289999999851943], + [4.170083, 3.7229999999937036], + [4.460084, 4.018999999999551], + [4.302667, 3.883000000001857], + [4.505667, 4.7179999999826805], + [4.297958, 3.9270000000044547], + [4.286583, 4.3040000000047485], + [4.087042, 3.6209999999954334], + [4.2475, 3.9609999999896672], + [4.134084, 4.091000000002509], + [3.997084, 3.8849999999968077], + [4.213834, 4.249000000015712], + [4.26775, 4.241999999990753], + [4.054667, 4.021999999991976], + [4.224958, 3.9839999999884412], + [4.429459, 4.508999999998764], + [4.265666, 4.311000000001286], + [4.368042, 4.288000000002512], + [4.126, 3.872000000001208], + [4.331708, 4.210999999997966], + [4.060417, 3.9900000000017144], + [4.272792, 4.1329999999959455], + [4.103042, 4.3099999999896], + [4.172333, 4.1559999999947195], + [4.28625, 4.52300000000605], + [4.02975, 4.128999999991834], + [4.546958, 4.623999999992634], + [4.35175, 4.33400000000006], + [4.267917, 4.0140000000121745], + [4.062208, 4.283000000015136], + [4.399209, 4.111999999992122], + [4.668666, 4.150999999993132], + [4.341667, 4.255000000000564], + [4.287375, 3.6350000000027194], + [4.672583, 4.67700000000093], + [4.437625, 4.048999999980651], + [4.921958, 4.102999999986423], + [4.657834, 4.4240000000002055], + [4.7295, 4.453000000012253], + [4.7725, 4.750000000001364], + [4.426958, 4.075000000014484], + [4.55975, 4.900999999989608], + [4.940875, 4.41000000000713], + [4.91375, 4.5720000000102345], + [4.92775, 4.722999999998478], + [4.734042, 4.238999999998327], + [4.632542, 4.352999999994722], + [4.534291, 4.535999999987439], + [4.823625, 4.205999999996379], + [4.582542, 4.034000000018523], + [5.128583, 5.020999999999276] + ] + }, + "wall_medians_ms": { + "baseline": 4.223063, + "candidate": 4.3507085 + }, + "change_percent": 3.0225810034091305 + }, + { + "samples": { + "baseline": [ + [4.222583, 4.3270000000035225], + [4.094791, 4.153000000002294], + [4.234333, 4.349000000019032], + [4.349084, 4.390999999998257], + [4.264417, 4.359000000007995], + [4.197292, 4.090000000005034], + [4.109459, 4.210000000000491], + [3.830708, 3.9659999999912543], + [4.522875, 4.407000000000494], + [3.975041, 4.1290000000060445], + [4.277583, 3.9320000000202526], + [4.209125, 4.513000000002876], + [4.205208, 3.883000000001857], + [4.151291, 4.342000000008284], + [4.091458, 3.84099999999421], + [4.058584, 4.179999999990969], + [4.1665, 4.272000000000276], + [4.155375, 4.242000000004964], + [4.263917, 4.3099999999896], + [3.8775, 3.5710000000079845], + [3.813083, 3.8249999999919737], + [4.080083, 3.465999999988867], + [4.154625, 4.327000000017733], + [4.057375, 4.149999999995657], + [3.900333, 4.227000000000203], + [4.040875, 3.7610000000114496], + [3.885709, 3.9270000000044547], + [4.008625, 4.0359999999850515], + [4.391375, 4.09299999999746], + [3.870167, 3.685000000004379], + [4.230667, 4.339999999999122], + [4.298875, 4.135999999988371], + [4.004625, 3.9850000000001273], + [4.282791, 4.412999999999556], + [4.448291, 4.494999999991478], + [4.803208, 4.665000000002806], + [4.196292, 4.170999999999481], + [4.238667, 4.226000000002728], + [4.054209, 3.572999999988724], + [4.194833, 4.247000000006551], + [4.136541, 4.326999999989312], + [4.104084, 3.620000000012169], + [4.0735, 3.7739999999928386], + [4.156584, 3.961000000003878], + [4.305542, 4.340999999996598], + [3.781125, 3.3669999999972333], + [4.277375, 3.5529999999965867], + [4.232584, 4.183000000011816], + [4.000041, 3.5749999999978854], + [4.394291, 3.8419999999916854], + [4.647959, 4.803999999992925], + [4.359708, 3.7840000000102236], + [4.23225, 3.6460000000033688], + [3.940583, 3.5159999999905267], + [4.14075, 3.5080000000107248], + [4.233375, 3.603999999981511], + [4.404417, 4.311000000015497], + [4.0295, 3.9209999999911815], + [4.083042, 4.283000000000925], + [4.309291, 4.156999999992195], + [4.211833, 3.720000000001278], + [4.15775, 3.4639999999939164], + [4.08075, 3.398000000004231], + [4.044667, 4.144000000010806], + [4.265958, 4.225000000005252], + [4.166708, 3.63699999999767], + [4.112459, 4.268000000010375], + [4.027083, 3.4519999999957918], + [4.231625, 3.776000000002], + [4.107916, 3.699000000011665], + [4.31675, 3.838999999985049], + [4.009833, 3.4800000000103637], + [3.995083, 3.4539999999907423], + [4.25775, 4.287000000005037], + [4.12675, 3.5720000000054597], + [4.165375, 4.075999999997748], + [4.097458, 3.355999999982373], + [4.311167, 3.8750000000220552], + [4.363667, 4.087999999995873], + [4.094625, 3.500000000002501], + [4.238625, 3.486000000009426], + [4.016125, 3.8939999999882957], + [3.997667, 3.3910000000076934], + [4.15475, 3.55900000000986], + [5.095917, 3.8509999999973843], + [4.2575, 3.748000000001639], + [4.325583, 4.252000000008138], + [4.028125, 4.470999999995229], + [4.348542, 4.5339999999924885], + [4.251667, 4.020999999994501], + [4.35425, 4.524000000003525], + [4.2995, 3.857999999993922], + [4.280792, 4.006999999987215], + [4.483542, 4.352000000011458], + [4.57575, 4.54700000001651], + [4.3125, 3.895999999997457], + [4.202334, 4.145000000008281], + [4.521833, 4.245000000011601], + [4.453416, 3.973999999985267], + [4.412209, 4.497999999998115], + [4.3115, 4.467000000005328], + [4.740708, 4.68999999999653], + [4.474333, 4.29499999999905], + [4.676041, 4.505999999992127], + [4.414959, 4.00599999998974], + [4.475709, 4.389000000003307], + [4.490667, 4.310000000003811], + [4.402042, 4.178000000010229], + [4.031792, 4.333000000002585], + [4.415708, 4.421999999991044], + [4.271791, 4.212999999992917], + [4.819292, 4.215000000016289], + [4.302583, 4.446000000001504], + [4.201958, 4.354999999989673], + [4.660667, 4.491999999999052], + [4.2725, 4.183000000011816], + [4.557125, 4.836999999994873], + [3.967292, 3.4430000000043037], + [4.395584, 4.69900000001644], + [4.149292, 3.995999999986566] + ], + "candidate": [ + [4.373583, 4.4699999999977535], + [4.228875, 3.906000000000631], + [4.211583, 4.432999999991694], + [4.170917, 4.19699999999068], + [4.307208, 4.115999999982023], + [4.308417, 4.338000000004172], + [4.167959, 3.943000000006691], + [4.257625, 4.204999999998904], + [4.294791, 4.317000000000348], + [4.249459, 4.562999999990325], + [4.737791, 4.6169999999960964], + [4.440959, 4.2249999999910415], + [4.558, 4.506999999989603], + [4.446625, 4.627999999996746], + [4.105083, 4.190000000008354], + [4.056666, 4.040000000003374], + [4.413042, 4.298000000005686], + [4.354583, 4.490999999987366], + [4.309667, 4.388000000005832], + [3.991417, 4.188999999996668], + [4.343584, 3.9450000000158525], + [3.977708, 3.6860000000018545], + [4.426041, 3.7039999999848305], + [4.456334, 4.650000000012255], + [4.373334, 4.490999999987366], + [4.537958, 4.699000000002229], + [4.069791, 3.756999999993127], + [4.037167, 4.232999999999265], + [4.215791, 4.46000000000879], + [4.090208, 4.041999999998325], + [4.219959, 4.2810000000059745], + [4.386625, 4.259000000004676], + [4.221875, 4.451000000003091], + [4.225375, 4.445000000004029], + [4.446209, 4.2439999999999145], + [4.38375, 4.1060000000072705], + [4.071, 4.1520000000048185], + [4.387208, 4.517999999990252], + [4.146333, 4.086000000000922], + [4.584125, 3.9589999999947167], + [4.09275, 3.718000000020538], + [4.371916, 4.023999999986927], + [4.124, 3.708000000003153], + [4.093666, 3.9540000000073405], + [4.096208, 4.039999999989163], + [4.137625, 3.7010000000066157], + [4.575625, 4.799000000005549], + [4.287416, 3.746999999989953], + [4.592667, 4.241000000007489], + [4.557875, 4.869000000013557], + [4.423917, 3.9899999999875035], + [4.543375, 4.527999999993426], + [4.32825, 4.466000000007853], + [4.118333, 3.59999999999161], + [4.440125, 4.121000000012032], + [4.739458, 4.728000000014276], + [4.962584, 4.486999999983254], + [4.278416, 3.7839999999960128], + [4.545958, 3.849000000002434], + [4.457334, 3.914000000008855], + [4.488959, 4.525999999998476], + [4.521083, 4.829999999998336], + [4.265666, 4.5070000000038135], + [4.428375, 3.974999999996953], + [4.475333, 3.875999999991109], + [4.636625, 4.379000000000133], + [4.416875, 3.84099999999421], + [4.17375, 4.037999999994213], + [4.49825, 4.266000000001213], + [4.136958, 3.637999999995145], + [4.2705, 4.225000000005252], + [4.094625, 4.210999999997966], + [4.030625, 4.400000000003956], + [4.361167, 3.9939999999916154], + [4.383416, 4.757999999995377], + [4.480917, 3.827000000001135], + [4.072084, 4.2350000000084265], + [4.593708, 4.5849999999916236], + [4.28425, 4.535000000004175], + [3.947417, 3.5210000000063246], + [4.561667, 4.9119999999902575], + [4.098458, 4.344000000003234], + [4.2445, 4.123999999990247], + [4.058167, 3.6719999999945685], + [4.631792, 4.766000000003601], + [4.425, 4.156999999992195], + [4.389333, 4.392999999993208], + [4.403542, 4.502999999999702], + [4.603333, 4.5260000000126865], + [4.224708, 4.512000000005401], + [4.442541, 4.125000000001933], + [4.717375, 4.440999999999917], + [4.671708, 4.380000000011819], + [4.657792, 4.589999999993211], + [4.762417, 4.76799999998434], + [4.564208, 4.694999999998117], + [4.586958, 4.96999999998593], + [4.436667, 4.193000000000779], + [4.672208, 4.520000000013624], + [5.139584, 5.4189999999891825], + [4.906708, 5.071000000000936], + [4.6345, 4.517000000006988], + [4.456208, 4.348000000007346], + [4.821583, 4.30800000000886], + [4.52075, 4.187000000001717], + [4.598708, 4.688999999999055], + [4.438583, 4.262999999994577], + [4.414208, 4.596999999989748], + [4.452459, 4.249000000001502], + [4.712959, 4.456000000018889], + [4.594875, 4.061999999990462], + [4.518583, 4.636999999988234], + [4.600042, 3.9629999999988286], + [4.300916, 4.477000000008502], + [4.134125, 3.731000000001927], + [4.211833, 4.382999999990034], + [4.273917, 3.7779999999969505], + [4.120208, 3.58699999999601], + [4.192167, 3.614999999996371], + [4.4475, 4.00200000001405] + ] + }, + "wall_medians_ms": { + "baseline": 4.226625, + "candidate": 4.3869165 + }, + "change_percent": 3.7924230325614205 + } + ], + "output_sha256": "4aeb53ae081d30296305fbb982777e01411bf742fb2c6880e7a4b3bc1bd2de21", + "summary": { + "baseline": { + "count": 360, + "wall_median_ms": 4.231, + "cpu_median_ms": 4.147999999993601 + }, + "candidate": { + "count": 360, + "wall_median_ms": 4.3736455, + "cpu_median_ms": 4.249500000007345 + }, + "change_ms": 0.14264550000000042, + "change_percent": 3.3714370125266013 + } + }, + "install-fresh": { + "argv": ["env", "install", "22.13.1"], + "cwd_depth": 0, + "rounds": [ + { + "samples": { + "baseline": [ + [1105.69925, 1061.743000000007], + [1073.0215, 1043.7599999999918], + [1074.768875, 1028.5140000000013], + [1073.133041, 1032.6189999999826], + [1074.517291, 1044.080000000008], + [1054.010708, 1019.3700000000092], + [1043.723583, 1036.787000000018], + [1053.498042, 1033.5429999999947], + [1049.660041, 1021.7650000000162], + [1084.967959, 1042.8170000000136] + ], + "candidate": [ + [1121.345375, 1109.7879999999946], + [1123.11075, 1107.878999999997], + [1160.232417, 1119.7680000000078], + [1103.180041, 1082.2500000000018], + [1145.192875, 1112.556000000012], + [1194.521458, 1107.732999999996], + [1156.663583, 1101.2769999999819], + [1155.854875, 1115.2649999999937], + [1123.543666, 1089.3999999999835], + [1174.467416, 1106.1149999999884] + ] + }, + "wall_medians_ms": { + "baseline": 1073.0772705, + "candidate": 1150.5238749999999 + }, + "change_percent": 7.217243960811293 + }, + { + "samples": { + "baseline": [ + [1087.280541, 1048.846999999995], + [1059.1695, 1037.5350000000053], + [1088.240375, 1052.129999999977], + [1034.75225, 1011.9000000000256], + [1045.141542, 1031.2559999999849], + [1037.706583, 1020.1690000000099], + [1080.805584, 1038.5040000000174], + [1049.5185, 1036.090999999999], + [1066.344666, 1024.788000000001], + [1053.187875, 1029.4120000000078] + ], + "candidate": [ + [1101.5165, 1094.7069999999997], + [1107.906292, 1086.4590000000048], + [1146.560666, 1114.2010000000084], + [1107.247375, 1091.47999999999], + [1149.80425, 1113.8400000000104], + [1127.122792, 1095.0559999999996], + [1167.840834, 1120.5139999999858], + [1130.3415, 1104.625999999996], + [1119.412291, 1095.138999999989], + [1136.454667, 1098.4770000000026] + ] + }, + "wall_medians_ms": { + "baseline": 1056.1786875, + "candidate": 1128.7321459999998 + }, + "change_percent": 6.869430273369326 + }, + { + "samples": { + "baseline": [ + [1101.203042, 1026.157000000012], + [1058.8985, 1031.3700000000097], + [1041.464917, 1031.3820000000078], + [1067.4355, 1044.0490000000011], + [1068.879125, 1047.941000000037], + [1096.708334, 1066.6829999999834], + [1077.328375, 1042.080000000027], + [1086.38675, 1053.9400000000114], + [1068.431875, 1043.9489999999978], + [1042.303625, 1021.207000000004] + ], + "candidate": [ + [1141.619042, 1103.3479999999827], + [1114.095917, 1104.469000000023], + [1127.086458, 1093.4269999999628], + [1112.957709, 1090.9540000000106], + [1108.053375, 1096.0649999999816], + [1126.644959, 1115.5149999999878], + [1141.546084, 1110.876999999988], + [1147.578875, 1116.6979999999853], + [1099.803833, 1080.2620000000047], + [1093.502833, 1079.6339999999987] + ] + }, + "wall_medians_ms": { + "baseline": 1068.6554999999998, + "candidate": 1120.370438 + }, + "change_percent": 4.8392524999871345 + } + ], + "output_sha256": "4aeb53ae081d30296305fbb982777e01411bf742fb2c6880e7a4b3bc1bd2de21", + "summary": { + "baseline": { + "count": 30, + "wall_median_ms": 1067.9336875, + "cpu_median_ms": 1036.4390000000085 + }, + "candidate": { + "count": 30, + "wall_median_ms": 1127.104625, + "cpu_median_ms": 1103.9085000000027 + }, + "change_ms": 59.170937500000036, + "change_percent": 5.540693976843958 + } + } + }, + "sample_columns": ["wall_ms", "cpu_ms"] +} diff --git a/bench/binary-size/results.json b/bench/binary-size/results.json index 45f846655d..885eb5b2a2 100644 --- a/bench/binary-size/results.json +++ b/bench/binary-size/results.json @@ -425,5 +425,136 @@ "additional_bytes_to_remove": 6912, "additional_fraction_of_candidate_percent": 50.0 } - ] + ], + "cli_profile_benchmark": { + "source_commit": "a4e9c5932e069b5aea5b9c0136222ddada73bed0", + "evidence": "evidence/cli-profile-benchmark.json", + "cpu": "Apple M4 Max", + "platform": "macOS-26.2-arm64-arm-64bit", + "binaries": { + "baseline": { + "bytes": 7991312, + "sha256": "8c7696daad2fcdb7842613fba238e5475eef6078b1ca8f8984899e49750b36b1" + }, + "candidate": { + "bytes": 4954496, + "sha256": "9b6a8879912330090415905119baed4e99eead050208271fe7200b1c44bb298d" + } + }, + "results": { + "help": { + "baseline": { + "count": 360, + "wall_median_ms": 4.0816875, + "cpu_median_ms": 3.954499999999861 + }, + "candidate": { + "count": 360, + "wall_median_ms": 4.156166499999999, + "cpu_median_ms": 3.9955000000000407 + }, + "change_ms": 0.0744789999999993, + "change_percent": 1.824710980446187 + }, + "env-current": { + "baseline": { + "count": 360, + "wall_median_ms": 4.350229000000001, + "cpu_median_ms": 4.251000000000005 + }, + "candidate": { + "count": 360, + "wall_median_ms": 4.497354, + "cpu_median_ms": 4.386999999999919 + }, + "change_ms": 0.14712499999999906, + "change_percent": 3.382005866817561 + }, + "env-current-deep": { + "baseline": { + "count": 360, + "wall_median_ms": 4.952729, + "cpu_median_ms": 4.771500000000373 + }, + "candidate": { + "count": 360, + "wall_median_ms": 5.130375, + "cpu_median_ms": 4.979500000000137 + }, + "change_ms": 0.1776460000000002, + "change_percent": 3.586830613990788 + }, + "env-which": { + "baseline": { + "count": 360, + "wall_median_ms": 4.3614795, + "cpu_median_ms": 4.210999999999743 + }, + "candidate": { + "count": 360, + "wall_median_ms": 4.4957705, + "cpu_median_ms": 4.413500000000958 + }, + "change_ms": 0.13429100000000016, + "change_percent": 3.0790239871584912 + }, + "node-startup": { + "baseline": { + "count": 360, + "wall_median_ms": 32.9604375, + "cpu_median_ms": 31.20450000000119 + }, + "candidate": { + "count": 360, + "wall_median_ms": 33.063417, + "cpu_median_ms": 31.37150000000144 + }, + "change_ms": 0.10297950000000355, + "change_percent": 0.3124336562583707 + }, + "npm-version": { + "baseline": { + "count": 360, + "wall_median_ms": 70.225958, + "cpu_median_ms": 66.86099999999584 + }, + "candidate": { + "count": 360, + "wall_median_ms": 70.22149999999999, + "cpu_median_ms": 66.94549999999566 + }, + "change_ms": -0.00445800000001384, + "change_percent": -0.006348080007700929 + }, + "install-cached": { + "baseline": { + "count": 360, + "wall_median_ms": 4.231, + "cpu_median_ms": 4.147999999993601 + }, + "candidate": { + "count": 360, + "wall_median_ms": 4.3736455, + "cpu_median_ms": 4.249500000007345 + }, + "change_ms": 0.14264550000000042, + "change_percent": 3.3714370125266013 + }, + "install-fresh": { + "baseline": { + "count": 30, + "wall_median_ms": 1067.9336875, + "cpu_median_ms": 1036.4390000000085 + }, + "candidate": { + "count": 30, + "wall_median_ms": 1127.104625, + "cpu_median_ms": 1103.9085000000027 + }, + "change_ms": 59.170937500000036, + "change_percent": 5.540693976843958 + } + }, + "scope": "Standalone CLI only. Three interleaved rounds on macOS ARM64 with warm OS caches; fresh Node installations use loopback HTTP with signature and checksum verification. Full application builds and Linux/Windows performance remain unmeasured." + } } From f8e1bc1c92c343ccb781619a5902f1f2e7d4d0ff Mon Sep 17 00:00:00 2001 From: MK Date: Fri, 16 Oct 2026 22:41:52 +0800 Subject: [PATCH 04/11] fix: satisfy lint checks for binary size analysis --- .github/scripts/preview-binary-size.mjs | 60 ++++++++++++++++--------- .typos.toml | 10 ++++- bench/binary-size/benchmark-napi.cjs | 14 +++--- bench/binary-size/measure.cjs | 4 +- 4 files changed, 57 insertions(+), 31 deletions(-) diff --git a/.github/scripts/preview-binary-size.mjs b/.github/scripts/preview-binary-size.mjs index 3554700da5..8f646c3686 100644 --- a/.github/scripts/preview-binary-size.mjs +++ b/.github/scripts/preview-binary-size.mjs @@ -29,7 +29,7 @@ export function binaryArtifacts() { asset: archive, member, }); - return [ + const artifacts = [ cli('`vp`', windows ? 'vp.exe' : 'vp'), { name: `NAPI (${label})`, @@ -37,17 +37,15 @@ export function binaryArtifacts() { package: `@voidzero-dev/vite-plus-${platform}`, member: `package/vite-plus.${platform}.node`, }, - ...(windows - ? [ - cli('Trampoline', 'vp-shim.exe'), - { - name: `Installer (${label})`, - path: `vp-setup-${target}/vp-setup.exe`, - asset: `vp-setup-${target}.exe`, - }, - ] - : []), ]; + if (windows) { + artifacts.push(cli('Trampoline', 'vp-shim.exe'), { + name: `Installer (${label})`, + path: `vp-setup-${target}/vp-setup.exe`, + asset: `vp-setup-${target}.exe`, + }); + } + return artifacts; }); } @@ -67,13 +65,19 @@ export function measureBinary(bytes) { async function download(url, { allowMissing = false } = {}) { const response = await fetch(url, { signal: AbortSignal.timeout(120_000) }); - if (allowMissing && response.status === 404) return null; - if (!response.ok) throw new Error(`Download failed (${response.status}): ${url}`); + if (allowMissing && response.status === 404) { + return null; + } + if (!response.ok) { + throw new Error(`Download failed (${response.status}): ${url}`); + } const chunks = []; let size = 0; for await (const chunk of response.body) { size += chunk.length; - if (size > maxBytes) throw new Error(`Download exceeds the size limit: ${url}`); + if (size > maxBytes) { + throw new Error(`Download exceeds the size limit: ${url}`); + } chunks.push(chunk); } return Buffer.concat(chunks); @@ -85,7 +89,9 @@ export function createReleaseLoader(release, directory) { const version = releaseVersion(release); const downloads = new Map(); async function cachedDownload(url) { - if (!downloads.has(url)) downloads.set(url, download(url)); + if (!downloads.has(url)) { + downloads.set(url, download(url)); + } return downloads.get(url); } return async (artifact) => { @@ -96,7 +102,9 @@ export function createReleaseLoader(release, directory) { `https://registry.npmjs.org/${encodeURIComponent(artifact.package)}/${version}`, { allowMissing: true }, ); - if (!metadataBytes) return null; + if (!metadataBytes) { + return null; + } const metadata = JSON.parse(metadataBytes.toString('utf8')); if (metadata.name !== artifact.package || metadata.version !== version) { throw new Error(`Unexpected npm package: ${artifact.package}@${version}`); @@ -107,13 +115,17 @@ export function createReleaseLoader(release, directory) { } bytes = await cachedDownload(url.href); } else { - if (!release.assets.some((asset) => asset.name === artifact.asset)) return null; + if (!release.assets.some((asset) => asset.name === artifact.asset)) { + return null; + } bytes = await cachedDownload( `${repository}/releases/download/${release.tag_name}/${artifact.asset}`, ); zip = artifact.asset.endsWith('.zip'); } - if (!artifact.member) return bytes; + if (!artifact.member) { + return bytes; + } const options = { maxBuffer: maxBytes, timeout: 30_000 }; if (zip) { const archive = join(directory, artifact.asset); @@ -127,8 +139,12 @@ export function createReleaseLoader(release, directory) { function formatSize(bytes, signed = false) { const absolute = Math.abs(bytes); const sign = bytes < 0 ? '-' : signed && bytes > 0 ? '+' : ''; - if (absolute >= 1024 ** 2) return `${sign}${(absolute / 1024 ** 2).toFixed(2)} MiB`; - if (absolute >= 1024) return `${sign}${(absolute / 1024).toFixed(2)} KiB`; + if (absolute >= 1024 ** 2) { + return `${sign}${(absolute / 1024 ** 2).toFixed(2)} MiB`; + } + if (absolute >= 1024) { + return `${sign}${(absolute / 1024).toFixed(2)} KiB`; + } return `${sign}${absolute} B`; } @@ -139,7 +155,9 @@ function formatDelta(base, preview) { export function renderSizeReport({ release, headSha, runUrl, rows }) { releaseVersion(release); - if (!/^[a-f0-9]{40}$/.test(headSha)) throw new Error('Invalid preview commit'); + if (!/^[a-f0-9]{40}$/.test(headSha)) { + throw new Error('Invalid preview commit'); + } const table = (format) => [ '| Binary | Latest release | Preview | Change |', '| --- | ---: | ---: | ---: |', diff --git a/.typos.toml b/.typos.toml index 0f1320c1d4..11d609d1d2 100644 --- a/.typos.toml +++ b/.typos.toml @@ -1,6 +1,10 @@ [default] -# Vitest v4 used this misspelled directory; the migrator must recognize it. -extend-ignore-re = ['\.vitest-attachements\b'] +extend-ignore-re = [ + # Vitest v4 used this misspelled directory; the migrator must recognize it. + '\.vitest-attachements\b', + # Git patch metadata contains abbreviated object hashes, not prose. + '(?m)^index [0-9a-f]+\.\.[0-9a-f]+(?: [0-7]{6})?$', +] [default.extend-words] pn = "pn" # pnpm short alias @@ -18,6 +22,8 @@ PnP = "PnP" [files] extend-exclude = [ + # Generated symbol names must match the compiled binaries. + "bench/binary-size/evidence/*-symbol-estimates.json", "crates/fspy_detours_sys/detours", "crates/fspy_detours_sys/src/generated_bindings.rs", "packages/cli/src/oxfmt-config.ts", diff --git a/bench/binary-size/benchmark-napi.cjs b/bench/binary-size/benchmark-napi.cjs index cca274e463..34bbaf4b86 100644 --- a/bench/binary-size/benchmark-napi.cjs +++ b/bench/binary-size/benchmark-napi.cjs @@ -2,10 +2,10 @@ // baseline. These synthetic kernels are a regression screen, not an application // build benchmark; do not use them alone to approve a release profile change. const { createHash } = require('node:crypto'); -const { resolve } = require('node:path'); +const path = require('node:path'); const { performance } = require('node:perf_hooks'); -const binding = require(resolve(process.argv[2])); +const binding = require(path.resolve(process.argv[2])); const source = Array.from( { length: 1500 }, (_, i) => @@ -30,7 +30,9 @@ const tasks = { const results = {}; for (const [name, run] of Object.entries(tasks)) { - for (let i = 0; i < 5; i++) run(); + for (let i = 0; i < 5; i++) { + run(); + } const samples = []; for (let i = 0; i < 25; i++) { const start = performance.now(); @@ -39,16 +41,16 @@ for (const [name, run] of Object.entries(tasks)) { } const output = JSON.stringify(run()); results[name] = { - median_ms: [...samples].sort((a, b) => a - b)[Math.floor(samples.length / 2)], + median_ms: samples.toSorted((a, b) => a - b)[Math.floor(samples.length / 2)], samples_ms: samples, output_sha256: createHash('sha256').update(output).digest('hex'), output_bytes: Buffer.byteLength(output), }; } -console.log( +process.stdout.write( JSON.stringify( { node: process.version, source_bytes: Buffer.byteLength(source), results }, null, 2, - ), + ) + '\n', ); diff --git a/bench/binary-size/measure.cjs b/bench/binary-size/measure.cjs index 73008d2f82..7f09b8c4e1 100644 --- a/bench/binary-size/measure.cjs +++ b/bench/binary-size/measure.cjs @@ -16,6 +16,6 @@ const artifacts = Object.fromEntries( ]; }), ); -console.log( - JSON.stringify({ node: process.version, zlib: process.versions.zlib, artifacts }, null, 2), +process.stdout.write( + JSON.stringify({ node: process.version, zlib: process.versions.zlib, artifacts }, null, 2) + '\n', ); From 847b2ac23bcc2eef53fccb541dd394ea80487aef Mon Sep 17 00:00:00 2001 From: MK Date: Sat, 17 Oct 2026 11:19:10 +0800 Subject: [PATCH 05/11] ci: report installed CLI size on Linux --- .github/scripts/measure-installed-cli.mjs | 194 ++++++++++++++++++++++ .github/workflows/vp-binary-size.yml | 29 +++- 2 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 .github/scripts/measure-installed-cli.mjs diff --git a/.github/scripts/measure-installed-cli.mjs b/.github/scripts/measure-installed-cli.mjs new file mode 100644 index 0000000000..7218f9dc68 --- /dev/null +++ b/.github/scripts/measure-installed-cli.mjs @@ -0,0 +1,194 @@ +import { execFile } from 'node:child_process'; +import { createHash } from 'node:crypto'; +import { copyFile, mkdir, mkdtemp, readFile, readdir, rm, writeFile } from 'node:fs/promises'; +import { createRequire } from 'node:module'; +import { tmpdir } from 'node:os'; +import { join, resolve } from 'node:path'; +import { parseArgs, promisify } from 'node:util'; + +const exec = promisify(execFile); +const { values } = parseArgs({ + options: { output: { type: 'string' }, 'packages-dir': { type: 'string' } }, +}); +if (process.platform !== 'linux' || process.arch !== 'x64' || !values.output) { + throw new Error('Run on Linux x64 with --output '); +} + +const repo = process.cwd(); +const temporary = await mkdtemp(join(tmpdir(), 'vp-installed-size-')); +const nativeName = '@voidzero-dev/vite-plus-linux-x64-gnu'; +const nativeFile = 'vite-plus.linux-x64-gnu.node'; +const json = async (file) => JSON.parse(await readFile(file, 'utf8')); +const saveJson = (file, value) => writeFile(file, `${JSON.stringify(value, null, 2)}\n`); +const run = (file, args, cwd = repo) => + exec(file, args, { cwd, timeout: 300_000, maxBuffer: 128 * 1024 ** 2 }); + +async function removeBindings(directory) { + for (const entry of await readdir(directory, { withFileTypes: true })) { + const file = join(directory, entry.name); + if (entry.isDirectory()) { + await removeBindings(file); + } else if (entry.name.endsWith('.node')) { + await rm(file); + } + } +} + +// Run only after the binary measurements. This prepares the disposable CI +// checkout like the release pack job, which ships native addons separately. +async function packReleasePackages(destination) { + const cliPath = join(repo, 'packages/cli/package.json'); + const corePath = join(repo, 'packages/core/package.json'); + const original = await json(cliPath); + const require = createRequire(cliPath); + const { parseTriple } = require('@napi-rs/cli'); + const artifacts = join(repo, 'packages/cli/artifacts'); + await mkdir(artifacts, { recursive: true }); + await copyFile(join(repo, 'packages/cli/binding', nativeFile), join(artifacts, nativeFile)); + + // This job builds only Linux x64. Use the normal release preparation for + // that target, then restore all platform declarations before packing. + await saveJson(cliPath, { + ...original, + napi: { ...original.napi, targets: ['x86_64-unknown-linux-gnu'] }, + }); + await run(process.execPath, ['packages/cli/publish-native-addons.ts', '--mode', 'pkg-pr-new']); + const pins = Object.fromEntries( + original.napi.targets.map((target) => [ + `${original.napi.packageName}-${parseTriple(target).platformArchABI}`, + original.version, + ]), + ); + const cli = await json(cliPath); + await saveJson(cliPath, { + ...cli, + napi: original.napi, + optionalDependencies: { ...cli.optionalDependencies, ...pins }, + }); + const core = await json(corePath); + await saveJson(corePath, { + ...core, + optionalDependencies: { ...core.optionalDependencies, ...pins }, + }); + await removeBindings(join(repo, 'packages/cli/binding')); + await removeBindings(join(repo, 'packages/core/dist')); + await run('pnpm', [ + '--filter', + 'vite-plus', + '--filter', + '@voidzero-dev/vite-plus-core', + 'pack', + '--pack-destination', + destination, + ]); + await run( + 'pnpm', + ['pack', '--pack-destination', destination], + join(repo, 'packages/cli/npm/linux-x64-gnu'), + ); +} + +async function diskSize(directory, apparent = false) { + const { stdout } = await run('du', [ + '--summarize', + '--block-size=1', + ...(apparent ? ['--apparent-size'] : []), + directory, + ]); + return Number(stdout.split(/\s/)[0]); +} + +try { + const packages = values['packages-dir'] + ? resolve(values['packages-dir']) + : join(temporary, 'packages'); + if (!values['packages-dir']) { + await mkdir(packages); + await packReleasePackages(packages); + } + const manifests = new Map(); + for (const file of await readdir(packages)) { + if (file.endsWith('.tgz')) { + const archive = join(packages, file); + const { stdout } = await run('tar', ['-xzOf', archive, 'package/package.json']); + const manifest = JSON.parse(stdout); + manifests.set(manifest.name, { manifest, archive }); + } + } + const cli = manifests.get('vite-plus'); + const core = manifests.get('@voidzero-dev/vite-plus-core'); + const native = manifests.get(nativeName); + if (!cli || !core || !native) { + throw new Error('Expected packed CLI, core, and Linux x64 native packages'); + } + const project = join(temporary, 'project'); + await mkdir(project); + await saveJson(join(project, 'package.json'), { + private: true, + dependencies: { 'vite-plus': cli.manifest.version }, + }); + // Use the repository's registry fixture so aliases and native dependencies + // resolve to this build. The npm cache lives outside the measured tree. + await run( + process.execPath, + [ + join(repo, 'packages/tools/src/local-npm-registry.ts'), + '--packages-dir', + packages, + '--', + 'npm', + 'install', + '--omit=dev', + '--legacy-peer-deps', + '--no-audit', + '--no-fund', + '--cache', + join(temporary, 'npm-cache'), + ], + project, + ); + const modules = join(project, 'node_modules'); + const installedCli = join(modules, 'vite-plus'); + const installedCore = await json(join(modules, 'vite/package.json')); + if ( + installedCore.name !== core.manifest.name || + installedCore.version !== core.manifest.version + ) { + throw new Error('The installation did not use the packed core package'); + } + const { stdout: packedNative } = await exec( + 'tar', + ['-xzOf', native.archive, `package/${nativeFile}`], + { + encoding: 'buffer', + maxBuffer: 128 * 1024 ** 2, + }, + ); + const installedNative = await readFile(join(modules, nativeName, nativeFile)); + if (!installedNative.equals(packedNative)) { + throw new Error('The installation did not use the packed native addon'); + } + const [raw, disk, cliRaw, cliDisk, npm] = await Promise.all([ + diskSize(modules, true), + diskSize(modules), + diskSize(installedCli, true), + diskSize(installedCli), + run('npm', ['--version']), + ]); + const result = await json(values.output); + result.artifacts.cliInstalled = { + raw, + disk, + cliRaw, + cliDisk, + dependenciesRaw: raw - cliRaw, + dependenciesDisk: disk - cliDisk, + nodeVersion: process.version, + npmVersion: npm.stdout.trim(), + nativeSha256: createHash('sha256').update(installedNative).digest('hex'), + }; + await saveJson(values.output, result); + console.log(JSON.stringify(result.artifacts.cliInstalled, null, 2)); +} finally { + await rm(temporary, { recursive: true, force: true }); +} diff --git a/.github/workflows/vp-binary-size.yml b/.github/workflows/vp-binary-size.yml index 6efb18a2a7..3e9afa1b06 100644 --- a/.github/workflows/vp-binary-size.yml +++ b/.github/workflows/vp-binary-size.yml @@ -47,7 +47,7 @@ jobs: run: | MERGE_BASE=$(git merge-base "$BASE_SHA" "$HEAD_SHA") echo "sha=$MERGE_BASE" >> "$GITHUB_OUTPUT" - if git diff --quiet "$MERGE_BASE" "$HEAD_SHA" -- .github/workflows/vp-binary-size.yml; then + if git diff --quiet "$MERGE_BASE" "$HEAD_SHA" -- .github/workflows/vp-binary-size.yml .github/scripts/measure-installed-cli.mjs; then echo "workflow_changed=false" >> "$GITHUB_OUTPUT" else echo "workflow_changed=true" >> "$GITHUB_OUTPUT" @@ -112,6 +112,22 @@ jobs: RELEASE_BUILD: 'true' VERSION: '0.0.0-native-size' steps: + # Use the same measurement code for both revisions, including when the + # merge base predates this script. Neither build job has write permissions. + - name: Check out installed-size measurement script + if: matrix.settings.platform == 'linux' + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + ref: ${{ github.event.pull_request.head.sha }} + path: size-tools + sparse-checkout: .github/scripts/measure-installed-cli.mjs + sparse-checkout-cone-mode: false + persist-credentials: false + + - name: Preserve installed-size measurement script + if: matrix.settings.platform == 'linux' + run: cp size-tools/.github/scripts/measure-installed-cli.mjs "$RUNNER_TEMP/measure-installed-cli.mjs" + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ matrix.source == 'base' && needs.inputs.outputs.merge_base_sha || github.event.pull_request.head.sha }} @@ -234,6 +250,12 @@ jobs: console.log(JSON.stringify(result, null, 2)); NODE + - name: Measure installed CLI with production dependencies + if: matrix.settings.platform == 'linux' + env: + SIZE_FILE: ${{ runner.temp }}/native-size-${{ matrix.source }}-${{ matrix.settings.platform }}.json + run: node "$RUNNER_TEMP/measure-installed-cli.mjs" --output "$SIZE_FILE" + - name: Upload size measurements uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: @@ -408,6 +430,8 @@ jobs: }, ]; const rows = [ + `| Installed CLI including \`node_modules\` (Linux x64) | Disk usage | ${formatSize(baseLinux.artifacts.cliInstalled.disk)} | ${formatSize(headLinux.artifacts.cliInstalled.disk)} | ${formatDelta(baseLinux.artifacts.cliInstalled.disk, headLinux.artifacts.cliInstalled.disk)} |`, + `| Installed CLI including \`node_modules\` (Linux x64) | Apparent size | ${formatSize(baseLinux.artifacts.cliInstalled.raw)} | ${formatSize(headLinux.artifacts.cliInstalled.raw)} | ${formatDelta(baseLinux.artifacts.cliInstalled.raw, headLinux.artifacts.cliInstalled.raw)} |`, ...distArtifacts.map( (artifact) => `| ${artifact.name} | Directory total | ${formatSize(artifact.baseRaw)} | ${formatSize(artifact.headRaw)} | ${formatDelta(artifact.baseRaw, artifact.headRaw)} |`, @@ -424,6 +448,9 @@ jobs: '', 'Final release artifacts built by the canonical `build-upstream` and `build-windows-cli` actions.', 'The dist rows use the Linux build. The core total excludes `.node` files to match the release artifact.', + 'Installed CLI totals include the packed `packages/cli`, core, and production dependencies in a clean Linux x64 `node_modules` tree.', + 'The installation uses `npm install --omit=dev --legacy-peer-deps`, including Linux native packages. It excludes development dependencies, optional peers, the standalone `vp` executable, Node.js, and package-manager caches.', + 'Disk usage measures allocated bytes with `du --block-size=1`; apparent size also uses `--apparent-size`.', '', '| Artifact | Format | Base | PR | Change |', '| --- | --- | ---: | ---: | ---: |', From 9aef1c49c512550b42351eda3e23a3fc94e0d459 Mon Sep 17 00:00:00 2001 From: MK Date: Sat, 17 Oct 2026 11:40:39 +0800 Subject: [PATCH 06/11] bench: compare bundled Rolldown build performance --- bench/binary-size/README.md | 73 +- bench/binary-size/benchmark-rolldown.py | 296 ++++++ .../evidence/rolldown-profile-benchmark.json | 978 ++++++++++++++++++ bench/binary-size/results.json | 53 +- 4 files changed, 1397 insertions(+), 3 deletions(-) create mode 100644 bench/binary-size/benchmark-rolldown.py create mode 100644 bench/binary-size/evidence/rolldown-profile-benchmark.json diff --git a/bench/binary-size/README.md b/bench/binary-size/README.md index e4f87e7039..9a8476580f 100644 --- a/bench/binary-size/README.md +++ b/bench/binary-size/README.md @@ -122,8 +122,77 @@ internet transfer is timed. Other workloads make no mirror requests. The runner checks successful exit codes and matching stdout/stderr for every invocation, and checks the installed Node.js binary after every fresh install. -These measurements do not cover cold filesystem caches, Linux, Windows, full -application builds, or all package-manager operations. +These CLI-only measurements do not cover cold filesystem caches, Linux, Windows, +application builds, or all package-manager operations. The next comparison +measures full `vp build` commands through the bundled Rolldown. + +### Rolldown build performance + +[benchmark-rolldown.py](benchmark-rolldown.py) compares the same standalone +executables through `vp build`. **Both executables retain fat LTO.** Only the +standalone executable changes from `opt-level=3` to `opt-level="z"`. Both use the +same preview JavaScript packages and NAPI addon from commit `a4e9c5932`. The addon +contains Rolldown and Oxc and retains `opt-level=3` with fat LTO. + +The benchmark runs on Apple M4 Max with macOS ARM64, Node.js `22.23.2`, Vite +`8.3.4`, and Rolldown `1.2.14`. It includes these workloads: + +- `three10x-bundle`: ten separate copies of the three.js `r108` source, following + [Rolldown's benchmark input](https://github.com/rolldown/rolldown/blob/c9a8cda42bc0fdd84c7b4b4e6d7f95ae83e8b5f7/scripts/misc/setup-benchmark-input/threejs-10x.js). + All ten namespaces remain in the output. The build processes 3,693 modules. +- `three10x-minify-sourcemap`: the same input with Oxc minification and external + source maps. +- `typescript-code-split-minify-sourcemap`: 2,000 generated TypeScript modules, + 24,000 used functions, optional chaining, nullish coalescing, and unused + exports. The build targets ES2015, produces 20 dynamic entry chunks, and uses + Oxc minification and external source maps. Including entry points and helpers, + it processes 2,025 modules and produces 22 JavaScript chunks. + +Median wall times across 60 samples per variant per workload: + +| Workload | `3` | `z` | Change | 95% interval for change | +| ---------------------------------------- | --------: | --------: | -----: | ----------------------: | +| `three10x-bundle` | 525.01 ms | 528.21 ms | +0.61% | -0.37% to +1.54% | +| `three10x-minify-sourcemap` | 660.91 ms | 665.47 ms | +0.69% | -0.70% to +1.02% | +| `typescript-code-split-minify-sourcemap` | 401.94 ms | 401.38 ms | -0.14% | -0.85% to +0.64% | + +No workload shows a consistent slowdown. Differences change sign across rounds, +and all three confidence intervals include zero. The intervals use 10,000 +bootstrap resamples of adjacent pairs within each round. They describe sampling +uncertainty on this host, not performance guarantees for other projects or hosts. + +Each workload has three rounds of 20 balanced, randomized adjacent pairs, with +three warmups per variant in each round. Each sample starts a new `vp build` +process. The timer includes CLI and Node startup, bundling, configured transforms, +and output writes. Output removal and hash checks occur outside the timer. OS +filesystem caches stay warm; no task cache or persistent bundler process is used. +Compressed-size reporting is disabled for both variants. + +Untimed probe builds confirm the Rolldown version, module and chunk counts, +Node executable, and loaded native addon. Both variants load the same addon with +SHA-256 `d55572198e5ea18cb1d3f71a014b9b48c83fae8ad110b7ef139bb315d0e07e3b`. +Every build must succeed and produce identical output paths and bytes, including +source maps. The [evidence](evidence/rolldown-profile-benchmark.json) contains all +samples, execution order, artifact hashes, and confidence intervals. + +To reproduce, prepare a release build of `packages/cli` and its core dependency, +then build both standalone profiles from the same commit. Obtain three.js `r108` +at commit `7e0a78beb9317e580d7fa4da9b5b12be051c6feb` and run: + +```sh +python3 bench/binary-size/benchmark-rolldown.py \ + --baseline /path/to/opt-level-3/vp \ + --candidate /path/to/opt-level-z/vp \ + --binary-source-commit \ + --cli packages/cli \ + --node /path/to/node \ + --three-src /path/to/three.js/src \ + --output bench/binary-size/evidence/rolldown-profile-benchmark.json +``` + +These results compare the profiles shipped by this PR. They do not measure +disabling fat LTO, changing the NAPI optimization level, cold caches, or Linux +and Windows build performance. ### NAPI performance diff --git a/bench/binary-size/benchmark-rolldown.py b/bench/binary-size/benchmark-rolldown.py new file mode 100644 index 0000000000..4755fe4b87 --- /dev/null +++ b/bench/binary-size/benchmark-rolldown.py @@ -0,0 +1,296 @@ +#!/usr/bin/env python3 +"""Compare standalone vp profiles through the same bundled Vite and Rolldown. + +Use a built packages/cli directory and the src directory from three.js r108, +the revision used by Rolldown's own threejs10x benchmark. No downloads occur +during the benchmark. Both binaries use the supplied Node.js executable. +""" + +import argparse +import hashlib +import json +import os +from pathlib import Path +import platform +import random +import resource +import shutil +import statistics +import subprocess +import tempfile +import time + + +CONFIG = """ +import { writeFileSync } from 'node:fs'; + +export default { + build: { + target: 'es2015', + minify: process.env.BENCH_MINIFY === '1' ? 'oxc' : false, + sourcemap: process.env.BENCH_SOURCEMAP === '1', + reportCompressedSize: false, + chunkSizeWarningLimit: 100000, + }, + plugins: process.env.BENCH_PROBE ? [{ + name: 'benchmark-probe', + generateBundle(_options, bundle) { + const chunks = Object.values(bundle).filter(item => item.type === 'chunk'); + writeFileSync(process.env.BENCH_PROBE, JSON.stringify({ + node: process.version, + nodeExecutable: process.execPath, + rolldown: this.meta.rolldownVersion, + modules: [...this.getModuleIds()].length, + chunks: chunks.length, + dynamicChunks: chunks.filter(chunk => chunk.isDynamicEntry).length, + nativeLibraries: process.report.getReport().sharedObjects.filter(name => name.endsWith('.node')), + })); + }, + }] : [], +}; +""" + + +def digest(path): + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def tree_manifest(root): + files = [ + {"path": str(path.relative_to(root)), "bytes": path.stat().st_size, "sha256": digest(path)} + for path in sorted(root.rglob("*")) if path.is_file() + ] + return { + "files": len(files), + "bytes": sum(item["bytes"] for item in files), + "sha256": hashlib.sha256(json.dumps(files, sort_keys=True).encode()).hexdigest(), + } + + +def cpu_time(): + usage = resource.getrusage(resource.RUSAGE_CHILDREN) + return usage.ru_utime + usage.ru_stime + + +def make_project(project, cli, node_version): + project.mkdir() + (project / "node_modules").mkdir() + (project / "node_modules/vite-plus").symlink_to(cli, target_is_directory=True) + (project / "package.json").write_text('{"name":"rolldown-benchmark","private":true,"type":"module"}\n') + (project / ".node-version").write_text(node_version + "\n") + (project / "vite.config.mjs").write_text(CONFIG) + (project / "index.html").write_text('\n') + + +def make_three(project, source): + entries = [] + for index in range(10): + shutil.copytree(source, project / f"copy{index}") + entries.append(f"import * as three{index} from './copy{index}/Three.js';") + entries.append("globalThis.benchmark = [" + ",".join(f"three{i}" for i in range(10)) + "];") + (project / "entry.ts").write_text("\n".join(entries) + "\n") + + +def make_typescript(project): + source = project / "src" + source.mkdir() + (source / "shared.ts").write_text("export const adjust = (n: number): number => Math.sin(n) * 0.5;\n") + for index in range(2000): + lines = ["import { adjust } from './shared';", "interface Input { value?: number; label?: string }"] + for function in range(12): + lines.append( + f"export function f{function}(input: Input): string {{" + f" const value = (input.value ?? {index + function}) + adjust({function} + (input.value ?? 0));" + f" return (input.label?.toUpperCase() ?? 'module{index}') + ':' + value.toFixed({function % 5}); }}" + ) + lines.append(f"export function unused() {{ return 'unused-sentinel-{index}'; }}") + (source / f"module{index}.ts").write_text("\n".join(lines) + "\n") + for chunk in range(20): + lines = [] + calls = [] + for index in range(chunk * 100, (chunk + 1) * 100): + names = [f"f{function} as m{index}f{function}" for function in range(12)] + lines.append(f"import {{ {', '.join(names)} }} from './module{index}';") + calls.extend(f"m{index}f{function}(input)" for function in range(12)) + lines.append("export const run = (input: { value?: number; label?: string }) => [" + ",".join(calls) + "];") + (source / f"chunk{chunk}.ts").write_text("\n".join(lines) + "\n") + (project / "entry.ts").write_text( + "globalThis.benchmark = [" + ",".join(f"() => import('./src/chunk{i}')" for i in range(20)) + "];\n" + ) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--baseline", type=Path, required=True) + parser.add_argument("--candidate", type=Path, required=True) + parser.add_argument("--binary-source-commit", required=True) + parser.add_argument("--cli", type=Path, required=True) + parser.add_argument("--node", type=Path, required=True) + parser.add_argument("--three-src", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--samples", type=int, default=20) + parser.add_argument("--rounds", type=int, default=3) + parser.add_argument("--seed", type=int, default=20261017) + args = parser.parse_args() + if min(args.samples, args.rounds) < 1 or args.samples % 2: + parser.error("Use a positive, even sample count and a positive round count") + node = args.node.resolve() + cli = args.cli.resolve() + three_src = args.three_src.resolve() + core = Path(subprocess.check_output([ + str(node), "--input-type=module", "-e", + "import { createRequire } from 'node:module'; console.log(createRequire(process.argv[1]).resolve('vite/package.json'));", + str(cli / "package.json"), + ], text=True).strip()).parent + node_version = subprocess.check_output([str(node), "--version"], text=True).strip().removeprefix("v") + if not (three_src / "Three.js").is_file(): + parser.error("--three-src must contain Three.js from three.js r108") + binaries_metadata = { + label: {"bytes": path.stat().st_size, "sha256": digest(path)} + for label, path in [("baseline", args.baseline), ("candidate", args.candidate)] + } + report = { + "binary_source_commit": args.binary_source_commit, + "runner_sha256": digest(Path(__file__)), + "platform": platform.platform(), + "cpu": subprocess.check_output(["sysctl", "-n", "machdep.cpu.brand_string"], text=True).strip() + if platform.system() == "Darwin" else platform.processor(), + "binaries": binaries_metadata, + "node": {"version": node_version, "sha256": digest(node)}, + "toolchain": json.loads((cli / "dist/toolchain.json").read_text()), + "cli_dist": tree_manifest(cli / "dist"), + "core_dist": tree_manifest(core / "dist"), + "three_source": tree_manifest(three_src), + "seed": args.seed, + "method": ( + "Fresh vp build process per sample; same JS, NAPI and Node for both profiles; " + "balanced randomized adjacent pairs; three warmups per variant per round; " + "output directory removed before each invocation; warm OS caches; no task cache. " + "Wall time includes process launch, CLI/Node startup, bundling, minification, " + "source maps and output writes as configured. Cleanup and output hash checks " + "are outside the timer. Probe hooks run only in untimed preflight builds. " + "Confidence interval bootstraps paired observations within each round." + ), + "sample_columns": ["wall_ms", "cpu_ms"], + "results": {}, + } + rng = random.Random(args.seed) + with tempfile.TemporaryDirectory(prefix="vp-rolldown-benchmark-") as temp: + root = Path(temp) + home = root / "vp-home" + home.mkdir() + # Use a fixed Node executable without downloads or user configuration. + (home / "config.json").write_text('{"nodeShimMode":"system_first"}\n') + node_bin = root / "node-bin" + node_bin.mkdir() + (node_bin / "node").symlink_to(node) + env = { + key: value for key, value in os.environ.items() + if not key.startswith(("VP_", "VITE_", "TOKIO_", "NAPI_", "BENCH_")) + and key not in ("NODE_OPTIONS", "NODE_PATH", "FORCE_COLOR", "RUST_LOG", "RAYON_NUM_THREADS") + } + env.update({"VP_HOME": str(home), "VP_NO_UPDATE_CHECK": "1", "NO_COLOR": "1", "CI": "1", + "PATH": str(node_bin) + os.pathsep + "/usr/bin:/bin:/usr/sbin:/sbin"}) + binaries = {} + for label, source in [("baseline", args.baseline), ("candidate", args.candidate)]: + directory = root / label + directory.mkdir() + binaries[label] = directory / "vp" + shutil.copy2(source.resolve(), binaries[label]) + (directory / ".vp-setup-complete").touch() + three = root / "three10x" + typescript = root / "typescript" + for project in [three, typescript]: + make_project(project, cli, node_version) + make_three(three, three_src) + make_typescript(typescript) + cases = [ + ("three10x-bundle", three, False, False), + ("three10x-minify-sourcemap", three, True, True), + ("typescript-code-split-minify-sourcemap", typescript, True, True), + ] + for name, project, minify, sourcemap in cases: + case_env = {**env, "BENCH_MINIFY": str(int(minify)), "BENCH_SOURCEMAP": str(int(sourcemap))} + expected_output = None + probes = {} + + def execute(label, probe=False): + nonlocal expected_output + shutil.rmtree(project / "dist", ignore_errors=True) + run_env = dict(case_env) + if probe: + run_env["BENCH_PROBE"] = str(root / "probe.json") + start_cpu = cpu_time() + start = time.perf_counter_ns() + result = subprocess.run( + [str(binaries[label]), "build", "--logLevel", "silent"], cwd=project, + env=run_env, stdin=subprocess.DEVNULL, capture_output=True, timeout=120, + ) + sample = [(time.perf_counter_ns() - start) / 1e6, (cpu_time() - start_cpu) * 1000] + if result.returncode: + raise RuntimeError(f"{name} {label}: {result.stdout.decode()}\n{result.stderr.decode()}") + output = tree_manifest(project / "dist") + if output["files"] < (3 if sourcemap else 2): + raise RuntimeError(f"Missing build output: {name}") + if expected_output is None: + expected_output = output + if output != expected_output: + raise RuntimeError(f"Build output differs: {name}, {label}") + if probe: + data = json.loads((root / "probe.json").read_text()) + if not data.get("rolldown") or Path(data["nodeExecutable"]).resolve() != node: + raise RuntimeError(f"Unexpected bundler/runtime: {data}") + native = [Path(path) for path in data.pop("nativeLibraries") if "vite-plus" in path] + if not native: + raise RuntimeError("The build did not load the bundled Vite+ native addon") + data["native_addons"] = sorted({digest(path) for path in native}) + data.pop("nodeExecutable") + probes[label] = data + return sample + + for label in binaries: + execute(label, probe=True) + if probes["baseline"] != probes["candidate"]: + raise RuntimeError(f"Different bundlers/runtimes: {probes}") + case = {"minify": minify, "sourcemap": sourcemap, "probe": probes["baseline"], "rounds": []} + print(f"{name}: {case['probe']}; output={expected_output}", flush=True) + for round_index in range(args.rounds): + samples = {"baseline": [], "candidate": []} + orders = [i % 2 == 0 for i in range(args.samples)] + rng.shuffle(orders) + for iteration in range(-3, args.samples): + first = iteration % 2 == 0 if iteration < 0 else orders[iteration] + for label in (["baseline", "candidate"] if first else ["candidate", "baseline"]): + sample = execute(label) + if iteration >= 0: + samples[label].append(sample) + medians = {label: statistics.median(s[0] for s in values) for label, values in samples.items()} + change = (medians["candidate"] / medians["baseline"] - 1) * 100 + case["rounds"].append({"samples": samples, "baseline_first": orders, + "wall_medians_ms": medians, "change_percent": change}) + print(f"{name} round {round_index + 1}: {medians['baseline']:.3f} -> {medians['candidate']:.3f} ms ({change:+.2f}%)", flush=True) + summary = {} + for label in binaries: + values = [sample for result in case["rounds"] for sample in result["samples"][label]] + summary[label] = {"count": len(values), "wall_median_ms": statistics.median(s[0] for s in values), + "cpu_median_ms": statistics.median(s[1] for s in values)} + summary["change_percent"] = (summary["candidate"]["wall_median_ms"] / summary["baseline"]["wall_median_ms"] - 1) * 100 + boot_rng = random.Random(args.seed) + estimates = [] + for _ in range(10000): + baseline, candidate = [], [] + for result in case["rounds"]: + for index in boot_rng.choices(range(args.samples), k=args.samples): + baseline.append(result["samples"]["baseline"][index][0]) + candidate.append(result["samples"]["candidate"][index][0]) + estimates.append((statistics.median(candidate) / statistics.median(baseline) - 1) * 100) + estimates.sort() + summary["change_percent_95pct_bootstrap_ci"] = [estimates[250], estimates[9749]] + case.update({"summary": summary, "output": expected_output}) + report["results"][name] = case + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text(json.dumps(report, indent=2) + "\n") + + +if __name__ == "__main__": + main() diff --git a/bench/binary-size/evidence/rolldown-profile-benchmark.json b/bench/binary-size/evidence/rolldown-profile-benchmark.json new file mode 100644 index 0000000000..c1230bfd51 --- /dev/null +++ b/bench/binary-size/evidence/rolldown-profile-benchmark.json @@ -0,0 +1,978 @@ +{ + "binary_source_commit": "a4e9c5932e069b5aea5b9c0136222ddada73bed0", + "runner_sha256": "d932ca2b717df5f09efdac842d4b0b460e2b77b4ab4a18b394a836e5f75db991", + "platform": "macOS-26.2-arm64-arm-64bit", + "cpu": "Apple M4 Max", + "binaries": { + "baseline": { + "bytes": 7991312, + "sha256": "8c7696daad2fcdb7842613fba238e5475eef6078b1ca8f8984899e49750b36b1" + }, + "candidate": { + "bytes": 4954496, + "sha256": "9b6a8879912330090415905119baed4e99eead050208271fe7200b1c44bb298d" + } + }, + "node": { + "version": "22.23.2", + "sha256": "0c61847de20184ae3f35c24be3a79682e25fccccccbcbd316b7e224e24fa8637" + }, + "toolchain": { + "schemaVersion": 1, + "nodes": [ + { + "id": "vite-plus", + "name": "vite-plus", + "version": "0.0.0-commit.a4e9c5932e069b5aea5b9c0136222ddada73bed0", + "kind": "package", + "delivery": ["dependency"], + "aliases": [] + }, + { + "id": "vite-plus-core", + "name": "@voidzero-dev/vite-plus-core", + "version": "0.0.0-commit.a4e9c5932e069b5aea5b9c0136222ddada73bed0", + "kind": "package", + "delivery": ["dependency"], + "aliases": ["vite-plus-core"] + }, + { + "id": "vite", + "name": "vite", + "version": "8.3.4", + "kind": "tool", + "delivery": ["bundled"], + "aliases": [] + }, + { + "id": "rolldown", + "name": "rolldown", + "version": "1.2.14", + "kind": "tool", + "delivery": ["bundled", "compiled"], + "aliases": [] + }, + { + "id": "vitest", + "name": "vitest", + "version": "5.0.5", + "kind": "tool", + "delivery": ["dependency"], + "aliases": [] + }, + { + "id": "oxlint", + "name": "oxlint", + "version": "1.88.0", + "kind": "tool", + "delivery": ["dependency"], + "aliases": [] + }, + { + "id": "oxfmt", + "name": "oxfmt", + "version": "0.73.0", + "kind": "tool", + "delivery": ["dependency"], + "aliases": [] + }, + { + "id": "oxlint-tsgolint", + "name": "oxlint-tsgolint", + "version": "7.0.2004", + "kind": "tool", + "delivery": ["dependency"], + "aliases": ["tsgolint"] + }, + { + "id": "tsdown", + "name": "tsdown", + "version": "0.23.1", + "kind": "tool", + "delivery": ["bundled"], + "aliases": [] + }, + { + "id": "vite-task", + "name": "vite-task", + "revision": "9ba4cc93379cf2d7a6c7e657285bb8a00e8339dc", + "builtAt": "2026-10-16T13:41:37Z", + "kind": "tool", + "delivery": ["compiled"], + "aliases": [] + }, + { + "id": "oxc", + "name": "oxc", + "version": "0.154.0", + "kind": "engine", + "delivery": ["compiled"], + "aliases": [] + }, + { + "id": "oxc-resolver", + "name": "oxc-resolver", + "version": "11.24.3", + "kind": "engine", + "delivery": ["compiled"], + "aliases": [] + } + ], + "edges": [ + { + "from": "vite-plus", + "to": "vite-plus-core", + "relationship": "depends-on" + }, + { + "from": "vite-plus-core", + "to": "vite", + "relationship": "bundles" + }, + { + "from": "vite", + "to": "rolldown", + "relationship": "uses" + }, + { + "from": "vite-plus-core", + "to": "rolldown", + "relationship": "bundles" + }, + { + "from": "rolldown", + "to": "oxc", + "relationship": "compiles" + }, + { + "from": "rolldown", + "to": "oxc-resolver", + "relationship": "compiles" + }, + { + "from": "vite-plus-core", + "to": "tsdown", + "relationship": "bundles" + }, + { + "from": "vite-plus", + "to": "vitest", + "relationship": "depends-on" + }, + { + "from": "vite-plus", + "to": "oxlint", + "relationship": "depends-on" + }, + { + "from": "vite-plus", + "to": "oxlint-tsgolint", + "relationship": "depends-on" + }, + { + "from": "vite-plus", + "to": "oxfmt", + "relationship": "depends-on" + }, + { + "from": "vite-plus", + "to": "vite-task", + "relationship": "compiles" + } + ] + }, + "cli_dist": { + "files": 208, + "bytes": 2305201, + "sha256": "d3519f0b04cc6ecc0fb13da6c2177a5a25e0dd3cbf6a2521ca87fda8bc22e7b6" + }, + "core_dist": { + "files": 108, + "bytes": 4283322, + "sha256": "8c874ad49a840f83138ff2bcd340ea003f8e854d578e2b6f2d3bfc25dd07e2fd" + }, + "three_source": { + "files": 609, + "bytes": 1474049, + "sha256": "072753625a06dc865edcc6b7671b136753440f9c00e2b5c587bcf26f9e3d51db" + }, + "seed": 20261017, + "method": "Fresh vp build process per sample; same JS, NAPI and Node for both profiles; balanced randomized adjacent pairs; three warmups per variant per round; output directory removed before each invocation; warm OS caches; no task cache. Wall time includes process launch, CLI/Node startup, bundling, minification, source maps and output writes as configured. Cleanup and output hash checks are outside the timer. Probe hooks run only in untimed preflight builds. Confidence interval bootstraps paired observations within each round.", + "sample_columns": ["wall_ms", "cpu_ms"], + "results": { + "three10x-bundle": { + "minify": false, + "sourcemap": false, + "probe": { + "node": "v22.23.2", + "rolldown": "1.2.14", + "modules": 3693, + "chunks": 1, + "dynamicChunks": 0, + "native_addons": ["d55572198e5ea18cb1d3f71a014b9b48c83fae8ad110b7ef139bb315d0e07e3b"] + }, + "rounds": [ + { + "samples": { + "baseline": [ + [531.583458, 1401.9380000000012], + [496.480709, 1372.2639999999994], + [504.678375, 1390.3979999999976], + [503.414583, 1390.4780000000017], + [509.644125, 1391.2720000000008], + [508.608542, 1393.3889999999992], + [521.84675, 1415.4320000000027], + [515.111, 1429.1470000000004], + [511.118709, 1399.8629999999962], + [522.493042, 1407.7540000000042], + [544.904291, 1406.1159999999973], + [617.908542, 1496.2000000000016], + [528.452542, 1447.064999999995], + [526.511917, 1425.1100000000038], + [510.339625, 1400.4400000000032], + [517.17175, 1410.032000000001], + [520.54275, 1407.2900000000031], + [522.113459, 1383.2260000000076], + [553.182333, 1412.417000000005], + [530.567833, 1418.040000000005] + ], + "candidate": [ + [533.156959, 1422.5049999999992], + [520.817083, 1396.8620000000005], + [515.902166, 1427.7440000000006], + [529.6235, 1424.931000000001], + [529.181416, 1417.9939999999967], + [520.095084, 1416.2430000000015], + [509.350291, 1392.7019999999998], + [534.524458, 1415.1029999999948], + [526.376667, 1415.269000000002], + [539.223583, 1419.636000000004], + [524.774125, 1414.088999999997], + [555.161375, 1435.955], + [550.10125, 1461.7780000000025], + [535.646291, 1442.0419999999935], + [534.55475, 1435.7900000000043], + [525.016083, 1408.2119999999989], + [517.601625, 1423.0929999999944], + [510.639125, 1394.2779999999857], + [534.27125, 1425.8049999999969], + [567.533792, 1450.8940000000052] + ] + }, + "baseline_first": [ + false, + true, + true, + true, + false, + false, + true, + true, + false, + true, + false, + false, + false, + true, + false, + false, + false, + true, + true, + true + ], + "wall_medians_ms": { + "baseline": 521.19475, + "candidate": 529.402458 + }, + "change_percent": 1.5747871596941465 + }, + { + "samples": { + "baseline": [ + [531.775125, 1428.9849999999974], + [533.75225, 1435.9190000000126], + [520.98825, 1414.0139999999947], + [525.011, 1376.421999999991], + [543.559667, 1436.4810000000007], + [525.009208, 1390.1010000000015], + [516.865792, 1374.780000000001], + [534.738834, 1444.1280000000063], + [519.931834, 1414.069000000012], + [530.556667, 1399.0949999999884], + [519.661208, 1390.529000000015], + [531.64175, 1448.7459999999999], + [533.604708, 1428.629000000015], + [521.007291, 1414.8030000000063], + [537.975375, 1415.1319999999998], + [529.644375, 1419.0640000000058], + [522.095875, 1401.8180000000057], + [528.15025, 1431.3180000000045], + [527.565458, 1419.9509999999975], + [524.310625, 1435.4960000000005] + ], + "candidate": [ + [520.429208, 1411.5260000000092], + [539.657125, 1444.0099999999916], + [536.546292, 1417.2310000000011], + [557.142916, 1467.2570000000037], + [541.635208, 1444.5379999999943], + [542.797375, 1424.4350000000027], + [524.869292, 1373.4039999999936], + [542.062708, 1449.1490000000056], + [526.893542, 1397.0059999999903], + [530.358333, 1407.8049999999962], + [529.683709, 1397.6619999999969], + [530.536417, 1431.5929999999923], + [527.237625, 1396.2789999999786], + [531.603625, 1421.3970000000131], + [523.809125, 1384.5599999999934], + [523.456542, 1406.8129999999996], + [523.191041, 1425.3049999999803], + [517.890709, 1427.0270000000096], + [514.403833, 1385.975000000002], + [512.084542, 1384.1879999999946] + ] + }, + "baseline_first": [ + false, + false, + false, + true, + true, + false, + true, + false, + false, + true, + true, + false, + true, + false, + true, + true, + true, + true, + false, + false + ], + "wall_medians_ms": { + "baseline": 527.8578540000001, + "candidate": 528.4606670000001 + }, + "change_percent": 0.11419987321055203 + }, + { + "samples": { + "baseline": [ + [527.334666, 1428.3390000000225], + [527.641375, 1421.6499999999996], + [543.265625, 1433.5570000000075], + [534.970416, 1429.3619999999976], + [537.616084, 1432.2709999999859], + [576.99825, 1479.0869999999927], + [595.087625, 1433.8280000000054], + [529.032708, 1402.087999999992], + [532.401, 1426.2030000000152], + [517.821042, 1418.4970000000021], + [521.244542, 1401.4410000000055], + [514.7115, 1403.131000000002], + [526.17075, 1428.7199999999984], + [512.92125, 1381.9289999999853], + [516.496333, 1410.084999999981], + [527.307083, 1414.289999999994], + [519.201792, 1416.9649999999763], + [518.846583, 1394.9770000000115], + [516.968209, 1409.2720000000156], + [512.467625, 1389.0289999999936] + ], + "candidate": [ + [522.956709, 1415.4869999999846], + [529.785708, 1407.8639999999893], + [549.311333, 1417.176999999981], + [532.997917, 1445.4049999999938], + [517.873333, 1414.5900000000324], + [551.767583, 1421.5230000000076], + [536.710208, 1409.388999999976], + [535.063, 1428.8000000000238], + [525.634917, 1399.5929999999817], + [537.129541, 1444.455000000005], + [522.905625, 1426.6629999999907], + [517.494667, 1412.8780000000063], + [531.508667, 1418.724999999995], + [522.976166, 1420.9180000000288], + [531.887459, 1450.476000000009], + [520.463167, 1422.190999999998], + [515.082542, 1403.5090000000139], + [513.229125, 1400.9880000000123], + [509.039375, 1405.3189999999631], + [518.051833, 1389.3940000000384] + ] + }, + "baseline_first": [ + false, + false, + true, + true, + false, + false, + true, + false, + true, + false, + false, + true, + false, + true, + true, + false, + false, + true, + true, + true + ], + "wall_medians_ms": { + "baseline": 526.7389165, + "candidate": 524.3055415 + }, + "change_percent": -0.46196985333244456 + } + ], + "summary": { + "baseline": { + "count": 60, + "wall_median_ms": 525.010104, + "cpu_median_ms": 1414.179500000003 + }, + "candidate": { + "count": 60, + "wall_median_ms": 528.2095205, + "cpu_median_ms": 1417.6124999999988 + }, + "change_percent": 0.6094009383103449, + "change_percent_95pct_bootstrap_ci": [-0.37301050642988276, 1.5439326167003609] + }, + "output": { + "files": 2, + "bytes": 10109278, + "sha256": "625ef2f67e91270b0a30f14e2acef624fca9cb4b9165c4c7ab244084beda227b" + } + }, + "three10x-minify-sourcemap": { + "minify": true, + "sourcemap": true, + "probe": { + "node": "v22.23.2", + "rolldown": "1.2.14", + "modules": 3693, + "chunks": 1, + "dynamicChunks": 0, + "native_addons": ["d55572198e5ea18cb1d3f71a014b9b48c83fae8ad110b7ef139bb315d0e07e3b"] + }, + "rounds": [ + { + "samples": { + "baseline": [ + [654.79025, 1583.3780000000388], + [681.682417, 1589.8569999999665], + [673.5905, 1590.851000000015], + [686.73775, 1612.624000000011], + [659.697375, 1617.0260000000098], + [653.678458, 1623.9530000000002], + [677.045041, 1612.7709999999809], + [676.960208, 1622.39900000003], + [674.226917, 1621.8389999999658], + [676.899292, 1626.8110000000036], + [676.710042, 1619.355999999982], + [750.399333, 1638.0740000000173], + [675.937125, 1605.9060000000045], + [725.491584, 1659.733000000017], + [674.793416, 1626.7309999999497], + [661.378042, 1611.6950000000543], + [651.943208, 1567.3039999999787], + [659.80675, 1617.2520000000077], + [656.435084, 1618.942000000004], + [658.790625, 1613.8119999999958] + ], + "candidate": [ + [661.668792, 1614.3359999999802], + [671.947042, 1615.6259999999918], + [687.015959, 1622.8710000000035], + [679.6685, 1622.401999999994], + [657.145, 1610.1919999999836], + [647.588917, 1584.2700000000036], + [670.268875, 1590.3800000000103], + [691.595208, 1640.388999999999], + [687.648833, 1653.2010000000241], + [666.826833, 1610.1659999999924], + [654.770292, 1561.5840000000105], + [682.076125, 1620.047999999997], + [663.240625, 1629.069999999956], + [689.379916, 1609.7920000000272], + [662.058791, 1608.9540000000397], + [675.534709, 1608.6019999999621], + [665.278542, 1604.1809999999828], + [656.607209, 1606.5960000000246], + [659.839, 1585.7429999999795], + [653.310459, 1583.2890000000361] + ] + }, + "baseline_first": [ + false, + false, + false, + true, + false, + false, + true, + false, + true, + false, + true, + true, + true, + true, + true, + false, + true, + false, + false, + true + ], + "wall_medians_ms": { + "baseline": 674.5101665, + "candidate": 666.0526875 + }, + "change_percent": -1.2538697591298553 + }, + { + "samples": { + "baseline": [ + [660.44125, 1584.0129999999704], + [647.756542, 1585.7809999999972], + [648.824334, 1563.8180000000261], + [650.794042, 1609.0770000000134], + [657.275584, 1630.6640000000243], + [646.596917, 1549.0110000000072], + [644.66, 1582.585999999992], + [657.030375, 1606.2279999999873], + [658.145584, 1586.636999999996], + [703.114583, 1636.4149999999995], + [699.763375, 1615.8980000000156], + [669.668834, 1613.9780000000314], + [649.702125, 1590.6039999999848], + [652.757709, 1579.2999999999893], + [651.758375, 1580.6120000000305], + [657.982208, 1599.0639999999985], + [657.430667, 1574.5360000000233], + [660.338916, 1594.2039999999906], + [683.237, 1613.8409999999794], + [671.594, 1618.4920000000034] + ], + "candidate": [ + [667.948208, 1623.7730000000283], + [648.354958, 1581.982000000039], + [659.04875, 1615.8349999999473], + [654.820125, 1607.5269999999477], + [647.131458, 1564.8020000000429], + [652.395625, 1594.3549999999505], + [658.890709, 1582.3550000000068], + [657.118459, 1609.6190000000092], + [667.870959, 1559.1890000000035], + [701.749583, 1641.5910000000054], + [666.136708, 1591.579999999965], + [654.587875, 1590.707000000009], + [655.165167, 1579.166999999984], + [659.941375, 1610.063000000025], + [656.302167, 1587.2399999999516], + [658.418875, 1626.228000000026], + [654.682083, 1598.370999999986], + [654.677917, 1594.8779999999942], + [686.2535, 1643.9570000000003], + [674.470459, 1594.8940000000107] + ] + }, + "baseline_first": [ + true, + true, + false, + true, + false, + false, + true, + true, + false, + false, + true, + false, + false, + true, + true, + false, + true, + true, + false, + false + ], + "wall_medians_ms": { + "baseline": 657.3531255, + "candidate": 657.768667 + }, + "change_percent": 0.06321434916491953 + }, + { + "samples": { + "baseline": [ + [664.641375, 1573.5579999999914], + [655.345083, 1592.8969999999936], + [658.062583, 1615.7650000000103], + [648.281875, 1591.7200000000093], + [659.384042, 1609.2160000000604], + [656.190333, 1572.623999999962], + [659.88425, 1610.4610000000434], + [672.683875, 1604.4029999999339], + [680.446916, 1596.0910000000013], + [685.3415, 1635.6310000000462], + [655.762042, 1551.7370000000028], + [692.972167, 1613.1930000000239], + [670.975917, 1618.9589999999612], + [660.000875, 1600.00500000001], + [675.41775, 1602.196000000049], + [689.93225, 1641.4209999999798], + [662.759834, 1597.2540000000208], + [670.687708, 1565.0569999999675], + [668.391084, 1573.709000000008], + [667.09075, 1606.7029999999818] + ], + "candidate": [ + [681.427667, 1627.4099999999976], + [658.146792, 1598.6369999999965], + [649.526125, 1602.1460000000047], + [660.894125, 1597.4180000000047], + [650.950833, 1589.399999999955], + [650.081583, 1575.6620000000225], + [666.648125, 1606.0269999999832], + [669.030917, 1614.417000000003], + [687.918083, 1612.2810000000527], + [697.762875, 1639.4219999999677], + [678.067291, 1593.4109999999464], + [665.6565, 1564.4470000000297], + [669.194375, 1626.2069999999653], + [674.377916, 1569.4179999999847], + [690.717584, 1612.0559999999955], + [680.84475, 1638.7880000000337], + [673.874875, 1618.812999999932], + [675.560583, 1583.983000000046], + [661.566292, 1583.9170000000422], + [666.849875, 1615.9719999999993] + ] + }, + "baseline_first": [ + false, + true, + true, + true, + false, + true, + false, + true, + true, + false, + false, + false, + true, + true, + false, + true, + false, + false, + false, + true + ], + "wall_medians_ms": { + "baseline": 665.8660625, + "candidate": 669.112646 + }, + "change_percent": 0.48757305452851174 + } + ], + "summary": { + "baseline": { + "count": 60, + "wall_median_ms": 660.9096460000001, + "cpu_median_ms": 1606.4654999999846 + }, + "candidate": { + "count": 60, + "wall_median_ms": 665.467521, + "cpu_median_ms": 1607.0614999999862 + }, + "change_percent": 0.6896366284840028, + "change_percent_95pct_bootstrap_ci": [-0.7029099873636424, 1.0160827443221887] + }, + "output": { + "files": 3, + "bytes": 25898779, + "sha256": "55d714eaca2e9e9e2669594c34f225377a8ca9e9980a2ea7be5179c4aa47f9cd" + } + }, + "typescript-code-split-minify-sourcemap": { + "minify": true, + "sourcemap": true, + "probe": { + "node": "v22.23.2", + "rolldown": "1.2.14", + "modules": 2025, + "chunks": 22, + "dynamicChunks": 20, + "native_addons": ["d55572198e5ea18cb1d3f71a014b9b48c83fae8ad110b7ef139bb315d0e07e3b"] + }, + "rounds": [ + { + "samples": { + "baseline": [ + [401.908792, 1556.2479999999823], + [404.352792, 1578.298000000018], + [399.336791, 1495.4729999999472], + [409.306208, 1561.341000000084], + [406.964875, 1592.0899999999847], + [422.884709, 1571.8109999999683], + [413.18825, 1617.3780000000306], + [414.352208, 1576.9799999999918], + [414.463709, 1612.417999999991], + [400.758667, 1590.7659999999737], + [414.158666, 1621.727000000078], + [403.157875, 1548.091999999997], + [436.091958, 1591.6049999999586], + [397.901584, 1578.0939999999646], + [394.244125, 1535.257999999999], + [413.852875, 1561.5809999999897], + [406.872, 1574.2740000000026], + [409.03175, 1625.6840000000352], + [424.804458, 1610.2619999999206], + [416.874917, 1576.058000000046] + ], + "candidate": [ + [400.978208, 1563.728000000026], + [398.479875, 1536.5319999999656], + [392.768584, 1529.896000000008], + [405.572167, 1556.9379999999455], + [428.323583, 1604.297000000031], + [411.773708, 1582.6680000000124], + [424.838625, 1548.104999999964], + [414.142208, 1623.4720000000493], + [414.309083, 1616.438999999957], + [410.116958, 1598.6330000000635], + [401.436375, 1634.9939999999492], + [413.156917, 1572.1810000000005], + [388.95, 1601.6290000000026], + [399.627041, 1579.2880000000196], + [395.861292, 1609.527000000071], + [397.447541, 1529.3739999999616], + [407.130292, 1491.5679999999725], + [411.929708, 1589.022], + [405.416917, 1573.3830000000353], + [405.434333, 1575.8389999999736] + ] + }, + "baseline_first": [ + true, + false, + false, + true, + true, + false, + false, + true, + true, + false, + false, + false, + true, + false, + true, + false, + true, + true, + false, + true + ], + "wall_medians_ms": { + "baseline": 409.16897900000004, + "candidate": 405.50325 + }, + "change_percent": -0.8958961182636616 + }, + { + "samples": { + "baseline": [ + [414.531667, 1620.8480000000236], + [397.443875, 1535.1980000000367], + [404.071166, 1607.8129999999646], + [401.977042, 1546.3119999999435], + [392.748416, 1562.0930000000044], + [401.318292, 1564.4130000000587], + [412.7255, 1601.7590000000155], + [396.043875, 1613.6510000000044], + [397.108709, 1586.1609999999473], + [396.488, 1623.4699999999975], + [389.469458, 1604.4000000000551], + [387.327583, 1612.749000000008], + [397.994459, 1592.0280000000275], + [389.494875, 1553.2269999999926], + [397.984458, 1622.9269999998905], + [390.68125, 1603.0539999999291], + [392.868125, 1598.3880000001136], + [398.880625, 1577.9179999999542], + [394.527833, 1546.2459999999965], + [391.614667, 1599.330000000009] + ], + "candidate": [ + [399.872292, 1596.2809999999763], + [400.043792, 1593.024000000014], + [397.437208, 1539.6319999999832], + [399.545792, 1611.3970000000108], + [401.168291, 1493.836999999985], + [398.015041, 1621.118000000024], + [393.051625, 1643.5940000000073], + [393.522792, 1544.6539999999231], + [396.779667, 1642.769000000044], + [393.174375, 1603.260999999975], + [397.814625, 1544.302000000016], + [397.8075, 1610.245999999961], + [391.90975, 1560.970999999995], + [397.478417, 1607.637000000068], + [393.190084, 1566.295000000082], + [398.197, 1617.0779999999922], + [400.981084, 1594.432999999981], + [390.595583, 1577.8099999999995], + [402.813833, 1578.8440000000037], + [393.018917, 1564.9899999999661] + ] + }, + "baseline_first": [ + false, + false, + true, + true, + false, + true, + false, + true, + true, + true, + false, + true, + false, + true, + true, + false, + false, + false, + true, + false + ], + "wall_medians_ms": { + "baseline": 396.79835449999996, + "candidate": 397.64295849999996 + }, + "change_percent": 0.2128547133377845 + }, + { + "samples": { + "baseline": [ + [389.677042, 1605.5239999999458], + [398.565417, 1573.6719999999877], + [399.324834, 1545.573000000104], + [396.818083, 1600.9179999999787], + [406.033041, 1564.4989999999552], + [398.306917, 1603.0009999999493], + [400.902667, 1513.9070000000174], + [420.108583, 1618.3979999999565], + [417.467375, 1616.2439999999378], + [405.816667, 1548.9519999999857], + [402.1575, 1621.1319999999887], + [404.221959, 1610.3430000000571], + [421.107541, 1564.9600000000419], + [407.955541, 1527.934000000073], + [397.384667, 1604.799000000071], + [401.087583, 1574.5909999999412], + [396.698416, 1606.5119999999524], + [407.05925, 1597.440000000006], + [403.855375, 1577.8249999999616], + [406.276417, 1564.2919999999094] + ], + "candidate": [ + [389.795125, 1567.0539999999846], + [404.09575, 1569.5140000000265], + [405.700916, 1582.4649999999565], + [399.867458, 1604.8829999999725], + [402.965916, 1612.4480000000858], + [413.152167, 1617.9029999999557], + [405.0325, 1573.5970000000634], + [453.341875, 1628.0679999999847], + [405.5855, 1599.3500000000722], + [410.363667, 1560.1350000000593], + [404.174167, 1580.699999999979], + [406.549292, 1556.5389999999297], + [405.345833, 1581.7049999999426], + [402.270875, 1596.388999999931], + [405.398, 1651.0130000000345], + [401.316792, 1594.5329999999558], + [407.99875, 1613.5810000000674], + [403.685, 1633.4140000000161], + [403.640584, 1620.8310000000665], + [399.678583, 1601.7970000000332] + ] + }, + "baseline_first": [ + false, + true, + false, + false, + true, + false, + true, + false, + false, + false, + false, + false, + true, + true, + true, + false, + true, + true, + true, + true + ], + "wall_medians_ms": { + "baseline": 403.0064375, + "candidate": 404.6033335 + }, + "change_percent": 0.39624577957269036 + } + ], + "summary": { + "baseline": { + "count": 60, + "wall_median_ms": 401.94291699999997, + "cpu_median_ms": 1588.4634999999605 + }, + "candidate": { + "count": 60, + "wall_median_ms": 401.37658350000004, + "cpu_median_ms": 1591.023000000007 + }, + "change_percent": -0.14089898740520246, + "change_percent_95pct_bootstrap_ci": [-0.85460009661944, 0.6420565255943034] + }, + "output": { + "files": 45, + "bytes": 16805101, + "sha256": "4b63439664120c0bda4402ea8be4471c25b186fe02cf2ffbb7363bebe4b57352" + } + } + } +} diff --git a/bench/binary-size/results.json b/bench/binary-size/results.json index 885eb5b2a2..28daa82ecf 100644 --- a/bench/binary-size/results.json +++ b/bench/binary-size/results.json @@ -555,6 +555,57 @@ "change_percent": 5.540693976843958 } }, - "scope": "Standalone CLI only. Three interleaved rounds on macOS ARM64 with warm OS caches; fresh Node installations use loopback HTTP with signature and checksum verification. Full application builds and Linux/Windows performance remain unmeasured." + "scope": "Standalone CLI only. Three interleaved rounds on macOS ARM64 with warm OS caches; fresh Node installations use loopback HTTP with signature and checksum verification. These workloads do not measure bundling or Linux/Windows performance; see rolldown_build_performance for full build measurements." + }, + "rolldown_build_performance": { + "binary_source_commit": "a4e9c5932e069b5aea5b9c0136222ddada73bed0", + "evidence": "evidence/rolldown-profile-benchmark.json", + "baseline_profile": "Standalone opt-level=3, fat LTO; NAPI opt-level=3, fat LTO", + "candidate_profile": "Standalone opt-level=z, fat LTO; identical NAPI opt-level=3, fat LTO", + "results": { + "three10x-bundle": { + "baseline": { + "count": 60, + "wall_median_ms": 525.010104, + "cpu_median_ms": 1414.179500000003 + }, + "candidate": { + "count": 60, + "wall_median_ms": 528.2095205, + "cpu_median_ms": 1417.6124999999988 + }, + "change_percent": 0.6094009383103449, + "change_percent_95pct_bootstrap_ci": [-0.37301050642988276, 1.5439326167003609] + }, + "three10x-minify-sourcemap": { + "baseline": { + "count": 60, + "wall_median_ms": 660.9096460000001, + "cpu_median_ms": 1606.4654999999846 + }, + "candidate": { + "count": 60, + "wall_median_ms": 665.467521, + "cpu_median_ms": 1607.0614999999862 + }, + "change_percent": 0.6896366284840028, + "change_percent_95pct_bootstrap_ci": [-0.7029099873636424, 1.0160827443221887] + }, + "typescript-code-split-minify-sourcemap": { + "baseline": { + "count": 60, + "wall_median_ms": 401.94291699999997, + "cpu_median_ms": 1588.4634999999605 + }, + "candidate": { + "count": 60, + "wall_median_ms": 401.37658350000004, + "cpu_median_ms": 1591.023000000007 + }, + "change_percent": -0.14089898740520246, + "change_percent_95pct_bootstrap_ci": [-0.85460009661944, 0.6420565255943034] + } + }, + "scope": "Full vp build commands through bundled Rolldown 1.2.14 and Vite 8.3.4 on Apple M4 Max, macOS ARM64, Node 22.23.2. Sixty samples per variant per workload, warm filesystem caches, fresh processes and clean output directories. No consistent slowdown in these workloads. Disabling fat LTO, changing NAPI optimization, cold caches, and Linux/Windows performance are not measured." } } From c9a0c67e0ec4ef383e0b38836ab1cafed5673843 Mon Sep 17 00:00:00 2001 From: MK Date: Sat, 17 Oct 2026 11:42:23 +0800 Subject: [PATCH 07/11] ci: show one installed CLI size in reports --- .github/workflows/vp-binary-size.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/vp-binary-size.yml b/.github/workflows/vp-binary-size.yml index 3e9afa1b06..d4d8cdd5e3 100644 --- a/.github/workflows/vp-binary-size.yml +++ b/.github/workflows/vp-binary-size.yml @@ -431,7 +431,6 @@ jobs: ]; const rows = [ `| Installed CLI including \`node_modules\` (Linux x64) | Disk usage | ${formatSize(baseLinux.artifacts.cliInstalled.disk)} | ${formatSize(headLinux.artifacts.cliInstalled.disk)} | ${formatDelta(baseLinux.artifacts.cliInstalled.disk, headLinux.artifacts.cliInstalled.disk)} |`, - `| Installed CLI including \`node_modules\` (Linux x64) | Apparent size | ${formatSize(baseLinux.artifacts.cliInstalled.raw)} | ${formatSize(headLinux.artifacts.cliInstalled.raw)} | ${formatDelta(baseLinux.artifacts.cliInstalled.raw, headLinux.artifacts.cliInstalled.raw)} |`, ...distArtifacts.map( (artifact) => `| ${artifact.name} | Directory total | ${formatSize(artifact.baseRaw)} | ${formatSize(artifact.headRaw)} | ${formatDelta(artifact.baseRaw, artifact.headRaw)} |`, @@ -450,7 +449,7 @@ jobs: 'The dist rows use the Linux build. The core total excludes `.node` files to match the release artifact.', 'Installed CLI totals include the packed `packages/cli`, core, and production dependencies in a clean Linux x64 `node_modules` tree.', 'The installation uses `npm install --omit=dev --legacy-peer-deps`, including Linux native packages. It excludes development dependencies, optional peers, the standalone `vp` executable, Node.js, and package-manager caches.', - 'Disk usage measures allocated bytes with `du --block-size=1`; apparent size also uses `--apparent-size`.', + 'Disk usage measures installed space with `du --summarize --block-size=1`, equivalent to `du -sh` before rounding.', '', '| Artifact | Format | Base | PR | Change |', '| --- | --- | ---: | ---: | ---: |', From df2ae6e8a4021b5f898e89ddd67c06b9c8514523 Mon Sep 17 00:00:00 2001 From: MK Date: Sat, 17 Oct 2026 11:52:58 +0800 Subject: [PATCH 08/11] ci: report CLI unpacked size using npm metadata --- .../__tests__/measure-installed-cli.spec.ts | 82 +++++ .github/scripts/measure-installed-cli.mjs | 290 +++++++++++------- .github/workflows/vp-binary-size.yml | 29 +- 3 files changed, 288 insertions(+), 113 deletions(-) create mode 100644 .github/scripts/__tests__/measure-installed-cli.spec.ts diff --git a/.github/scripts/__tests__/measure-installed-cli.spec.ts b/.github/scripts/__tests__/measure-installed-cli.spec.ts new file mode 100644 index 0000000000..b7294c1dc3 --- /dev/null +++ b/.github/scripts/__tests__/measure-installed-cli.spec.ts @@ -0,0 +1,82 @@ +import { describe, expect, test } from 'vitest'; + +import { calculateUnpackedSize, matchesPlatform } from '../measure-installed-cli.mjs'; + +function packument(size: number, fields: Record = {}) { + return { versions: { '1.0.0': { dist: { unpackedSize: size }, ...fields } } }; +} + +describe('unpacked CLI size', () => { + test('includes aliased core, deduplicates shared dependencies, and filters native targets', async () => { + const registry = { + cli: packument(100, { + dependencies: { vite: 'npm:@scope/core@1.0.0', shared: '^1.0.0' }, + optionalDependencies: { linux: '1.0.0', musl: '1.0.0', darwin: '1.0.0' }, + devDependencies: { development: '1.0.0' }, + peerDependencies: { peer: '1.0.0' }, + }), + '@scope/core': packument(200, { + dependencies: { shared: '^1.0.0', css: '1.0.0' }, + optionalDependencies: { linux: '1.0.0' }, + }), + shared: { + versions: { + '1.0.0': { dist: { unpackedSize: 10 } }, + '1.1.0': { dist: { unpackedSize: 30 } }, + }, + }, + css: packument(40), + linux: packument(300, { os: ['linux'], cpu: ['x64'], libc: ['glibc'] }), + musl: packument(400, { os: ['linux'], cpu: ['x64'], libc: ['musl'] }), + darwin: packument(500, { os: ['darwin'], cpu: ['arm64'] }), + }; + const load = async (name: keyof typeof registry) => { + expect(registry[name]).toBeDefined(); + return registry[name]; + }; + const result = await calculateUnpackedSize('cli', '1.0.0', load); + expect(result.selfSize).toBe(100); + expect(result.totalSize).toBe(670); + expect(result.dependencyCount).toBe(4); + expect(result.dependencies.map((item: { name: string }) => item.name)).toEqual([ + 'linux', + '@scope/core', + 'css', + 'shared', + ]); + }); + + test('honors excluded platforms and unrestricted packages', () => { + expect(matchesPlatform({})).toBe(true); + expect(matchesPlatform({ os: ['!darwin'], cpu: ['!arm64'] })).toBe(true); + expect(matchesPlatform({ os: ['linux', '!linux'] })).toBe(false); + expect(matchesPlatform({ cpu: ['arm64'] })).toBe(false); + expect(matchesPlatform({ libc: ['!glibc'] })).toBe(false); + }); + + test('records missing registry sizes as zero, as npmx does', async () => { + const registry = { + cli: packument(100, { dependencies: { legacy: '1.0.0' } }), + legacy: { versions: { '1.0.0': {} } }, + }; + const result = await calculateUnpackedSize( + 'cli', + '1.0.0', + async (name: keyof typeof registry) => registry[name], + ); + expect(result.totalSize).toBe(100); + expect(result.dependencies).toEqual([ + { name: 'legacy', version: '1.0.0', size: 0, missingSize: true }, + ]); + }); + + test('fails if a required dependency cannot be resolved', async () => { + const registry = { + cli: packument(100, { dependencies: { required: '2.0.0' } }), + required: packument(200), + }; + await expect( + calculateUnpackedSize('cli', '1.0.0', async (name: keyof typeof registry) => registry[name]), + ).rejects.toThrow('Cannot resolve required@2.0.0'); + }); +}); diff --git a/.github/scripts/measure-installed-cli.mjs b/.github/scripts/measure-installed-cli.mjs index 7218f9dc68..400a229935 100644 --- a/.github/scripts/measure-installed-cli.mjs +++ b/.github/scripts/measure-installed-cli.mjs @@ -1,21 +1,14 @@ import { execFile } from 'node:child_process'; -import { createHash } from 'node:crypto'; -import { copyFile, mkdir, mkdtemp, readFile, readdir, rm, writeFile } from 'node:fs/promises'; +import { copyFile, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from 'node:fs/promises'; import { createRequire } from 'node:module'; import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; import { parseArgs, promisify } from 'node:util'; const exec = promisify(execFile); -const { values } = parseArgs({ - options: { output: { type: 'string' }, 'packages-dir': { type: 'string' } }, -}); -if (process.platform !== 'linux' || process.arch !== 'x64' || !values.output) { - throw new Error('Run on Linux x64 with --output '); -} - const repo = process.cwd(); -const temporary = await mkdtemp(join(tmpdir(), 'vp-installed-size-')); +const { findMaxSatisfying } = createRequire(join(repo, 'packages/tools/package.json'))('verkit'); const nativeName = '@voidzero-dev/vite-plus-linux-x64-gnu'; const nativeFile = 'vite-plus.linux-x64-gnu.node'; const json = async (file) => JSON.parse(await readFile(file, 'utf8')); @@ -88,107 +81,196 @@ async function packReleasePackages(destination) { ); } -async function diskSize(directory, apparent = false) { - const { stdout } = await run('du', [ - '--summarize', - '--block-size=1', - ...(apparent ? ['--apparent-size'] : []), - directory, - ]); - return Number(stdout.split(/\s/)[0]); +// Same metric as npmx: sum dist.unpackedSize for the package and its +// production/optional dependency graph on linux-x64-glibc. Resolve npm aliases +// to their real package names so the bundled core package is included. +// https://github.com/npmx-dev/npmx.dev/blob/eafa727d13b1296938fb9f6d1ca0d8899f6bdf93/server/utils/dependency-resolver.ts +export function matchesPlatform(manifest) { + return Object.entries({ os: 'linux', cpu: 'x64', libc: 'glibc' }).every(([key, value]) => { + const allowed = manifest[key]; + if (!Array.isArray(allowed) || allowed.length === 0) { + return true; + } + return ( + !allowed.includes(`!${value}`) && + (allowed.every((item) => item.startsWith('!')) || allowed.includes(value)) + ); + }); } -try { - const packages = values['packages-dir'] - ? resolve(values['packages-dir']) - : join(temporary, 'packages'); - if (!values['packages-dir']) { - await mkdir(packages); - await packReleasePackages(packages); +function dependencySpec(name, range) { + if (!range.startsWith('npm:')) { + return { name, range }; } - const manifests = new Map(); - for (const file of await readdir(packages)) { - if (file.endsWith('.tgz')) { - const archive = join(packages, file); - const { stdout } = await run('tar', ['-xzOf', archive, 'package/package.json']); - const manifest = JSON.parse(stdout); - manifests.set(manifest.name, { manifest, archive }); + const spec = range.slice(4); + const separator = spec.lastIndexOf('@'); + return separator > 0 + ? { name: spec.slice(0, separator), range: spec.slice(separator + 1) } + : { name: spec, range: '*' }; +} + +export async function calculateUnpackedSize(name, version, loadPackument) { + const packages = new Map(); + const seen = new Set(); + let pending = [{ name, range: version, optional: false }]; + while (pending.length > 0) { + const next = new Map(); + for (const item of pending) { + seen.add(item.name); } + // Keep traversal deterministic while limiting concurrent registry requests. + for (let index = 0; index < pending.length; index += 20) { + const batch = pending.slice(index, index + 20); + const packuments = await Promise.all(batch.map((item) => loadPackument(item.name))); + for (const [offset, item] of batch.entries()) { + const packument = packuments[offset]; + const versions = Object.keys(packument.versions); + const resolved = versions.includes(item.range) + ? item.range + : (packument['dist-tags']?.[item.range] ?? findMaxSatisfying(versions, item.range)); + if (!resolved) { + // Locally packed previews declare optional binaries for other targets + // that this Linux-only job does not build or publish. + if (item.optional) { + continue; + } + throw new Error(`Cannot resolve ${item.name}@${item.range}`); + } + const manifest = packument.versions[resolved]; + if (!matchesPlatform(manifest)) { + continue; + } + packages.set(item.name, { + name: item.name, + version: resolved, + size: manifest.dist?.unpackedSize ?? 0, + missingSize: manifest.dist?.unpackedSize === undefined, + }); + const optional = manifest.optionalDependencies ?? {}; + for (const [dependency, range] of Object.entries({ + ...manifest.dependencies, + ...optional, + })) { + const spec = dependencySpec(dependency, range); + if (!seen.has(spec.name) && !next.has(spec.name)) { + next.set(spec.name, { ...spec, optional: Object.hasOwn(optional, dependency) }); + } + } + } + } + pending = [...next.values()]; + } + const self = packages.get(name); + if (!self) { + throw new Error(`Root package ${name}@${version} does not support Linux x64 glibc`); } - const cli = manifests.get('vite-plus'); - const core = manifests.get('@voidzero-dev/vite-plus-core'); - const native = manifests.get(nativeName); - if (!cli || !core || !native) { - throw new Error('Expected packed CLI, core, and Linux x64 native packages'); + const dependencies = [...packages.values()] + .filter((item) => item.name !== name) + .toSorted((a, b) => b.size - a.size || a.name.localeCompare(b.name)); + return { + package: name, + version, + platform: 'linux-x64-glibc', + selfSize: self.size, + totalSize: self.size + dependencies.reduce((total, dependency) => total + dependency.size, 0), + dependencyCount: dependencies.length, + dependencies, + }; +} + +// Tarball payload bytes match npm's unpackedSize. Directory allocation, tar +// headers, install scripts, and package-manager files do not contribute. +async function unpackedSize(directory) { + let size = 0; + for (const entry of await readdir(directory, { withFileTypes: true })) { + const path = join(directory, entry.name); + if (entry.isDirectory()) { + size += await unpackedSize(path); + } else if (entry.isFile()) { + size += (await stat(path)).size; + } } - const project = join(temporary, 'project'); - await mkdir(project); - await saveJson(join(project, 'package.json'), { - private: true, - dependencies: { 'vite-plus': cli.manifest.version }, + return size; +} + +async function main() { + const { values } = parseArgs({ + options: { output: { type: 'string' }, 'packages-dir': { type: 'string' } }, }); - // Use the repository's registry fixture so aliases and native dependencies - // resolve to this build. The npm cache lives outside the measured tree. - await run( - process.execPath, - [ - join(repo, 'packages/tools/src/local-npm-registry.ts'), - '--packages-dir', - packages, - '--', - 'npm', - 'install', - '--omit=dev', - '--legacy-peer-deps', - '--no-audit', - '--no-fund', - '--cache', - join(temporary, 'npm-cache'), - ], - project, - ); - const modules = join(project, 'node_modules'); - const installedCli = join(modules, 'vite-plus'); - const installedCore = await json(join(modules, 'vite/package.json')); - if ( - installedCore.name !== core.manifest.name || - installedCore.version !== core.manifest.version - ) { - throw new Error('The installation did not use the packed core package'); + if (process.platform !== 'linux' || process.arch !== 'x64' || !values.output) { + throw new Error('Run on Linux x64 with --output '); } - const { stdout: packedNative } = await exec( - 'tar', - ['-xzOf', native.archive, `package/${nativeFile}`], - { - encoding: 'buffer', - maxBuffer: 128 * 1024 ** 2, - }, - ); - const installedNative = await readFile(join(modules, nativeName, nativeFile)); - if (!installedNative.equals(packedNative)) { - throw new Error('The installation did not use the packed native addon'); + const temporary = await mkdtemp(join(tmpdir(), 'vp-unpacked-size-')); + try { + const directory = values['packages-dir'] + ? resolve(values['packages-dir']) + : join(temporary, 'packages'); + if (!values['packages-dir']) { + await mkdir(directory); + await packReleasePackages(directory); + } + const local = new Map(); + for (const file of await readdir(directory)) { + if (!file.endsWith('.tgz')) { + continue; + } + const extracted = await mkdtemp(join(temporary, 'unpacked-')); + const archive = join(directory, file); + await run('tar', ['-xzf', archive, '-C', extracted]); + const root = join(extracted, 'package'); + const manifest = await json(join(root, 'package.json')); + local.set(manifest.name, { + name: manifest.name, + versions: { + [manifest.version]: { ...manifest, dist: { unpackedSize: await unpackedSize(root) } }, + }, + }); + } + const cli = local.get('vite-plus'); + if (!cli || !local.has('@voidzero-dev/vite-plus-core') || !local.has(nativeName)) { + throw new Error('Expected packed CLI, core, and Linux x64 native packages'); + } + const cache = new Map(); + const load = (name) => { + if (local.has(name)) { + return local.get(name); + } + if (!cache.has(name)) { + cache.set( + name, + (async () => { + const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(name)}`, { + signal: AbortSignal.timeout(60_000), + }); + if (!response.ok) { + throw new Error(`Registry request failed for ${name}: ${response.status}`); + } + return response.json(); + })(), + ); + } + return cache.get(name); + }; + const measurement = await calculateUnpackedSize( + 'vite-plus', + Object.keys(cli.versions)[0], + load, + ); + for (const name of ['@voidzero-dev/vite-plus-core', nativeName]) { + if (!measurement.dependencies.some((dependency) => dependency.name === name)) { + throw new Error(`Unpacked total omitted ${name}`); + } + } + const result = await json(values.output); + delete result.artifacts.cliInstalled; + result.artifacts.cliUnpacked = measurement; + await saveJson(values.output, result); + console.log(JSON.stringify(measurement, null, 2)); + } finally { + await rm(temporary, { recursive: true, force: true }); } - const [raw, disk, cliRaw, cliDisk, npm] = await Promise.all([ - diskSize(modules, true), - diskSize(modules), - diskSize(installedCli, true), - diskSize(installedCli), - run('npm', ['--version']), - ]); - const result = await json(values.output); - result.artifacts.cliInstalled = { - raw, - disk, - cliRaw, - cliDisk, - dependenciesRaw: raw - cliRaw, - dependenciesDisk: disk - cliDisk, - nodeVersion: process.version, - npmVersion: npm.stdout.trim(), - nativeSha256: createHash('sha256').update(installedNative).digest('hex'), - }; - await saveJson(values.output, result); - console.log(JSON.stringify(result.artifacts.cliInstalled, null, 2)); -} finally { - await rm(temporary, { recursive: true, force: true }); +} + +if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { + await main(); } diff --git a/.github/workflows/vp-binary-size.yml b/.github/workflows/vp-binary-size.yml index d4d8cdd5e3..64f9eefada 100644 --- a/.github/workflows/vp-binary-size.yml +++ b/.github/workflows/vp-binary-size.yml @@ -114,7 +114,7 @@ jobs: steps: # Use the same measurement code for both revisions, including when the # merge base predates this script. Neither build job has write permissions. - - name: Check out installed-size measurement script + - name: Check out unpacked-size measurement script if: matrix.settings.platform == 'linux' uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: @@ -124,7 +124,7 @@ jobs: sparse-checkout-cone-mode: false persist-credentials: false - - name: Preserve installed-size measurement script + - name: Preserve unpacked-size measurement script if: matrix.settings.platform == 'linux' run: cp size-tools/.github/scripts/measure-installed-cli.mjs "$RUNNER_TEMP/measure-installed-cli.mjs" @@ -250,7 +250,7 @@ jobs: console.log(JSON.stringify(result, null, 2)); NODE - - name: Measure installed CLI with production dependencies + - name: Measure unpacked CLI with production dependencies if: matrix.settings.platform == 'linux' env: SIZE_FILE: ${{ runner.temp }}/native-size-${{ matrix.source }}-${{ matrix.settings.platform }}.json @@ -402,11 +402,22 @@ jobs: } return `${sign}${absolute.toLocaleString('en-US')} B`; }; - const formatDelta = (base, head) => { + const formatUnpackedSize = (bytes, includePlus = false) => { + const absolute = Math.abs(bytes); + const sign = bytes < 0 ? '-' : includePlus && bytes > 0 ? '+' : ''; + if (absolute >= 1_000_000) { + return `${sign}${(absolute / 1_000_000).toFixed(1)} MB`; + } + if (absolute >= 1_000) { + return `${sign}${(absolute / 1_000).toFixed(1)} kB`; + } + return `${sign}${absolute.toLocaleString('en-US')} B`; + }; + const formatDelta = (base, head, format = formatSize) => { const delta = head - base; const percent = base === 0 ? 0 : (delta / base) * 100; const sign = delta > 0 ? '+' : ''; - return `${formatSize(delta, true)} (${sign}${percent.toFixed(2)}%)`; + return `${format(delta, true)} (${sign}${percent.toFixed(2)}%)`; }; const shortSha = process.env.HEAD_SHA.slice(0, 7); @@ -430,7 +441,7 @@ jobs: }, ]; const rows = [ - `| Installed CLI including \`node_modules\` (Linux x64) | Disk usage | ${formatSize(baseLinux.artifacts.cliInstalled.disk)} | ${formatSize(headLinux.artifacts.cliInstalled.disk)} | ${formatDelta(baseLinux.artifacts.cliInstalled.disk, headLinux.artifacts.cliInstalled.disk)} |`, + `| CLI including dependencies (Linux x64 glibc) | Total unpacked | ${formatUnpackedSize(baseLinux.artifacts.cliUnpacked.totalSize)} (${baseLinux.artifacts.cliUnpacked.dependencyCount} deps) | ${formatUnpackedSize(headLinux.artifacts.cliUnpacked.totalSize)} (${headLinux.artifacts.cliUnpacked.dependencyCount} deps) | ${formatDelta(baseLinux.artifacts.cliUnpacked.totalSize, headLinux.artifacts.cliUnpacked.totalSize, formatUnpackedSize)} |`, ...distArtifacts.map( (artifact) => `| ${artifact.name} | Directory total | ${formatSize(artifact.baseRaw)} | ${formatSize(artifact.headRaw)} | ${formatDelta(artifact.baseRaw, artifact.headRaw)} |`, @@ -447,9 +458,9 @@ jobs: '', 'Final release artifacts built by the canonical `build-upstream` and `build-windows-cli` actions.', 'The dist rows use the Linux build. The core total excludes `.node` files to match the release artifact.', - 'Installed CLI totals include the packed `packages/cli`, core, and production dependencies in a clean Linux x64 `node_modules` tree.', - 'The installation uses `npm install --omit=dev --legacy-peer-deps`, including Linux native packages. It excludes development dependencies, optional peers, the standalone `vp` executable, Node.js, and package-manager caches.', - 'Disk usage measures installed space with `du --summarize --block-size=1`, equivalent to `du -sh` before rounding.', + 'The CLI total uses the [npmx unpacked-size metric](https://github.com/npmx-dev/npmx.dev/blob/eafa727d13b1296938fb9f6d1ca0d8899f6bdf93/server/utils/install-size.ts): package payload bytes plus registry `dist.unpackedSize` for dependencies, in decimal MB.', + 'It resolves production and optional dependencies for Linux x64 glibc, counts each package name once, and follows npm aliases so the bundled core is included. Dependency counts exclude the CLI itself.', + 'It excludes development and peer dependencies, filesystem allocation, install-time files, the standalone `vp` executable, Node.js, and package-manager caches.', '', '| Artifact | Format | Base | PR | Change |', '| --- | --- | ---: | ---: | ---: |', From 8bc932df389710f68b29511af9e0e036a8747c70 Mon Sep 17 00:00:00 2001 From: MK Date: Sun, 18 Oct 2026 17:06:31 +0800 Subject: [PATCH 09/11] chore: remove installed CLI size report tests --- .../__tests__/measure-installed-cli.spec.ts | 82 ------------------- 1 file changed, 82 deletions(-) delete mode 100644 .github/scripts/__tests__/measure-installed-cli.spec.ts diff --git a/.github/scripts/__tests__/measure-installed-cli.spec.ts b/.github/scripts/__tests__/measure-installed-cli.spec.ts deleted file mode 100644 index b7294c1dc3..0000000000 --- a/.github/scripts/__tests__/measure-installed-cli.spec.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { describe, expect, test } from 'vitest'; - -import { calculateUnpackedSize, matchesPlatform } from '../measure-installed-cli.mjs'; - -function packument(size: number, fields: Record = {}) { - return { versions: { '1.0.0': { dist: { unpackedSize: size }, ...fields } } }; -} - -describe('unpacked CLI size', () => { - test('includes aliased core, deduplicates shared dependencies, and filters native targets', async () => { - const registry = { - cli: packument(100, { - dependencies: { vite: 'npm:@scope/core@1.0.0', shared: '^1.0.0' }, - optionalDependencies: { linux: '1.0.0', musl: '1.0.0', darwin: '1.0.0' }, - devDependencies: { development: '1.0.0' }, - peerDependencies: { peer: '1.0.0' }, - }), - '@scope/core': packument(200, { - dependencies: { shared: '^1.0.0', css: '1.0.0' }, - optionalDependencies: { linux: '1.0.0' }, - }), - shared: { - versions: { - '1.0.0': { dist: { unpackedSize: 10 } }, - '1.1.0': { dist: { unpackedSize: 30 } }, - }, - }, - css: packument(40), - linux: packument(300, { os: ['linux'], cpu: ['x64'], libc: ['glibc'] }), - musl: packument(400, { os: ['linux'], cpu: ['x64'], libc: ['musl'] }), - darwin: packument(500, { os: ['darwin'], cpu: ['arm64'] }), - }; - const load = async (name: keyof typeof registry) => { - expect(registry[name]).toBeDefined(); - return registry[name]; - }; - const result = await calculateUnpackedSize('cli', '1.0.0', load); - expect(result.selfSize).toBe(100); - expect(result.totalSize).toBe(670); - expect(result.dependencyCount).toBe(4); - expect(result.dependencies.map((item: { name: string }) => item.name)).toEqual([ - 'linux', - '@scope/core', - 'css', - 'shared', - ]); - }); - - test('honors excluded platforms and unrestricted packages', () => { - expect(matchesPlatform({})).toBe(true); - expect(matchesPlatform({ os: ['!darwin'], cpu: ['!arm64'] })).toBe(true); - expect(matchesPlatform({ os: ['linux', '!linux'] })).toBe(false); - expect(matchesPlatform({ cpu: ['arm64'] })).toBe(false); - expect(matchesPlatform({ libc: ['!glibc'] })).toBe(false); - }); - - test('records missing registry sizes as zero, as npmx does', async () => { - const registry = { - cli: packument(100, { dependencies: { legacy: '1.0.0' } }), - legacy: { versions: { '1.0.0': {} } }, - }; - const result = await calculateUnpackedSize( - 'cli', - '1.0.0', - async (name: keyof typeof registry) => registry[name], - ); - expect(result.totalSize).toBe(100); - expect(result.dependencies).toEqual([ - { name: 'legacy', version: '1.0.0', size: 0, missingSize: true }, - ]); - }); - - test('fails if a required dependency cannot be resolved', async () => { - const registry = { - cli: packument(100, { dependencies: { required: '2.0.0' } }), - required: packument(200), - }; - await expect( - calculateUnpackedSize('cli', '1.0.0', async (name: keyof typeof registry) => registry[name]), - ).rejects.toThrow('Cannot resolve required@2.0.0'); - }); -}); From 5c21a9042e4206d6a0c6c49f003a3187e3aa9716 Mon Sep 17 00:00:00 2001 From: MK Date: Sun, 18 Oct 2026 17:07:55 +0800 Subject: [PATCH 10/11] chore: keep binary size analysis out of the PR --- .github/scripts/measure-installed-cli.mjs | 276 - .github/workflows/vp-binary-size.yml | 43 +- .typos.toml | 10 +- bench/binary-size/README.md | 414 -- bench/binary-size/analyze-macho.py | 93 - bench/binary-size/benchmark-cli.py | 249 - bench/binary-size/benchmark-napi.cjs | 56 - bench/binary-size/benchmark-rolldown.py | 296 - .../evidence/cli-profile-benchmark.json | 5604 ----------------- .../compression-benchmark-rounds.json | 497 -- .../evidence/macos-napi-symbol-estimates.json | 422 -- .../evidence/macos-vp-symbol-estimates.json | 392 -- .../evidence/rolldown-profile-benchmark.json | 978 --- bench/binary-size/evidence/vp-help-smoke.json | 26 - bench/binary-size/measure.cjs | 21 - .../embedded-artifact-compression.patch | 227 - .../prototypes/pm-cli-deduplication.patch | 80 - bench/binary-size/results.json | 611 -- 18 files changed, 5 insertions(+), 10290 deletions(-) delete mode 100644 .github/scripts/measure-installed-cli.mjs delete mode 100644 bench/binary-size/README.md delete mode 100644 bench/binary-size/analyze-macho.py delete mode 100644 bench/binary-size/benchmark-cli.py delete mode 100644 bench/binary-size/benchmark-napi.cjs delete mode 100644 bench/binary-size/benchmark-rolldown.py delete mode 100644 bench/binary-size/evidence/cli-profile-benchmark.json delete mode 100644 bench/binary-size/evidence/compression-benchmark-rounds.json delete mode 100644 bench/binary-size/evidence/macos-napi-symbol-estimates.json delete mode 100644 bench/binary-size/evidence/macos-vp-symbol-estimates.json delete mode 100644 bench/binary-size/evidence/rolldown-profile-benchmark.json delete mode 100644 bench/binary-size/evidence/vp-help-smoke.json delete mode 100644 bench/binary-size/measure.cjs delete mode 100644 bench/binary-size/prototypes/embedded-artifact-compression.patch delete mode 100644 bench/binary-size/prototypes/pm-cli-deduplication.patch delete mode 100644 bench/binary-size/results.json diff --git a/.github/scripts/measure-installed-cli.mjs b/.github/scripts/measure-installed-cli.mjs deleted file mode 100644 index 400a229935..0000000000 --- a/.github/scripts/measure-installed-cli.mjs +++ /dev/null @@ -1,276 +0,0 @@ -import { execFile } from 'node:child_process'; -import { copyFile, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from 'node:fs/promises'; -import { createRequire } from 'node:module'; -import { tmpdir } from 'node:os'; -import { join, resolve } from 'node:path'; -import { fileURLToPath } from 'node:url'; -import { parseArgs, promisify } from 'node:util'; - -const exec = promisify(execFile); -const repo = process.cwd(); -const { findMaxSatisfying } = createRequire(join(repo, 'packages/tools/package.json'))('verkit'); -const nativeName = '@voidzero-dev/vite-plus-linux-x64-gnu'; -const nativeFile = 'vite-plus.linux-x64-gnu.node'; -const json = async (file) => JSON.parse(await readFile(file, 'utf8')); -const saveJson = (file, value) => writeFile(file, `${JSON.stringify(value, null, 2)}\n`); -const run = (file, args, cwd = repo) => - exec(file, args, { cwd, timeout: 300_000, maxBuffer: 128 * 1024 ** 2 }); - -async function removeBindings(directory) { - for (const entry of await readdir(directory, { withFileTypes: true })) { - const file = join(directory, entry.name); - if (entry.isDirectory()) { - await removeBindings(file); - } else if (entry.name.endsWith('.node')) { - await rm(file); - } - } -} - -// Run only after the binary measurements. This prepares the disposable CI -// checkout like the release pack job, which ships native addons separately. -async function packReleasePackages(destination) { - const cliPath = join(repo, 'packages/cli/package.json'); - const corePath = join(repo, 'packages/core/package.json'); - const original = await json(cliPath); - const require = createRequire(cliPath); - const { parseTriple } = require('@napi-rs/cli'); - const artifacts = join(repo, 'packages/cli/artifacts'); - await mkdir(artifacts, { recursive: true }); - await copyFile(join(repo, 'packages/cli/binding', nativeFile), join(artifacts, nativeFile)); - - // This job builds only Linux x64. Use the normal release preparation for - // that target, then restore all platform declarations before packing. - await saveJson(cliPath, { - ...original, - napi: { ...original.napi, targets: ['x86_64-unknown-linux-gnu'] }, - }); - await run(process.execPath, ['packages/cli/publish-native-addons.ts', '--mode', 'pkg-pr-new']); - const pins = Object.fromEntries( - original.napi.targets.map((target) => [ - `${original.napi.packageName}-${parseTriple(target).platformArchABI}`, - original.version, - ]), - ); - const cli = await json(cliPath); - await saveJson(cliPath, { - ...cli, - napi: original.napi, - optionalDependencies: { ...cli.optionalDependencies, ...pins }, - }); - const core = await json(corePath); - await saveJson(corePath, { - ...core, - optionalDependencies: { ...core.optionalDependencies, ...pins }, - }); - await removeBindings(join(repo, 'packages/cli/binding')); - await removeBindings(join(repo, 'packages/core/dist')); - await run('pnpm', [ - '--filter', - 'vite-plus', - '--filter', - '@voidzero-dev/vite-plus-core', - 'pack', - '--pack-destination', - destination, - ]); - await run( - 'pnpm', - ['pack', '--pack-destination', destination], - join(repo, 'packages/cli/npm/linux-x64-gnu'), - ); -} - -// Same metric as npmx: sum dist.unpackedSize for the package and its -// production/optional dependency graph on linux-x64-glibc. Resolve npm aliases -// to their real package names so the bundled core package is included. -// https://github.com/npmx-dev/npmx.dev/blob/eafa727d13b1296938fb9f6d1ca0d8899f6bdf93/server/utils/dependency-resolver.ts -export function matchesPlatform(manifest) { - return Object.entries({ os: 'linux', cpu: 'x64', libc: 'glibc' }).every(([key, value]) => { - const allowed = manifest[key]; - if (!Array.isArray(allowed) || allowed.length === 0) { - return true; - } - return ( - !allowed.includes(`!${value}`) && - (allowed.every((item) => item.startsWith('!')) || allowed.includes(value)) - ); - }); -} - -function dependencySpec(name, range) { - if (!range.startsWith('npm:')) { - return { name, range }; - } - const spec = range.slice(4); - const separator = spec.lastIndexOf('@'); - return separator > 0 - ? { name: spec.slice(0, separator), range: spec.slice(separator + 1) } - : { name: spec, range: '*' }; -} - -export async function calculateUnpackedSize(name, version, loadPackument) { - const packages = new Map(); - const seen = new Set(); - let pending = [{ name, range: version, optional: false }]; - while (pending.length > 0) { - const next = new Map(); - for (const item of pending) { - seen.add(item.name); - } - // Keep traversal deterministic while limiting concurrent registry requests. - for (let index = 0; index < pending.length; index += 20) { - const batch = pending.slice(index, index + 20); - const packuments = await Promise.all(batch.map((item) => loadPackument(item.name))); - for (const [offset, item] of batch.entries()) { - const packument = packuments[offset]; - const versions = Object.keys(packument.versions); - const resolved = versions.includes(item.range) - ? item.range - : (packument['dist-tags']?.[item.range] ?? findMaxSatisfying(versions, item.range)); - if (!resolved) { - // Locally packed previews declare optional binaries for other targets - // that this Linux-only job does not build or publish. - if (item.optional) { - continue; - } - throw new Error(`Cannot resolve ${item.name}@${item.range}`); - } - const manifest = packument.versions[resolved]; - if (!matchesPlatform(manifest)) { - continue; - } - packages.set(item.name, { - name: item.name, - version: resolved, - size: manifest.dist?.unpackedSize ?? 0, - missingSize: manifest.dist?.unpackedSize === undefined, - }); - const optional = manifest.optionalDependencies ?? {}; - for (const [dependency, range] of Object.entries({ - ...manifest.dependencies, - ...optional, - })) { - const spec = dependencySpec(dependency, range); - if (!seen.has(spec.name) && !next.has(spec.name)) { - next.set(spec.name, { ...spec, optional: Object.hasOwn(optional, dependency) }); - } - } - } - } - pending = [...next.values()]; - } - const self = packages.get(name); - if (!self) { - throw new Error(`Root package ${name}@${version} does not support Linux x64 glibc`); - } - const dependencies = [...packages.values()] - .filter((item) => item.name !== name) - .toSorted((a, b) => b.size - a.size || a.name.localeCompare(b.name)); - return { - package: name, - version, - platform: 'linux-x64-glibc', - selfSize: self.size, - totalSize: self.size + dependencies.reduce((total, dependency) => total + dependency.size, 0), - dependencyCount: dependencies.length, - dependencies, - }; -} - -// Tarball payload bytes match npm's unpackedSize. Directory allocation, tar -// headers, install scripts, and package-manager files do not contribute. -async function unpackedSize(directory) { - let size = 0; - for (const entry of await readdir(directory, { withFileTypes: true })) { - const path = join(directory, entry.name); - if (entry.isDirectory()) { - size += await unpackedSize(path); - } else if (entry.isFile()) { - size += (await stat(path)).size; - } - } - return size; -} - -async function main() { - const { values } = parseArgs({ - options: { output: { type: 'string' }, 'packages-dir': { type: 'string' } }, - }); - if (process.platform !== 'linux' || process.arch !== 'x64' || !values.output) { - throw new Error('Run on Linux x64 with --output '); - } - const temporary = await mkdtemp(join(tmpdir(), 'vp-unpacked-size-')); - try { - const directory = values['packages-dir'] - ? resolve(values['packages-dir']) - : join(temporary, 'packages'); - if (!values['packages-dir']) { - await mkdir(directory); - await packReleasePackages(directory); - } - const local = new Map(); - for (const file of await readdir(directory)) { - if (!file.endsWith('.tgz')) { - continue; - } - const extracted = await mkdtemp(join(temporary, 'unpacked-')); - const archive = join(directory, file); - await run('tar', ['-xzf', archive, '-C', extracted]); - const root = join(extracted, 'package'); - const manifest = await json(join(root, 'package.json')); - local.set(manifest.name, { - name: manifest.name, - versions: { - [manifest.version]: { ...manifest, dist: { unpackedSize: await unpackedSize(root) } }, - }, - }); - } - const cli = local.get('vite-plus'); - if (!cli || !local.has('@voidzero-dev/vite-plus-core') || !local.has(nativeName)) { - throw new Error('Expected packed CLI, core, and Linux x64 native packages'); - } - const cache = new Map(); - const load = (name) => { - if (local.has(name)) { - return local.get(name); - } - if (!cache.has(name)) { - cache.set( - name, - (async () => { - const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(name)}`, { - signal: AbortSignal.timeout(60_000), - }); - if (!response.ok) { - throw new Error(`Registry request failed for ${name}: ${response.status}`); - } - return response.json(); - })(), - ); - } - return cache.get(name); - }; - const measurement = await calculateUnpackedSize( - 'vite-plus', - Object.keys(cli.versions)[0], - load, - ); - for (const name of ['@voidzero-dev/vite-plus-core', nativeName]) { - if (!measurement.dependencies.some((dependency) => dependency.name === name)) { - throw new Error(`Unpacked total omitted ${name}`); - } - } - const result = await json(values.output); - delete result.artifacts.cliInstalled; - result.artifacts.cliUnpacked = measurement; - await saveJson(values.output, result); - console.log(JSON.stringify(measurement, null, 2)); - } finally { - await rm(temporary, { recursive: true, force: true }); - } -} - -if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { - await main(); -} diff --git a/.github/workflows/vp-binary-size.yml b/.github/workflows/vp-binary-size.yml index 64f9eefada..6efb18a2a7 100644 --- a/.github/workflows/vp-binary-size.yml +++ b/.github/workflows/vp-binary-size.yml @@ -47,7 +47,7 @@ jobs: run: | MERGE_BASE=$(git merge-base "$BASE_SHA" "$HEAD_SHA") echo "sha=$MERGE_BASE" >> "$GITHUB_OUTPUT" - if git diff --quiet "$MERGE_BASE" "$HEAD_SHA" -- .github/workflows/vp-binary-size.yml .github/scripts/measure-installed-cli.mjs; then + if git diff --quiet "$MERGE_BASE" "$HEAD_SHA" -- .github/workflows/vp-binary-size.yml; then echo "workflow_changed=false" >> "$GITHUB_OUTPUT" else echo "workflow_changed=true" >> "$GITHUB_OUTPUT" @@ -112,22 +112,6 @@ jobs: RELEASE_BUILD: 'true' VERSION: '0.0.0-native-size' steps: - # Use the same measurement code for both revisions, including when the - # merge base predates this script. Neither build job has write permissions. - - name: Check out unpacked-size measurement script - if: matrix.settings.platform == 'linux' - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - ref: ${{ github.event.pull_request.head.sha }} - path: size-tools - sparse-checkout: .github/scripts/measure-installed-cli.mjs - sparse-checkout-cone-mode: false - persist-credentials: false - - - name: Preserve unpacked-size measurement script - if: matrix.settings.platform == 'linux' - run: cp size-tools/.github/scripts/measure-installed-cli.mjs "$RUNNER_TEMP/measure-installed-cli.mjs" - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ matrix.source == 'base' && needs.inputs.outputs.merge_base_sha || github.event.pull_request.head.sha }} @@ -250,12 +234,6 @@ jobs: console.log(JSON.stringify(result, null, 2)); NODE - - name: Measure unpacked CLI with production dependencies - if: matrix.settings.platform == 'linux' - env: - SIZE_FILE: ${{ runner.temp }}/native-size-${{ matrix.source }}-${{ matrix.settings.platform }}.json - run: node "$RUNNER_TEMP/measure-installed-cli.mjs" --output "$SIZE_FILE" - - name: Upload size measurements uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: @@ -402,22 +380,11 @@ jobs: } return `${sign}${absolute.toLocaleString('en-US')} B`; }; - const formatUnpackedSize = (bytes, includePlus = false) => { - const absolute = Math.abs(bytes); - const sign = bytes < 0 ? '-' : includePlus && bytes > 0 ? '+' : ''; - if (absolute >= 1_000_000) { - return `${sign}${(absolute / 1_000_000).toFixed(1)} MB`; - } - if (absolute >= 1_000) { - return `${sign}${(absolute / 1_000).toFixed(1)} kB`; - } - return `${sign}${absolute.toLocaleString('en-US')} B`; - }; - const formatDelta = (base, head, format = formatSize) => { + const formatDelta = (base, head) => { const delta = head - base; const percent = base === 0 ? 0 : (delta / base) * 100; const sign = delta > 0 ? '+' : ''; - return `${format(delta, true)} (${sign}${percent.toFixed(2)}%)`; + return `${formatSize(delta, true)} (${sign}${percent.toFixed(2)}%)`; }; const shortSha = process.env.HEAD_SHA.slice(0, 7); @@ -441,7 +408,6 @@ jobs: }, ]; const rows = [ - `| CLI including dependencies (Linux x64 glibc) | Total unpacked | ${formatUnpackedSize(baseLinux.artifacts.cliUnpacked.totalSize)} (${baseLinux.artifacts.cliUnpacked.dependencyCount} deps) | ${formatUnpackedSize(headLinux.artifacts.cliUnpacked.totalSize)} (${headLinux.artifacts.cliUnpacked.dependencyCount} deps) | ${formatDelta(baseLinux.artifacts.cliUnpacked.totalSize, headLinux.artifacts.cliUnpacked.totalSize, formatUnpackedSize)} |`, ...distArtifacts.map( (artifact) => `| ${artifact.name} | Directory total | ${formatSize(artifact.baseRaw)} | ${formatSize(artifact.headRaw)} | ${formatDelta(artifact.baseRaw, artifact.headRaw)} |`, @@ -458,9 +424,6 @@ jobs: '', 'Final release artifacts built by the canonical `build-upstream` and `build-windows-cli` actions.', 'The dist rows use the Linux build. The core total excludes `.node` files to match the release artifact.', - 'The CLI total uses the [npmx unpacked-size metric](https://github.com/npmx-dev/npmx.dev/blob/eafa727d13b1296938fb9f6d1ca0d8899f6bdf93/server/utils/install-size.ts): package payload bytes plus registry `dist.unpackedSize` for dependencies, in decimal MB.', - 'It resolves production and optional dependencies for Linux x64 glibc, counts each package name once, and follows npm aliases so the bundled core is included. Dependency counts exclude the CLI itself.', - 'It excludes development and peer dependencies, filesystem allocation, install-time files, the standalone `vp` executable, Node.js, and package-manager caches.', '', '| Artifact | Format | Base | PR | Change |', '| --- | --- | ---: | ---: | ---: |', diff --git a/.typos.toml b/.typos.toml index 11d609d1d2..0f1320c1d4 100644 --- a/.typos.toml +++ b/.typos.toml @@ -1,10 +1,6 @@ [default] -extend-ignore-re = [ - # Vitest v4 used this misspelled directory; the migrator must recognize it. - '\.vitest-attachements\b', - # Git patch metadata contains abbreviated object hashes, not prose. - '(?m)^index [0-9a-f]+\.\.[0-9a-f]+(?: [0-7]{6})?$', -] +# Vitest v4 used this misspelled directory; the migrator must recognize it. +extend-ignore-re = ['\.vitest-attachements\b'] [default.extend-words] pn = "pn" # pnpm short alias @@ -22,8 +18,6 @@ PnP = "PnP" [files] extend-exclude = [ - # Generated symbol names must match the compiled binaries. - "bench/binary-size/evidence/*-symbol-estimates.json", "crates/fspy_detours_sys/detours", "crates/fspy_detours_sys/src/generated_bindings.rs", "packages/cli/src/oxfmt-config.ts", diff --git a/bench/binary-size/README.md b/bench/binary-size/README.md deleted file mode 100644 index 9a8476580f..0000000000 --- a/bench/binary-size/README.md +++ /dev/null @@ -1,414 +0,0 @@ -# Binary size analysis - -The target is a 50% reduction for **each binary individually**. The measured -changes below do not yet meet that target. The most useful results so far are -size-oriented compilation for the standalone `vp` executable and compression of -embedded helper executables for the macOS NAPI library. Applying size-oriented -compilation to the entire NAPI library causes a substantial performance loss. - -This draft applies `opt-level = "z"` to the standalone CLI build steps in -`build-upstream` and `build-windows-cli`. These are the compiler-only experiments -below: 37.9% on macOS, 29.7% on Linux, and 37.4% on Windows. Rebuilt std, -package-manager changes, and helper compression remain separate prototypes. -The preview workflow also compares all eight targets with the latest stable -release, using release archives for executables and matching npm versions for -NAPI. It reports raw sizes and gzip sizes separately. - -The source baseline is `006e9700a`, which merges PR 1783. The -[reference size report](https://github.com/voidzero-dev/vite-plus/pull/1783#issuecomment-5308800690) -is for PR head `1438b2b`, updated on 2026-10-16. Raw bytes and gzip bytes are -separate metrics. Local experiments use matched local baselines; local builds -are not byte-identical to the CI artifacts. - -## Release baselines and targets - -These are the PR-head measurements downloaded from the reference workflow. -MiB means 1,048,576 bytes; KiB means 1,024 bytes. - -| Artifact | Release size | 50% target | -| ---------------------- | -----------: | ---------: | -| Linux x64 `vp` | 10.21 MiB | 5.11 MiB | -| Linux x64 NAPI | 34.53 MiB | 17.27 MiB | -| macOS ARM64 `vp` | 7.62 MiB | 3.81 MiB | -| macOS ARM64 NAPI | 41.52 MiB | 20.76 MiB | -| Windows x64 `vp` | 8.29 MiB | 4.14 MiB | -| Windows x64 NAPI | 30.60 MiB | 15.30 MiB | -| Windows x64 installer | 3.63 MiB | 1.82 MiB | -| Windows x64 trampoline | 13.50 KiB | 6.75 KiB | - -The release profile already uses `opt-level = 3`, full LTO, one codegen unit, -symbol stripping, and panic aborts. Turning those existing settings on cannot -produce additional savings. See [Cargo.toml](../../Cargo.toml). - -In the matched macOS baseline, `vp` has 6.02 MiB of machine code and 1.01 MiB of -read-only constants. NAPI has 19.98 MiB of machine code and 19.85 MiB of read-only -constants. This explains the different priorities: code generation matters most -for `vp`, while embedded data is a large immediate opportunity for macOS NAPI. -The [symbol estimates](evidence/) include the complete section measurements. - -## Measured compiler and source experiments - -| Artifact and change | Baseline bytes | Candidate bytes | Reduction | -| ---------------------------------------------------------------- | -------------: | --------------: | --------: | -| macOS `vp`, `opt-level = "z"` | 7,963,056 | 4,943,936 | 37.9% | -| macOS `vp`, `"z"` plus rebuilding std for size | 7,963,056 | 4,631,296 | 41.8% | -| macOS `vp`, above plus package-manager prototype | 7,963,056 | 4,614,576 | 42.1% | -| Linux `vp`, `opt-level = "z"` | 10,667,136 | 7,500,528 | 29.7% | -| Linux `vp`, `"z"` plus rebuilding std for size | 10,667,136 | 7,229,544 | 32.2% | -| Windows `vp`, `opt-level = "z"` | 8,688,640 | 5,436,928 | 37.4% | -| Windows installer, entire dependency graph at `"z"` | 3,808,256 | 2,947,072 | 22.6% | -| macOS NAPI, `opt-level = "z"` | 43,305,840 | 31,779,504 | 26.6% | -| macOS NAPI, compressed embedded helpers, original optimization | 43,305,840 | 32,980,192 | 23.8% | -| Linux NAPI, compressed embedded helpers, original optimization | 35,672,200 | 35,016,840 | 1.8% | -| Windows NAPI, compressed embedded helpers, original optimization | 32,076,288 | 31,751,680 | 1.0% | - -Rebuilding std retains the `backtrace` and `panic-unwind` std features and adds -`optimize_for_size`. The executable still uses `panic = "abort"`. None of these -experiments suppresses `Debug` output or uses immediate aborts that bypass the -panic hook. - -The compressed NAPI library's gzip size falls from 17,932,754 to 16,362,251 bytes, -an 8.8% reduction. Raw installed-size savings must not be presented as equivalent -download savings. - -Four native help command outputs and exit codes match between the original `vp`, -the `"z"` build, the build with recompiled std, and the package-manager prototype. -These checks do not establish -full CLI equivalence or package-manager performance. - -Linux and Windows artifacts were cross-built and measured, but were not executed -on their target platforms. Linux builds use `cargo zigbuild` with -`RUSTFLAGS='--cfg tokio_unstable'` to omit the GNU linker warning flag that Zig -rejects. Windows builds use `cargo xwin` with Homebrew LLVM on `PATH`. - -### Standalone CLI performance - -The CLI timing comparison uses fresh `opt-level=3` and `opt-level="z"` release -builds from commit `a4e9c5932`, with the same pinned toolchain, target, features, -and remaining profile settings. Measurements run on an Apple M4 Max with macOS -ARM64. These are separate from the earlier NAPI experiments below. - -Aggregate median wall times: - -| Workload | `3` | `z` | Extra time | Change | -| --------------------------------------------------- | -----------: | -----------: | ---------: | -----: | -| `vp --help` | 4.082 ms | 4.156 ms | 0.074 ms | +1.8% | -| `vp env current node --json` | 4.350 ms | 4.497 ms | 0.147 ms | +3.4% | -| Same command, 20 directories below the project root | 4.953 ms | 5.130 ms | 0.178 ms | +3.6% | -| `vp env which node` | 4.361 ms | 4.496 ms | 0.134 ms | +3.1% | -| `vp node -e ''` | 32.960 ms | 33.063 ms | 0.103 ms | +0.3% | -| `vp env exec npm --version` | 70.226 ms | 70.221 ms | -0.004 ms | -0.01% | -| `vp env install 22.13.1`, already installed | 4.231 ms | 4.374 ms | 0.143 ms | +3.4% | -| Same install, runtime absent, loopback mirror | 1,067.934 ms | 1,127.105 ms | 59.171 ms | +5.5% | - -The three fresh-install rounds show slowdowns of 7.2%, 6.9%, and 4.8%. -Node startup changes by less than 0.5% in every round; npm startup differences -change sign and remain within 0.2%. Short environment commands consistently add -about 0.1–0.2 ms. These builds reduce the executable from 7,991,312 to 4,954,496 -bytes (38.0%). The complete samples, CPU times, output hashes, and binary hashes -are in [the CLI timing evidence](evidence/cli-profile-benchmark.json). - -[benchmark-cli.py](benchmark-cli.py) runs each command in a new process with an -isolated `VP_HOME` and setup markers. Each round uses three warmups per variant -and balanced, randomized adjacent pairs. Ordinary commands have 120 pairs per -round; fresh installs have 10. There are three rounds. Wall times include process -launch and output capture. OS filesystem caches remain warm. - -The installation workload uses the official Node.js `22.13.1` archive and signed -checksum file served from memory over loopback HTTP. It includes signature and -checksum verification, archive extraction, and installation. Removal of the prior -installation and the resulting binary's hash check are outside the timer. No -internet transfer is timed. Other workloads make no mirror requests. - -The runner checks successful exit codes and matching stdout/stderr for every -invocation, and checks the installed Node.js binary after every fresh install. -These CLI-only measurements do not cover cold filesystem caches, Linux, Windows, -application builds, or all package-manager operations. The next comparison -measures full `vp build` commands through the bundled Rolldown. - -### Rolldown build performance - -[benchmark-rolldown.py](benchmark-rolldown.py) compares the same standalone -executables through `vp build`. **Both executables retain fat LTO.** Only the -standalone executable changes from `opt-level=3` to `opt-level="z"`. Both use the -same preview JavaScript packages and NAPI addon from commit `a4e9c5932`. The addon -contains Rolldown and Oxc and retains `opt-level=3` with fat LTO. - -The benchmark runs on Apple M4 Max with macOS ARM64, Node.js `22.23.2`, Vite -`8.3.4`, and Rolldown `1.2.14`. It includes these workloads: - -- `three10x-bundle`: ten separate copies of the three.js `r108` source, following - [Rolldown's benchmark input](https://github.com/rolldown/rolldown/blob/c9a8cda42bc0fdd84c7b4b4e6d7f95ae83e8b5f7/scripts/misc/setup-benchmark-input/threejs-10x.js). - All ten namespaces remain in the output. The build processes 3,693 modules. -- `three10x-minify-sourcemap`: the same input with Oxc minification and external - source maps. -- `typescript-code-split-minify-sourcemap`: 2,000 generated TypeScript modules, - 24,000 used functions, optional chaining, nullish coalescing, and unused - exports. The build targets ES2015, produces 20 dynamic entry chunks, and uses - Oxc minification and external source maps. Including entry points and helpers, - it processes 2,025 modules and produces 22 JavaScript chunks. - -Median wall times across 60 samples per variant per workload: - -| Workload | `3` | `z` | Change | 95% interval for change | -| ---------------------------------------- | --------: | --------: | -----: | ----------------------: | -| `three10x-bundle` | 525.01 ms | 528.21 ms | +0.61% | -0.37% to +1.54% | -| `three10x-minify-sourcemap` | 660.91 ms | 665.47 ms | +0.69% | -0.70% to +1.02% | -| `typescript-code-split-minify-sourcemap` | 401.94 ms | 401.38 ms | -0.14% | -0.85% to +0.64% | - -No workload shows a consistent slowdown. Differences change sign across rounds, -and all three confidence intervals include zero. The intervals use 10,000 -bootstrap resamples of adjacent pairs within each round. They describe sampling -uncertainty on this host, not performance guarantees for other projects or hosts. - -Each workload has three rounds of 20 balanced, randomized adjacent pairs, with -three warmups per variant in each round. Each sample starts a new `vp build` -process. The timer includes CLI and Node startup, bundling, configured transforms, -and output writes. Output removal and hash checks occur outside the timer. OS -filesystem caches stay warm; no task cache or persistent bundler process is used. -Compressed-size reporting is disabled for both variants. - -Untimed probe builds confirm the Rolldown version, module and chunk counts, -Node executable, and loaded native addon. Both variants load the same addon with -SHA-256 `d55572198e5ea18cb1d3f71a014b9b48c83fae8ad110b7ef139bb315d0e07e3b`. -Every build must succeed and produce identical output paths and bytes, including -source maps. The [evidence](evidence/rolldown-profile-benchmark.json) contains all -samples, execution order, artifact hashes, and confidence intervals. - -To reproduce, prepare a release build of `packages/cli` and its core dependency, -then build both standalone profiles from the same commit. Obtain three.js `r108` -at commit `7e0a78beb9317e580d7fa4da9b5b12be051c6feb` and run: - -```sh -python3 bench/binary-size/benchmark-rolldown.py \ - --baseline /path/to/opt-level-3/vp \ - --candidate /path/to/opt-level-z/vp \ - --binary-source-commit \ - --cli packages/cli \ - --node /path/to/node \ - --three-src /path/to/three.js/src \ - --output bench/binary-size/evidence/rolldown-profile-benchmark.json -``` - -These results compare the profiles shipped by this PR. They do not measure -disabling fat LTO, changing the NAPI optimization level, cold caches, or Linux -and Windows build performance. - -### NAPI performance - -The synthetic benchmark uses 1,500 exported functions, TypeScript transformation -to ES2015 with source maps, minification with source maps, and an invalid-syntax -case. Output hashes match across the builds. - -Global `"z"` optimization makes the initial parse test about 1.9 times as slow, -and transform and minify about 2.8 times as slow. Do not apply it globally to the -performance-sensitive library merely to meet the byte target. - -Repeated, interleaved runs of the original and compressed libraries give median -times of approximately 4.36/4.38 ms for parsing, 2.13/2.15 ms for transformation, -and 2.07/2.05 ms for minification. These small kernels show no comparable slowdown -from compression. Application build and task-cache benchmarks remain necessary. -First-use extraction latency and memory use also need measurement; the existing -materialized-file fast path does not decompress the helpers again. - -## Optimization priorities - -Start with a dedicated size profile for the standalone CLI and installer, and -extend the command latency and installation measurements to Linux and Windows -before release. Pursue embedded -artifact compression independently in Vite Task. Keep Oxc and Rolldown at their -original optimization level until a selective profile passes representative -build benchmarks. Do not add the profile and compression percentages: a combined -NAPI variant has not been measured. - -These experiments do not establish a route to 50% for every binary. The remaining -gap requires source or dependency changes with a measurable size budget. The -parser and verification audits below are investigation targets, not promised -savings. - -This budget uses matched local baselines and the candidates above. For NAPI it -uses compression at the original optimization level, excluding the global -`"z"` profile because of its measured slowdown. No candidate is release-ready. - -| Artifact | Candidate bytes | Local 50% target | Additional bytes to remove | -| ---------------------- | --------------: | ---------------: | -------------------------: | -| macOS ARM64 `vp` | 4,614,576 | 3,981,528 | 633,048 | -| Linux x64 `vp` | 7,229,544 | 5,333,568 | 1,895,976 | -| Windows x64 `vp` | 5,436,928 | 4,344,320 | 1,092,608 | -| macOS ARM64 NAPI | 32,980,192 | 21,652,920 | 11,327,272 | -| Linux x64 NAPI | 35,016,840 | 17,836,100 | 17,180,740 | -| Windows x64 NAPI | 31,751,680 | 16,038,144 | 15,713,536 | -| Windows x64 installer | 2,947,072 | 1,904,128 | 1,042,944 | -| Windows x64 trampoline | 13,824 | 6,912 | 6,912 | - -### Compress embedded helpers - -Vite Task's `fspy` embeds macOS copies of `coreutils` and Oils, totaling 14,141,272 -bytes. It also embeds a preload library, and `vt` embeds a NAPI client library. -The original materialization macro includes their raw bytes in the host library. - -The prototype in the sibling `binary-size-vite-task` worktree compresses these -artifacts at compile time with zstd level 19 when compression reduces their size. -Materialization decodes directly into the existing temporary file before atomic -publication. The filename hash still identifies the original bytes, so existing -extracted files remain reusable and helpers remain available offline. - -The final NAPI measurement above includes decoder overhead. The prototype passes -three focused compression tests, two shebang tests, one spawn test, and targeted -Clippy checks. The tests cover byte preservation, cache filename/reuse, executable -permissions on Unix, and failure without publication for corrupt compressed data. -Linux and Windows x64 NAPI cross builds also pass. Their raw savings are only -655,360 and 324,608 bytes respectively; gzip savings are about 0.4% and 0.2%. -Cross-platform runtime integration remains to be verified. Most of the measured -benefit comes from macOS-only helpers. - -### Reduce duplication in package-manager dispatch - -Symbol attribution places approximately 0.66 MiB of the standalone executable's -machine code under `vp_pm_cli`, in addition to the global CLI's own code and Clap. -The prototype in `../binary-size-pm-cli` extracts package-manager environment -setup from generic `resolve_for_manager` into one shared function. It also -constructs fixed release-version rules at compile time and borrows their literal -text. Prerelease version rules retain their parsing behavior. - -Together these changes save 65,664 bytes (0.8%) under the original release profile. -After `"z"` and size-oriented std, they save only another 16,720 bytes (0.4% of -that candidate). The prototype passes 724 resolution tests, 10 macro tests, and -targeted Clippy checks. This is a small improvement, not a path to 50% by itself. - -See [resolution/resolve.rs](../../crates/vp_pm_cli/src/resolution/resolve.rs), -[resolution/support.rs](../../crates/vp_pm_cli/src/resolution/support.rs), and -[the macro implementation](../../crates/vp_pm_cli_macros/src/lib.rs). -The measured delta above is the relevant result; symbol attribution is not an -additive size budget under LTO. - -### Consolidate migration parsers - -The NAPI dependency graph includes Oxc and tree-sitter grammars for Bash, -TypeScript, and TSX. TypeScript and TSX each contribute a generated parser object -of about 1.4 MB before final linking. Most migration call sites explicitly select -TypeScript or Bash, while `SupportLang` retains the TSX variant too. - -First determine whether language specialization can remove unused grammar -reachability without changing supported migration input. A larger opportunity is -to implement migration operations on the Oxc AST that is already shipped. -Preserve JSX/TSX parsing and rule semantics; simply disabling a supported language -is not an equivalent optimization. See -[vp_migration](../../crates/vp_migration/src/ast_grep.rs) and -[its manifest](../../crates/vp_migration/Cargo.toml). - -### Audit verification and networking dependencies - -PGP, TLS, HTTP, and their generic formatting/parsing code are meaningful parts of -the standalone executable. Audit duplicate algorithms, feature selection, and -unneeded protocol paths. Keep Node release signature verification, supported key -types, revocation behavior, and existing proxy/TLS behavior intact. PGP signature -verification must not be disabled to claim a smaller binary. - -### Treat the installer and trampoline separately - -The installer already has a per-package `"z"` override. Optimizing its dependencies -for size too reduces the complete executable by 22.6%. Reaching 50% still requires -another 1,042,944 bytes of savings relative to this candidate. Inspect the -networking, archive, and error-reporting code before changing behavior. - -The trampoline already has a standalone size-oriented profile, recompiled std, -immediate aborts, and a raw Win32 entry point. It needs a PE section/import and -generated-code audit. The cross build reproduces its 13,824-byte baseline, with -8,126 bytes of `.text`, 3,028 bytes of `.rdata`, and 23 Win32 imports. Its 6.75 KiB -target is not supported by the larger CLI's compiler results. No trampoline -reduction has been demonstrated. See [vp_trampoline](../../crates/vp_trampoline/Cargo.toml). - -## Reproduce the measurements - -Build the two top-level packages separately. Building them in the same Cargo -invocation unifies dependency features and changes the resulting baseline. -Use the repository's pinned nightly and Rolldown revision. Build outputs and logs -from this work are under `tmp/binary-size/`. - -```sh -cargo build --locked --release --target aarch64-apple-darwin \ - -p vp_global_cli --config 'profile.release.strip=false' - -cargo build --locked --release --target aarch64-apple-darwin \ - -p vite-plus-cli --features rolldown \ - --config 'profile.release.strip=false' \ - --config 'profile.release.package.fspy_preload_unix.strip="symbols"' \ - --config 'profile.release.package.vt_client_napi.strip="symbols"' -``` - -Preserve each artifact before the next build. Add -`--config 'profile.release.opt-level="z"'` for the size profile experiment. -For the std experiment, also add -`-Z build-std=std,panic_abort -Z build-std-features=backtrace,panic-unwind,optimize_for_size`. - -Keep unstripped copies for attribution. Compare release-size copies after `strip` -for executables or `strip -x` for NAPI, then ad-hoc sign the Mach-O copies with -`codesign --force --sign -`. Keep symbols in embedded helper artifacts stripped -even when the outer library is unstripped. - -```sh -node bench/binary-size/measure.cjs path/to/vp path/to/vite-plus.node -node bench/binary-size/benchmark-napi.cjs path/to/vite-plus.node -python3 bench/binary-size/analyze-macho.py path/to/unstripped-binary \ - --cxxfilt /opt/homebrew/opt/llvm/bin/llvm-cxxfilt -``` - -For the CLI timing comparison, build with the default symbol stripping and set -`CARGO_PROFILE_RELEASE_OPT_LEVEL` to `3` and then `z`, saving each executable -before the next build. The runner copies the binaries into temporary directories -and creates their setup markers. Prepare the official archive and signed -checksum file, then run: - -```sh -mkdir -p tmp/binary-size/cli-speed/mirror/v22.13.1 -curl --fail --location https://nodejs.org/dist/v22.13.1/node-v22.13.1-darwin-arm64.tar.gz \ - -o tmp/binary-size/cli-speed/mirror/v22.13.1/node-v22.13.1-darwin-arm64.tar.gz -curl --fail --location https://nodejs.org/dist/v22.13.1/SHASUMS256.txt.asc \ - -o tmp/binary-size/cli-speed/mirror/v22.13.1/SHASUMS256.txt.asc -python3 bench/binary-size/benchmark-cli.py \ - --baseline path/to/opt-3/vp --candidate path/to/opt-z/vp \ - --mirror tmp/binary-size/cli-speed/mirror \ - --output tmp/binary-size/cli-speed/results.json -``` - -The Mach-O analyzer estimates symbol extents from the next symbol boundary. -Anonymous constants can follow a named symbol, so a large constant extent is not -proof that the named item owns every byte. Section sizes and final artifact sizes -are stronger evidence for savings. - -Use an isolated `VP_HOME` and put `.vp-setup-complete` beside test `vp` binaries -before running command smoke tests. Otherwise even `--version` can trigger the -CLI's first-start installation. An early check in this investigation triggered -setup in `~/.vite-plus`; later checks used an isolated home. The prior home state -was not known, so those installed files were not automatically removed. - -## Prototype worktrees - -The report lives on `perf/binary-size-analysis`. The draft changes the CLI build -steps, while the workspace Cargo profiles remain unchanged. Two sibling -worktrees retain the source experiments: - -| Prototype | Worktree | Branch | Base commit | -| ----------------------------- | -------------------------- | ---------------------------------- | ------------------------------------------ | -| Embedded artifact compression | `../binary-size-vite-task` | `perf/compress-embedded-artifacts` | `9ba4cc93379cf2d7a6c7e657285bb8a00e8339dc` | -| Package-manager deduplication | `../binary-size-pm-cli` | `perf/pm-cli-size-prototype` | `006e9700a62aab9d791889cdfaac31a67767e63d` | - -The [compression patch](prototypes/embedded-artifact-compression.patch) and -[package-manager patch](prototypes/pm-cli-deduplication.patch) preserve the -experiments, including their regression tests. Apply each to its own repository -at the listed base with `git apply --unidiff-zero`. They are prototypes, not -release-ready changes. - -To build Vite+ with the compression prototype, add these Cargo overrides to the -original release command and allow the local lockfile update in the disposable -worktree. Restore the baseline lockfile before building the original variant. - -```sh ---config 'patch."https://github.com/voidzero-dev/vite-task.git".vt_materialized_artifact.path="../binary-size-vite-task/crates/vt_materialized_artifact"' \ ---config 'patch."https://github.com/voidzero-dev/vite-task.git".vt_materialized_artifact_macros.path="../binary-size-vite-task/crates/vt_materialized_artifact_macros"' -``` - -Exact measurements, hashes, toolchain details, and current limitations are in -[results.json](results.json). The preview comparison uses code from the default -branch, so its automatic PR comment starts after the workflow change merges. diff --git a/bench/binary-size/analyze-macho.py b/bench/binary-size/analyze-macho.py deleted file mode 100644 index 2392f49ea6..0000000000 --- a/bench/binary-size/analyze-macho.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python3 -"""Measure a Mach-O artifact and attribute section bytes to symbol extents. - -Symbol extents include alignment and any unnamed bytes before the next symbol. -They are attribution estimates, not compiler-reported function sizes. Analyze -an unstripped copy for attribution; compare stripped artifacts for release size. -""" - -import argparse -import collections -import gzip -import hashlib -import json -import re -import struct -import subprocess -from pathlib import Path - - -def cstring(data): - return data.split(b"\0", 1)[0].decode("utf-8", errors="replace") - - -def analyze(path, cxxfilt, limit): - data = path.read_bytes() - if data[:4] != b"\xcf\xfa\xed\xfe": - raise ValueError("Expected a little-endian 64-bit Mach-O file") - command_count = struct.unpack_from("") - return {"wall_ms": elapsed_ms, "cpu_ms": cpu_ms}, hashlib.sha256(output).hexdigest() - - # Install a real, verified runtime once before steady-state measurements. - execute("baseline", ["env", "install", VERSION], project) - runtime = vp_home / "js_runtime" / "node" / VERSION - node_hash = digest(runtime / "bin" / "node") - cases = [ - ("help", ["--help"], project), - ("env-current", ["env", "current", "node", "--json"], project), - ("env-current-deep", ["env", "current", "node", "--json"], deep), - ("env-which", ["env", "which", "node"], project), - ("node-startup", ["node", "-e", ""], project), - ("npm-version", ["env", "exec", "npm", "--version"], project), - ("install-cached", ["env", "install", VERSION], project), - ("install-fresh", ["env", "install", VERSION], project), - ] - rng = random.Random(args.seed) - results = {} - for name, argv, cwd in cases: - results[name] = {"argv": argv, "cwd_depth": 20 if cwd == deep else 0, "rounds": []} - expected_hash = None - count = args.install_samples if name == "install-fresh" else args.samples - for round_index in range(args.rounds): - samples = {"baseline": [], "candidate": []} - orders = [i % 2 == 0 for i in range(count)] - rng.shuffle(orders) - request_count = len(requests) - for iteration in range(-3, count): - baseline_first = iteration % 2 == 0 if iteration < 0 else orders[iteration] - order = ["baseline", "candidate"] if baseline_first else ["candidate", "baseline"] - for label in order: - if name == "install-fresh": - shutil.rmtree(runtime) - sample, output_hash = execute(label, argv, cwd) - if expected_hash is None: - expected_hash = output_hash - if output_hash != expected_hash: - raise RuntimeError(f"Output mismatch: {name}, {label}") - if name == "install-fresh" and digest(runtime / "bin" / "node") != node_hash: - raise RuntimeError("Installed Node.js binary differs") - if iteration >= 0: - samples[label].append(sample) - request_delta = len(requests) - request_count - expected_requests = (count + 3) * 2 * 2 if name == "install-fresh" else 0 - if request_delta != expected_requests: - raise RuntimeError( - f"Unexpected mirror traffic: {name}: " - f"{request_delta} vs {expected_requests}" - ) - medians = { - label: statistics.median(s["wall_ms"] for s in values) - for label, values in samples.items() - } - change = (medians["candidate"] / medians["baseline"] - 1) * 100 - results[name]["rounds"].append({ - "samples": samples, "wall_medians_ms": medians, "change_percent": change, - }) - print( - f"{name} round {round_index + 1}: {medians['baseline']:.3f} -> " - f"{medians['candidate']:.3f} ms ({change:+.1f}%)", flush=True, - ) - results[name]["output_sha256"] = expected_hash - summary = {} - for label in binaries: - samples = [s for r in results[name]["rounds"] for s in r["samples"][label]] - summary[label] = { - "count": len(samples), - "wall_median_ms": statistics.median(s["wall_ms"] for s in samples), - "cpu_median_ms": statistics.median(s["cpu_ms"] for s in samples), - } - baseline_ms = summary["baseline"]["wall_median_ms"] - candidate_ms = summary["candidate"]["wall_median_ms"] - summary["change_ms"] = candidate_ms - baseline_ms - summary["change_percent"] = (candidate_ms / baseline_ms - 1) * 100 - results[name]["summary"] = summary - - # Keep the raw paired observations without repeating field names. - for case in results.values(): - for round_result in case["rounds"]: - round_result["samples"] = { - label: [[s["wall_ms"], s["cpu_ms"]] for s in samples] - for label, samples in round_result["samples"].items() - } - report = { - "source_commit": subprocess.check_output( - ["git", "rev-parse", "HEAD"], text=True, - ).strip(), - "platform": platform.platform(), - "cpu": subprocess.check_output( - ["sysctl", "-n", "machdep.cpu.brand_string"], text=True, - ).strip(), - "python": platform.python_version(), - "seed": args.seed, - "binaries": binary_metadata, - "node_archive_bytes": len(files[f"/v{VERSION}/{ARCHIVE}"]), - "node_archive_sha256": hashlib.sha256(files[f"/v{VERSION}/{ARCHIVE}"]).hexdigest(), - "installed_node_sha256": node_hash, - "method": ( - "Balanced randomized adjacent pairs; three warmups per variant per round; " - "wall time includes process launch and output capture; CPU time includes " - "children. Fresh installs use loopback HTTP with PGP/SHA-256 verification " - "and extraction; removal and output/hash checks are outside the timer. " - "OS caches remain warm." - ), - "sample_columns": ["wall_ms", "cpu_ms"], - "results": results, - } - args.output.parent.mkdir(parents=True, exist_ok=True) - args.output.write_text(json.dumps(report, indent=2) + "\n") - finally: - server.shutdown() - server.server_close() - thread.join() - - -if __name__ == "__main__": - main() diff --git a/bench/binary-size/benchmark-napi.cjs b/bench/binary-size/benchmark-napi.cjs deleted file mode 100644 index 34bbaf4b86..0000000000 --- a/bench/binary-size/benchmark-napi.cjs +++ /dev/null @@ -1,56 +0,0 @@ -// Run each candidate in a separate Node process. Output hashes must match the -// baseline. These synthetic kernels are a regression screen, not an application -// build benchmark; do not use them alone to approve a release profile change. -const { createHash } = require('node:crypto'); -const path = require('node:path'); -const { performance } = require('node:perf_hooks'); - -const binding = require(path.resolve(process.argv[2])); -const source = Array.from( - { length: 1500 }, - (_, i) => - `export function compute${i}(value) { const offset = ${i}; return value?.amount ?? offset + 1; }`, -).join('\n'); -const typescript = Array.from( - { length: 1500 }, - (_, i) => - `export const compute${i} = (value: { amount?: number } | undefined): number => value?.amount ?? ${i};`, -).join('\n'); - -const tasks = { - parse: () => { - const result = binding.parseSync('fixture.js', source); - return { errors: result.errors, module: result.module }; - }, - transform: () => - binding.transformSync('fixture.ts', typescript, { target: 'es2015', sourcemap: true }), - minify: () => binding.minifySync('fixture.js', source, { sourcemap: true }), - invalidSyntax: () => binding.transformSync('invalid.ts', 'export const value: = ;'), -}; - -const results = {}; -for (const [name, run] of Object.entries(tasks)) { - for (let i = 0; i < 5; i++) { - run(); - } - const samples = []; - for (let i = 0; i < 25; i++) { - const start = performance.now(); - run(); - samples.push(performance.now() - start); - } - const output = JSON.stringify(run()); - results[name] = { - median_ms: samples.toSorted((a, b) => a - b)[Math.floor(samples.length / 2)], - samples_ms: samples, - output_sha256: createHash('sha256').update(output).digest('hex'), - output_bytes: Buffer.byteLength(output), - }; -} -process.stdout.write( - JSON.stringify( - { node: process.version, source_bytes: Buffer.byteLength(source), results }, - null, - 2, - ) + '\n', -); diff --git a/bench/binary-size/benchmark-rolldown.py b/bench/binary-size/benchmark-rolldown.py deleted file mode 100644 index 4755fe4b87..0000000000 --- a/bench/binary-size/benchmark-rolldown.py +++ /dev/null @@ -1,296 +0,0 @@ -#!/usr/bin/env python3 -"""Compare standalone vp profiles through the same bundled Vite and Rolldown. - -Use a built packages/cli directory and the src directory from three.js r108, -the revision used by Rolldown's own threejs10x benchmark. No downloads occur -during the benchmark. Both binaries use the supplied Node.js executable. -""" - -import argparse -import hashlib -import json -import os -from pathlib import Path -import platform -import random -import resource -import shutil -import statistics -import subprocess -import tempfile -import time - - -CONFIG = """ -import { writeFileSync } from 'node:fs'; - -export default { - build: { - target: 'es2015', - minify: process.env.BENCH_MINIFY === '1' ? 'oxc' : false, - sourcemap: process.env.BENCH_SOURCEMAP === '1', - reportCompressedSize: false, - chunkSizeWarningLimit: 100000, - }, - plugins: process.env.BENCH_PROBE ? [{ - name: 'benchmark-probe', - generateBundle(_options, bundle) { - const chunks = Object.values(bundle).filter(item => item.type === 'chunk'); - writeFileSync(process.env.BENCH_PROBE, JSON.stringify({ - node: process.version, - nodeExecutable: process.execPath, - rolldown: this.meta.rolldownVersion, - modules: [...this.getModuleIds()].length, - chunks: chunks.length, - dynamicChunks: chunks.filter(chunk => chunk.isDynamicEntry).length, - nativeLibraries: process.report.getReport().sharedObjects.filter(name => name.endsWith('.node')), - })); - }, - }] : [], -}; -""" - - -def digest(path): - return hashlib.sha256(path.read_bytes()).hexdigest() - - -def tree_manifest(root): - files = [ - {"path": str(path.relative_to(root)), "bytes": path.stat().st_size, "sha256": digest(path)} - for path in sorted(root.rglob("*")) if path.is_file() - ] - return { - "files": len(files), - "bytes": sum(item["bytes"] for item in files), - "sha256": hashlib.sha256(json.dumps(files, sort_keys=True).encode()).hexdigest(), - } - - -def cpu_time(): - usage = resource.getrusage(resource.RUSAGE_CHILDREN) - return usage.ru_utime + usage.ru_stime - - -def make_project(project, cli, node_version): - project.mkdir() - (project / "node_modules").mkdir() - (project / "node_modules/vite-plus").symlink_to(cli, target_is_directory=True) - (project / "package.json").write_text('{"name":"rolldown-benchmark","private":true,"type":"module"}\n') - (project / ".node-version").write_text(node_version + "\n") - (project / "vite.config.mjs").write_text(CONFIG) - (project / "index.html").write_text('\n') - - -def make_three(project, source): - entries = [] - for index in range(10): - shutil.copytree(source, project / f"copy{index}") - entries.append(f"import * as three{index} from './copy{index}/Three.js';") - entries.append("globalThis.benchmark = [" + ",".join(f"three{i}" for i in range(10)) + "];") - (project / "entry.ts").write_text("\n".join(entries) + "\n") - - -def make_typescript(project): - source = project / "src" - source.mkdir() - (source / "shared.ts").write_text("export const adjust = (n: number): number => Math.sin(n) * 0.5;\n") - for index in range(2000): - lines = ["import { adjust } from './shared';", "interface Input { value?: number; label?: string }"] - for function in range(12): - lines.append( - f"export function f{function}(input: Input): string {{" - f" const value = (input.value ?? {index + function}) + adjust({function} + (input.value ?? 0));" - f" return (input.label?.toUpperCase() ?? 'module{index}') + ':' + value.toFixed({function % 5}); }}" - ) - lines.append(f"export function unused() {{ return 'unused-sentinel-{index}'; }}") - (source / f"module{index}.ts").write_text("\n".join(lines) + "\n") - for chunk in range(20): - lines = [] - calls = [] - for index in range(chunk * 100, (chunk + 1) * 100): - names = [f"f{function} as m{index}f{function}" for function in range(12)] - lines.append(f"import {{ {', '.join(names)} }} from './module{index}';") - calls.extend(f"m{index}f{function}(input)" for function in range(12)) - lines.append("export const run = (input: { value?: number; label?: string }) => [" + ",".join(calls) + "];") - (source / f"chunk{chunk}.ts").write_text("\n".join(lines) + "\n") - (project / "entry.ts").write_text( - "globalThis.benchmark = [" + ",".join(f"() => import('./src/chunk{i}')" for i in range(20)) + "];\n" - ) - - -def main(): - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--baseline", type=Path, required=True) - parser.add_argument("--candidate", type=Path, required=True) - parser.add_argument("--binary-source-commit", required=True) - parser.add_argument("--cli", type=Path, required=True) - parser.add_argument("--node", type=Path, required=True) - parser.add_argument("--three-src", type=Path, required=True) - parser.add_argument("--output", type=Path, required=True) - parser.add_argument("--samples", type=int, default=20) - parser.add_argument("--rounds", type=int, default=3) - parser.add_argument("--seed", type=int, default=20261017) - args = parser.parse_args() - if min(args.samples, args.rounds) < 1 or args.samples % 2: - parser.error("Use a positive, even sample count and a positive round count") - node = args.node.resolve() - cli = args.cli.resolve() - three_src = args.three_src.resolve() - core = Path(subprocess.check_output([ - str(node), "--input-type=module", "-e", - "import { createRequire } from 'node:module'; console.log(createRequire(process.argv[1]).resolve('vite/package.json'));", - str(cli / "package.json"), - ], text=True).strip()).parent - node_version = subprocess.check_output([str(node), "--version"], text=True).strip().removeprefix("v") - if not (three_src / "Three.js").is_file(): - parser.error("--three-src must contain Three.js from three.js r108") - binaries_metadata = { - label: {"bytes": path.stat().st_size, "sha256": digest(path)} - for label, path in [("baseline", args.baseline), ("candidate", args.candidate)] - } - report = { - "binary_source_commit": args.binary_source_commit, - "runner_sha256": digest(Path(__file__)), - "platform": platform.platform(), - "cpu": subprocess.check_output(["sysctl", "-n", "machdep.cpu.brand_string"], text=True).strip() - if platform.system() == "Darwin" else platform.processor(), - "binaries": binaries_metadata, - "node": {"version": node_version, "sha256": digest(node)}, - "toolchain": json.loads((cli / "dist/toolchain.json").read_text()), - "cli_dist": tree_manifest(cli / "dist"), - "core_dist": tree_manifest(core / "dist"), - "three_source": tree_manifest(three_src), - "seed": args.seed, - "method": ( - "Fresh vp build process per sample; same JS, NAPI and Node for both profiles; " - "balanced randomized adjacent pairs; three warmups per variant per round; " - "output directory removed before each invocation; warm OS caches; no task cache. " - "Wall time includes process launch, CLI/Node startup, bundling, minification, " - "source maps and output writes as configured. Cleanup and output hash checks " - "are outside the timer. Probe hooks run only in untimed preflight builds. " - "Confidence interval bootstraps paired observations within each round." - ), - "sample_columns": ["wall_ms", "cpu_ms"], - "results": {}, - } - rng = random.Random(args.seed) - with tempfile.TemporaryDirectory(prefix="vp-rolldown-benchmark-") as temp: - root = Path(temp) - home = root / "vp-home" - home.mkdir() - # Use a fixed Node executable without downloads or user configuration. - (home / "config.json").write_text('{"nodeShimMode":"system_first"}\n') - node_bin = root / "node-bin" - node_bin.mkdir() - (node_bin / "node").symlink_to(node) - env = { - key: value for key, value in os.environ.items() - if not key.startswith(("VP_", "VITE_", "TOKIO_", "NAPI_", "BENCH_")) - and key not in ("NODE_OPTIONS", "NODE_PATH", "FORCE_COLOR", "RUST_LOG", "RAYON_NUM_THREADS") - } - env.update({"VP_HOME": str(home), "VP_NO_UPDATE_CHECK": "1", "NO_COLOR": "1", "CI": "1", - "PATH": str(node_bin) + os.pathsep + "/usr/bin:/bin:/usr/sbin:/sbin"}) - binaries = {} - for label, source in [("baseline", args.baseline), ("candidate", args.candidate)]: - directory = root / label - directory.mkdir() - binaries[label] = directory / "vp" - shutil.copy2(source.resolve(), binaries[label]) - (directory / ".vp-setup-complete").touch() - three = root / "three10x" - typescript = root / "typescript" - for project in [three, typescript]: - make_project(project, cli, node_version) - make_three(three, three_src) - make_typescript(typescript) - cases = [ - ("three10x-bundle", three, False, False), - ("three10x-minify-sourcemap", three, True, True), - ("typescript-code-split-minify-sourcemap", typescript, True, True), - ] - for name, project, minify, sourcemap in cases: - case_env = {**env, "BENCH_MINIFY": str(int(minify)), "BENCH_SOURCEMAP": str(int(sourcemap))} - expected_output = None - probes = {} - - def execute(label, probe=False): - nonlocal expected_output - shutil.rmtree(project / "dist", ignore_errors=True) - run_env = dict(case_env) - if probe: - run_env["BENCH_PROBE"] = str(root / "probe.json") - start_cpu = cpu_time() - start = time.perf_counter_ns() - result = subprocess.run( - [str(binaries[label]), "build", "--logLevel", "silent"], cwd=project, - env=run_env, stdin=subprocess.DEVNULL, capture_output=True, timeout=120, - ) - sample = [(time.perf_counter_ns() - start) / 1e6, (cpu_time() - start_cpu) * 1000] - if result.returncode: - raise RuntimeError(f"{name} {label}: {result.stdout.decode()}\n{result.stderr.decode()}") - output = tree_manifest(project / "dist") - if output["files"] < (3 if sourcemap else 2): - raise RuntimeError(f"Missing build output: {name}") - if expected_output is None: - expected_output = output - if output != expected_output: - raise RuntimeError(f"Build output differs: {name}, {label}") - if probe: - data = json.loads((root / "probe.json").read_text()) - if not data.get("rolldown") or Path(data["nodeExecutable"]).resolve() != node: - raise RuntimeError(f"Unexpected bundler/runtime: {data}") - native = [Path(path) for path in data.pop("nativeLibraries") if "vite-plus" in path] - if not native: - raise RuntimeError("The build did not load the bundled Vite+ native addon") - data["native_addons"] = sorted({digest(path) for path in native}) - data.pop("nodeExecutable") - probes[label] = data - return sample - - for label in binaries: - execute(label, probe=True) - if probes["baseline"] != probes["candidate"]: - raise RuntimeError(f"Different bundlers/runtimes: {probes}") - case = {"minify": minify, "sourcemap": sourcemap, "probe": probes["baseline"], "rounds": []} - print(f"{name}: {case['probe']}; output={expected_output}", flush=True) - for round_index in range(args.rounds): - samples = {"baseline": [], "candidate": []} - orders = [i % 2 == 0 for i in range(args.samples)] - rng.shuffle(orders) - for iteration in range(-3, args.samples): - first = iteration % 2 == 0 if iteration < 0 else orders[iteration] - for label in (["baseline", "candidate"] if first else ["candidate", "baseline"]): - sample = execute(label) - if iteration >= 0: - samples[label].append(sample) - medians = {label: statistics.median(s[0] for s in values) for label, values in samples.items()} - change = (medians["candidate"] / medians["baseline"] - 1) * 100 - case["rounds"].append({"samples": samples, "baseline_first": orders, - "wall_medians_ms": medians, "change_percent": change}) - print(f"{name} round {round_index + 1}: {medians['baseline']:.3f} -> {medians['candidate']:.3f} ms ({change:+.2f}%)", flush=True) - summary = {} - for label in binaries: - values = [sample for result in case["rounds"] for sample in result["samples"][label]] - summary[label] = {"count": len(values), "wall_median_ms": statistics.median(s[0] for s in values), - "cpu_median_ms": statistics.median(s[1] for s in values)} - summary["change_percent"] = (summary["candidate"]["wall_median_ms"] / summary["baseline"]["wall_median_ms"] - 1) * 100 - boot_rng = random.Random(args.seed) - estimates = [] - for _ in range(10000): - baseline, candidate = [], [] - for result in case["rounds"]: - for index in boot_rng.choices(range(args.samples), k=args.samples): - baseline.append(result["samples"]["baseline"][index][0]) - candidate.append(result["samples"]["candidate"][index][0]) - estimates.append((statistics.median(candidate) / statistics.median(baseline) - 1) * 100) - estimates.sort() - summary["change_percent_95pct_bootstrap_ci"] = [estimates[250], estimates[9749]] - case.update({"summary": summary, "output": expected_output}) - report["results"][name] = case - args.output.parent.mkdir(parents=True, exist_ok=True) - args.output.write_text(json.dumps(report, indent=2) + "\n") - - -if __name__ == "__main__": - main() diff --git a/bench/binary-size/evidence/cli-profile-benchmark.json b/bench/binary-size/evidence/cli-profile-benchmark.json deleted file mode 100644 index 6fd17b9f4b..0000000000 --- a/bench/binary-size/evidence/cli-profile-benchmark.json +++ /dev/null @@ -1,5604 +0,0 @@ -{ - "source_commit": "a4e9c5932e069b5aea5b9c0136222ddada73bed0", - "platform": "macOS-26.2-arm64-arm-64bit", - "cpu": "Apple M4 Max", - "python": "3.9.6", - "seed": 20261016, - "binaries": { - "baseline": { - "bytes": 7991312, - "sha256": "8c7696daad2fcdb7842613fba238e5475eef6078b1ca8f8984899e49750b36b1" - }, - "candidate": { - "bytes": 4954496, - "sha256": "9b6a8879912330090415905119baed4e99eead050208271fe7200b1c44bb298d" - } - }, - "node_archive_bytes": 48563803, - "node_archive_sha256": "97483ff4361d239a56d038c6335767a56a291e78c10f07446f463f05d9d19b89", - "installed_node_sha256": "79de4c62eb09c9cf7859e4a5fb27502f209533b54fa6a97f5a791015798282c0", - "method": "Balanced randomized adjacent pairs; three warmups per variant per round; wall time includes process launch and output capture; CPU time includes children. Fresh installs use loopback HTTP with PGP/SHA-256 verification and extraction; removal and output/hash checks are outside the timer. OS caches remain warm.", - "results": { - "help": { - "argv": ["--help"], - "cwd_depth": 0, - "rounds": [ - { - "samples": { - "baseline": [ - [4.825625, 4.012000000000127], - [4.681125, 4.709999999999992], - [4.260709, 4.002999999999979], - [4.38825, 3.7719999999998866], - [4.345083, 4.348999999999936], - [4.282834, 4.022999999999888], - [4.204375, 3.782000000000174], - [4.199, 3.8640000000000896], - [4.185667, 3.7399999999998546], - [4.356, 4.1160000000000085], - [4.339875, 4.3079999999997565], - [4.5935, 4.1240000000000165], - [4.444167, 4.474000000000089], - [4.540083, 4.2960000000000775], - [3.864042, 3.5200000000001896], - [4.316041, 4.0559999999998375], - [4.139625, 4.155000000000131], - [4.013208, 4.014000000000184], - [3.819416, 3.9770000000001193], - [4.062416, 4.2159999999999975], - [3.760584, 3.430999999999962], - [3.959417, 3.9569999999997663], - [3.930083, 3.7650000000000183], - [3.987958, 3.4009999999999874], - [3.895041, 3.9249999999999563], - [3.848709, 3.855000000000164], - [4.193917, 3.334999999999866], - [4.019583, 4.174000000000122], - [4.070625, 4.24699999999989], - [3.977459, 4.002999999999757], - [4.036583, 4.084000000000199], - [3.852834, 3.975000000000062], - [3.940667, 3.8649999999997853], - [4.273416, 3.6480000000000956], - [4.105708, 3.354000000000079], - [3.796041, 3.3120000000002037], - [4.204042, 3.6160000000000636], - [3.805584, 3.319000000000072], - [4.0855, 3.8970000000000393], - [4.131209, 4.223000000000088], - [3.728084, 3.321999999999825], - [3.947459, 3.4610000000001584], - [3.880583, 4.048999999999747], - [3.689292, 3.25500000000023], - [3.8145, 3.4650000000000514], - [4.076042, 4.22200000000017], - [3.747125, 3.3639999999999226], - [3.795917, 3.2049999999999024], - [4.014125, 3.9910000000003], - [3.828083, 3.9319999999998245], - [3.839875, 3.493999999999886], - [4.048125, 4.174000000000122], - [3.811625, 4.1739999999999], - [4.417667, 4.402999999999935], - [4.404917, 4.234999999999989], - [3.957125, 4.224000000000228], - [4.003417, 4.0079999999997895], - [4.455125, 4.115000000000091], - [4.126584, 4.057999999999895], - [4.352958, 3.8210000000000743], - [4.27125, 4.145000000000065], - [4.011125, 4.037999999999986], - [3.906917, 3.929999999999989], - [4.132416, 4.364999999999952], - [4.108917, 4.160000000000164], - [4.101875, 4.1320000000000245], - [3.919791, 3.462999999999994], - [4.102708, 3.5690000000001554], - [4.003042, 3.399000000000152], - [3.973834, 3.5169999999999924], - [4.093959, 4.042999999999797], - [4.062917, 4.118000000000288], - [3.823125, 3.2520000000000326], - [3.778917, 3.9890000000000203], - [3.80975, 3.514999999999713], - [3.858625, 3.298999999999941], - [4.105709, 4.642999999999953], - [4.334625, 4.468999999999834], - [3.936417, 4.134999999999778], - [4.074458, 3.8529999999998843], - [3.809042, 3.578000000000081], - [3.7585, 3.921999999999981], - [6.021917, 4.111000000000198], - [4.202667, 4.198000000000146], - [4.210167, 4.10200000000005], - [3.895, 3.8490000000002134], - [4.007792, 3.4519999999997886], - [4.080792, 3.946000000000005], - [3.935625, 3.4770000000001744], - [4.620583, 4.843999999999848], - [4.616291, 4.55899999999998], - [4.079709, 4.076999999999886], - [4.0265, 4.0279999999999205], - [4.079667, 3.5400000000000986], - [4.249792, 3.6800000000001276], - [3.818417, 3.8399999999998435], - [3.99625, 3.8049999999998363], - [3.880834, 3.810000000000091], - [4.010208, 3.419000000000061], - [3.849375, 3.7229999999996988], - [4.002375, 3.7879999999996805], - [3.773333, 3.4610000000001584], - [4.005375, 3.8560000000000816], - [3.997417, 3.907000000000105], - [3.735166, 3.8410000000004274], - [3.931792, 3.9309999999996847], - [3.808458, 3.854000000000024], - [3.816167, 3.93399999999966], - [3.849708, 3.4890000000000754], - [4.133792, 3.8609999999996703], - [3.819875, 3.738999999999937], - [3.708292, 3.701999999999872], - [3.758458, 3.826999999999803], - [4.213375, 4.263000000000128], - [3.872916, 3.326999999999858], - [3.82525, 3.395000000000037], - [4.229042, 3.511000000000486], - [5.316417, 4.557000000000144], - [4.253541, 4.0399999999998215], - [4.355167, 4.205999999999932] - ], - "candidate": [ - [5.61925, 5.596999999999852], - [4.609542, 3.851000000000049], - [4.074459, 3.47900000000001], - [4.267417, 4.3680000000001495], - [4.110917, 3.5439999999997696], - [4.170042, 3.8760000000002126], - [4.328084, 3.9810000000000123], - [4.382583, 4.454999999999876], - [4.296709, 3.8690000000001223], - [4.487791, 4.3480000000000185], - [4.339458, 3.779000000000199], - [4.442917, 4.416999999999893], - [4.490084, 4.272999999999971], - [4.700291, 4.462999999999884], - [4.087042, 3.9359999999999395], - [4.346125, 4.2999999999999705], - [4.162625, 3.8369999999998683], - [4.413042, 4.413], - [4.032875, 4.264999999999741], - [4.023417, 4.007000000000094], - [4.166792, 4.4279999999998765], - [4.114667, 4.162000000000221], - [4.274042, 3.9800000000000946], - [4.038959, 3.83], - [3.823416, 3.3279999999999976], - [4.249542, 3.7849999999999273], - [4.35425, 4.510000000000014], - [4.1935, 3.6760000000000126], - [3.928459, 4.404999999999992], - [3.903875, 3.4090000000002174], - [3.862459, 3.6119999999997265], - [4.092708, 4.171000000000147], - [3.919958, 3.3890000000000864], - [3.950542, 4.169000000000089], - [4.028333, 3.9789999999997328], - [3.988959, 4.28699999999993], - [4.205792, 4.157999999999884], - [4.035125, 3.997999999999946], - [4.317541, 3.673999999999955], - [4.00575, 3.3490000000000464], - [3.985833, 3.47900000000001], - [3.915417, 4.121000000000041], - [3.898542, 3.2689999999999664], - [4.175542, 4.380999999999968], - [3.859583, 3.626999999999825], - [3.915167, 3.4649999999998293], - [4.0045, 4.1560000000000485], - [4.068417, 3.989999999999938], - [3.868, 4.242999999999997], - [3.77925, 3.8840000000002206], - [3.936583, 3.6929999999999463], - [4.006, 4.070000000000018], - [3.991, 4.167000000000032], - [4.531291, 4.345999999999961], - [4.124541, 4.14300000000023], - [4.169041, 4.181999999999686], - [4.378459, 4.1400000000000325], - [4.337917, 4.4840000000001545], - [4.408375, 4.170999999999925], - [4.474333, 4.556999999999922], - [4.067625, 4.281999999999897], - [3.924625, 3.931000000000129], - [4.073875, 4.094000000000042], - [4.168292, 4.680999999999935], - [4.00475, 4.2960000000000775], - [4.01275, 3.9429999999998078], - [4.032458, 4.096999999999795], - [4.169209, 4.25399999999998], - [4.149958, 4.065999999999903], - [4.25625, 4.034000000000093], - [3.953875, 3.490000000000215], - [4.166958, 4.531999999999758], - [3.94975, 4.265999999999881], - [3.843583, 3.259000000000123], - [4.059375, 3.9730000000002264], - [4.279291, 3.8009999999999433], - [4.32575, 4.5640000000000125], - [4.064333, 4.258000000000095], - [4.625583, 4.181000000000212], - [3.955125, 3.882000000000163], - [3.76025, 4.062999999999928], - [4.011959, 4.18099999999999], - [4.500583, 4.1159999999997865], - [4.247667, 4.293999999999798], - [4.0915, 4.5040000000002856], - [4.061666, 4.233999999999849], - [4.227125, 4.410000000000025], - [4.050542, 3.642999999999841], - [3.965958, 4.190999999999834], - [3.906084, 3.923000000000121], - [4.202834, 4.178000000000237], - [4.003542, 3.8690000000001223], - [4.32875, 4.205000000000014], - [4.115667, 3.953999999999791], - [3.987, 3.7120000000001596], - [3.936917, 3.765999999999714], - [4.477625, 4.228000000000343], - [3.907208, 3.541999999999934], - [3.9615, 3.6640000000001116], - [3.975334, 3.699000000000119], - [4.171958, 3.867000000000287], - [5.214084, 3.6769999999999303], - [4.016625, 3.8719999999998755], - [4.133, 3.9810000000000123], - [3.855791, 3.8469999999997118], - [3.992291, 3.938999999999915], - [3.728958, 3.9450000000003094], - [3.854416, 3.8210000000002964], - [4.235542, 4.310999999999954], - [3.873291, 3.95800000000035], - [3.926875, 3.9959999999998885], - [3.863125, 3.5480000000001066], - [4.247584, 3.6160000000000636], - [3.768042, 3.3289999999999154], - [4.128334, 4.172000000000287], - [4.006292, 3.2879999999999576], - [4.622375, 4.321999999999715], - [4.834792, 5.394999999999595], - [4.709833, 4.10900000000014], - [4.649042, 4.515000000000047] - ] - }, - "wall_medians_ms": { - "baseline": 4.013666499999999, - "candidate": 4.080750500000001 - }, - "change_percent": 1.6713894888875647 - }, - { - "samples": { - "baseline": [ - [4.071792, 3.813999999999762], - [3.997958, 3.779000000000199], - [4.201458, 3.775000000000084], - [4.072042, 3.849999999999909], - [4.270625, 4.189999999999916], - [3.846167, 3.747000000000167], - [4.348, 4.477000000000508], - [3.979125, 3.8439999999999586], - [4.022042, 3.9609999999998813], - [4.374375, 4.077999999999804], - [4.414667, 4.105000000000025], - [4.024875, 3.5639999999999006], - [4.175042, 4.2960000000000775], - [4.393625, 4.192999999999891], - [4.242209, 4.187000000000385], - [4.130417, 4.25500000000012], - [4.453041, 4.018999999999995], - [4.253208, 4.670999999999648], - [4.654666, 4.329000000000249], - [4.24625, 3.9669999999998318], - [4.086958, 4.036999999999846], - [4.037625, 4.041999999999657], - [4.245083, 4.520999999999997], - [4.158709, 3.5960000000003767], - [4.183041, 3.7090000000001844], - [4.151375, 3.70299999999979], - [3.907292, 3.745999999999583], - [4.107417, 4.2439999999999145], - [3.955042, 3.3610000000003915], - [4.225917, 3.7359999999999616], - [4.213209, 4.230000000000178], - [4.888833, 4.801000000000055], - [4.080542, 4.001999999999839], - [4.007, 3.4800000000001496], - [4.257625, 4.1679999999999495], - [4.03875, 4.036000000000151], - [3.870166, 3.522999999999943], - [3.804167, 3.387000000000029], - [3.546292, 3.1609999999999694], - [4.051458, 3.907000000000327], - [4.046833, 3.409999999999691], - [3.522834, 3.1050000000001354], - [3.813708, 3.3039999999999736], - [4.557125, 4.465999999999859], - [3.775708, 3.423000000000176], - [4.228209, 3.9970000000000283], - [3.743125, 3.9519999999999555], - [4.124166, 4.18200000000013], - [3.886333, 3.16599999999978], - [3.899791, 3.815000000000346], - [4.247208, 4.113000000000255], - [3.985708, 3.8450000000000983], - [3.804792, 3.737999999999797], - [4.210125, 4.151999999999489], - [3.808834, 3.2210000000003625], - [3.97825, 4.341999999999846], - [3.836791, 3.2930000000002124], - [3.788, 4.152000000000378], - [3.985125, 4.080999999999779], - [3.986, 4.062999999999484], - [4.191834, 3.742000000000356], - [4.376792, 3.8490000000002134], - [4.4275, 4.542999999999964], - [4.229667, 4.110999999999976], - [4.798792, 4.297000000000217], - [4.166625, 3.6410000000000053], - [4.372375, 4.302999999999724], - [4.312792, 3.8239999999998275], - [4.548417, 4.465999999999859], - [4.299916, 3.527000000000058], - [4.628375, 3.8730000000000153], - [4.708708, 4.9760000000005356], - [4.489375, 4.374000000000322], - [4.651583, 4.066999999999599], - [3.896791, 3.322999999999965], - [4.240583, 3.770999999999969], - [4.137292, 3.823000000000132], - [4.149042, 4.309000000000118], - [3.986166, 3.9210000000000633], - [4.167208, 3.986000000000267], - [4.215958, 3.9289999999998493], - [4.214333, 4.364999999999952], - [3.939959, 4.064999999999763], - [4.161041, 4.321999999999715], - [4.035917, 3.594000000000541], - [3.854833, 3.254999999999786], - [4.458292, 4.354000000000191], - [4.355417, 4.042000000000101], - [4.502959, 4.655000000000076], - [3.925458, 4.246000000000194], - [3.829292, 3.2930000000002124], - [4.185667, 4.050000000000331], - [3.809584, 3.206999999999738], - [3.971333, 3.4570000000000434], - [4.873917, 4.6439999999998705], - [4.545583, 3.9810000000004564], - [4.028, 3.515000000000157], - [4.00825, 3.8529999999998843], - [3.880375, 4.360999999999837], - [4.381208, 4.321000000000019], - [4.311666, 4.010000000000069], - [4.593, 4.131000000000107], - [4.620167, 4.377999999999993], - [4.40175, 4.3519999999999115], - [4.095875, 3.5370000000001234], - [4.001375, 4.217000000000581], - [3.794958, 3.3289999999999154], - [4.466875, 4.255000000000564], - [4.400167, 4.249999999999865], - [4.399417, 4.351000000000216], - [4.745167, 4.416999999999671], - [4.285458, 4.3440000000001255], - [4.776416, 4.553000000000029], - [4.472917, 4.2520000000001446], - [4.531125, 4.34900000000038], - [4.339, 3.9799999999994284], - [4.324042, 4.3599999999996975], - [4.343791, 4.430000000000156], - [4.341625, 3.8569999999999993], - [4.335417, 4.0199999999996905] - ], - "candidate": [ - [3.934292, 3.734000000000126], - [3.938792, 3.8239999999998275], - [4.637791, 4.5280000000000875], - [4.374875, 4.347000000000101], - [4.383791, 4.10099999999991], - [4.398167, 4.193999999999587], - [4.127834, 3.961999999999577], - [4.167917, 4.10300000000019], - [4.395792, 4.322000000000159], - [4.565333, 3.9770000000003414], - [4.727541, 4.25500000000012], - [3.829792, 3.490999999999911], - [4.102292, 4.0519999999997225], - [4.131292, 3.978000000000037], - [4.349083, 4.694999999999894], - [4.287625, 4.24699999999989], - [4.339625, 4.270999999999692], - [4.707917, 4.669000000000256], - [4.509042, 4.048000000000052], - [4.149917, 4.33400000000006], - [4.328333, 4.11000000000028], - [4.129625, 4.434000000000271], - [4.097166, 3.937999999999775], - [4.143709, 4.080999999999779], - [4.002125, 4.18200000000013], - [3.891, 3.5320000000003127], - [3.919209, 4.040999999999961], - [4.183416, 3.6160000000000636], - [4.188792, 4.0839999999997545], - [4.124833, 3.9450000000003094], - [4.142958, 3.669999999999618], - [4.03775, 3.390000000000004], - [4.165125, 3.462999999999994], - [4.1585, 4.377999999999993], - [3.807583, 3.4169999999997813], - [3.973917, 3.481999999999985], - [3.977375, 3.6170000000002034], - [3.944541, 3.865999999999925], - [4.182667, 3.6369999999998903], - [3.976584, 3.449999999999509], - [4.11525, 4.082000000000363], - [4.014625, 3.9280000000001536], - [3.967042, 3.681999999999963], - [4.224542, 3.713999999999995], - [3.906458, 3.3479999999999066], - [4.15175, 3.506999999999927], - [3.951166, 3.8320000000000576], - [4.089083, 3.474999999999895], - [3.808375, 3.9490000000004244], - [3.853167, 3.8009999999997213], - [3.891958, 3.3849999999997493], - [4.098542, 3.4449999999996983], - [4.076375, 3.9240000000004827], - [3.97175, 3.642000000000145], - [3.866708, 3.9889999999997983], - [4.053792, 4.1839999999999655], - [4.102292, 4.150999999999794], - [3.997167, 3.5959999999999326], - [4.029167, 3.8079999999998115], - [3.993958, 3.4290000000005705], - [4.569292, 4.310999999999954], - [4.472834, 3.794999999999771], - [4.442125, 3.9759999999997575], - [4.817959, 4.1240000000000165], - [4.390625, 3.9090000000001623], - [4.539833, 4.067000000000043], - [4.325792, 4.333000000000364], - [4.752041, 4.490999999999801], - [4.707666, 4.125000000000156], - [4.763708, 4.322999999999855], - [4.650375, 4.920999999999953], - [4.396542, 4.048999999999747], - [4.968791, 3.9799999999998725], - [4.014375, 3.697999999999979], - [4.174583, 3.521999999999803], - [4.291583, 4.272000000000276], - [4.14075, 3.5970000000000724], - [4.253417, 4.446999999999868], - [4.25325, 4.146999999999679], - [3.878292, 3.849999999999909], - [4.042, 3.578999999999777], - [4.111083, 3.675000000000317], - [4.331375, 3.731000000000151], - [3.933708, 3.3210000000001294], - [4.055166, 4.269999999999996], - [4.085583, 4.09299999999968], - [4.266416, 3.9210000000000633], - [4.29075, 4.522999999999833], - [4.177333, 4.259000000000235], - [3.92225, 3.6349999999996108], - [4.554417, 4.056999999999533], - [3.891875, 4.018000000000299], - [4.031833, 4.18099999999999], - [4.2365, 4.277999999999782], - [4.081042, 3.5359999999999836], - [4.338208, 4.089999999999705], - [4.505583, 3.8210000000002964], - [4.01375, 3.450999999999649], - [4.2235, 3.6119999999999486], - [4.23825, 3.546000000000049], - [4.315875, 4.4360000000001065], - [4.362958, 4.5999999999999375], - [5.34875, 5.42800000000021], - [4.407791, 3.8169999999997373], - [4.187167, 4.3079999999999785], - [4.258167, 3.737999999999797], - [4.188167, 3.6449999999996763], - [4.584916, 4.400999999999655], - [4.763541, 4.573999999999856], - [4.286417, 4.4960000000000555], - [4.682625, 4.79800000000008], - [4.483875, 3.937999999999775], - [4.570667, 4.345000000000265], - [4.791541, 4.654999999999632], - [4.363041, 4.3179999999996], - [4.460625, 3.9360000000003836], - [4.377667, 4.19800000000059], - [4.088, 3.7359999999999616], - [4.398709, 4.030999999999896], - [4.420875, 4.49400000000022] - ] - }, - "wall_medians_ms": { - "baseline": 4.184354, - "candidate": 4.1830415 - }, - "change_percent": -0.031366848980751705 - }, - { - "samples": { - "baseline": [ - [4.118625, 3.972999999999338], - [3.922584, 3.8999999999997925], - [3.761917, 4.178000000000459], - [4.149167, 4.086000000000034], - [4.211583, 3.9240000000000386], - [4.537459, 3.810999999999787], - [5.501875, 4.469000000000278], - [5.296, 5.152999999999963], - [4.756584, 4.529999999999923], - [4.395041, 4.0399999999998215], - [4.0925, 3.9050000000000473], - [3.938167, 3.4369999999999123], - [3.952625, 4.122999999999877], - [4.37825, 4.496999999999751], - [4.260625, 3.6210000000003184], - [4.703541, 4.693999999999754], - [4.421125, 3.7890000000002644], - [4.064625, 3.5650000000000404], - [4.111958, 4.213000000000466], - [3.931833, 3.285999999999234], - [3.95725, 4.304999999999559], - [4.150458, 3.7999999999995815], - [4.282292, 3.7690000000001334], - [4.264042, 3.609999999999669], - [3.948959, 3.943000000000474], - [4.106208, 4.230999999999874], - [4.015417, 3.3649999999996183], - [4.181334, 3.6850000000003824], - [4.10925, 4.360999999999393], - [3.93525, 4.075000000000273], - [3.976625, 3.6849999999999383], - [3.952167, 3.33400000000017], - [4.369375, 4.485000000000294], - [4.131625, 4.025999999999641], - [4.175042, 4.152999999999629], - [4.234167, 4.313000000000233], - [4.229625, 3.9929999999999133], - [4.112625, 3.8210000000002964], - [3.830792, 4.108000000000445], - [4.238459, 3.7399999999996325], - [4.056167, 3.7479999999998626], - [4.007375, 3.4839999999998206], - [3.975583, 3.9000000000002366], - [4.282917, 3.8069999999996718], - [4.033583, 4.242000000000079], - [3.935834, 3.4239999999998716], - [3.891833, 3.330000000000055], - [4.033666, 3.511000000000486], - [3.954667, 3.4649999999998293], - [3.797, 3.3440000000002357], - [4.043, 3.3639999999999226], - [4.163875, 3.482000000000429], - [4.084792, 4.040999999999961], - [4.077292, 4.070000000000018], - [3.655375, 3.2959999999997436], - [3.918416, 4.161999999999999], - [3.946708, 3.3090000000002284], - [4.632959, 3.9509999999998158], - [4.019084, 3.4650000000002734], - [3.896834, 3.677999999999848], - [4.319708, 4.256999999999955], - [3.884333, 4.063000000000372], - [3.997208, 3.626000000000129], - [3.746875, 3.2160000000001077], - [4.014875, 4.247000000000334], - [3.843833, 3.9120000000005817], - [4.039333, 4.061000000000092], - [3.869792, 3.8759999999999906], - [3.870125, 3.713999999999551], - [4.298625, 3.6729999999995933], - [4.305542, 4.028000000000365], - [4.008667, 4.058000000000561], - [3.99275, 3.7679999999999936], - [4.008541, 3.4209999999998963], - [3.761291, 4.154999999999909], - [3.94475, 3.4909999999994668], - [4.029, 3.6480000000005397], - [3.994458, 3.7679999999999936], - [3.981166, 3.4209999999998963], - [3.885917, 4.03100000000034], - [3.77925, 3.277999999999892], - [4.008959, 3.54999999999972], - [3.934959, 3.838000000000008], - [4.081292, 3.375000000000128], - [3.91325, 3.3460000000005152], - [4.12175, 4.17500000000004], - [4.165583, 3.6650000000002514], - [4.110917, 3.7890000000002644], - [4.402083, 3.8359999999997285], - [4.024083, 3.439000000000636], - [4.014916, 3.4240000000003157], - [3.707417, 3.722000000000225], - [4.871792, 4.9440000000000595], - [3.780708, 3.393999999999675], - [3.800958, 4.066000000000347], - [4.465583, 3.63099999999994], - [4.532375, 4.036000000000151], - [4.508875, 4.059000000000257], - [4.362125, 4.072000000000742], - [4.490541, 4.532999999999898], - [4.217916, 4.218000000000277], - [4.479125, 4.211000000000631], - [4.460625, 4.2399999999997995], - [4.087208, 4.081999999999475], - [4.142916, 4.019000000000439], - [4.206125, 4.401999999999795], - [4.238125, 4.169000000000089], - [4.087291, 3.959000000000046], - [4.557334, 4.373999999999878], - [4.250417, 4.385000000000083], - [4.179792, 4.147000000000123], - [4.243375, 4.205999999999932], - [4.082583, 4.151000000000238], - [4.09425, 4.049999999999443], - [4.006542, 3.359000000000556], - [3.918583, 3.290999999999933], - [3.673417, 3.791000000000544], - [3.908, 3.262999999999572], - [4.006791, 4.15099999999935], - [4.082083, 3.4450000000001424] - ], - "candidate": [ - [3.983791, 4.110000000000724], - [3.98225, 4.138000000000197], - [4.308541, 4.700999999999844], - [4.130375, 4.290000000000127], - [4.738291, 4.661000000000026], - [4.235917, 4.217999999999833], - [4.66075, 4.361999999999977], - [5.007875, 4.983999999999877], - [5.110667, 4.751000000000172], - [4.449334, 3.8920000000000066], - [4.128875, 3.6000000000000476], - [4.263375, 4.277000000000086], - [4.0755, 3.4160000000005297], - [4.080083, 3.4839999999998206], - [4.301459, 4.2119999999998825], - [5.211541, 4.48499999999985], - [4.351125, 4.429000000000016], - [4.36525, 4.354000000000191], - [4.001292, 3.8639999999996455], - [4.404541, 4.371000000000791], - [4.296041, 3.7840000000004537], - [4.177667, 3.6049999999998583], - [4.29675, 4.265000000000185], - [4.549042, 5.002999999999869], - [4.157583, 3.5049999999996473], - [4.56725, 4.51000000000068], - [4.0515, 4.286999999999708], - [4.01225, 4.306000000000143], - [3.953125, 3.5090000000002064], - [3.936583, 3.3649999999996183], - [4.411417, 4.2640000000000455], - [5.237042, 5.434000000000161], - [4.177083, 4.055999999999393], - [4.293625, 3.739000000000381], - [4.15475, 3.57400000000041], - [3.941875, 3.387000000000029], - [3.952125, 3.4600000000000186], - [7.51275, 3.553999999999835], - [3.9945, 3.54299999999963], - [4.251167, 4.26100000000007], - [3.890333, 3.526000000000362], - [4.274291, 4.179000000000155], - [4.1585, 3.410999999999831], - [4.027083, 3.9810000000000123], - [4.256958, 4.2960000000000775], - [3.847333, 3.3289999999999154], - [4.331083, 4.157000000000188], - [4.204084, 3.9569999999997663], - [4.481083, 4.442999999999753], - [4.154, 4.011000000000209], - [4.089875, 4.153999999999769], - [4.321333, 4.2239999999997835], - [4.046791, 4.026999999999781], - [3.897, 3.4920000000000506], - [3.93475, 3.307000000000393], - [4.141541, 4.1959999999998665], - [5.069292, 5.126999999999882], - [4.418708, 4.624999999999879], - [3.823916, 3.5080000000000666], - [3.995666, 3.6079999999998336], - [3.922041, 3.4689999999999444], - [4.237916, 3.8489999999997693], - [4.105416, 4.10099999999991], - [4.087334, 3.9829999999998478], - [4.229667, 3.649999999999487], - [3.8745, 3.7479999999998626], - [4.367, 3.661999999999832], - [3.933917, 3.518000000000132], - [4.274625, 3.858000000000139], - [4.54775, 4.229000000000482], - [4.219917, 3.7319999999994025], - [3.878042, 3.358999999999668], - [3.860209, 3.401999999999905], - [3.96325, 3.87000000000004], - [3.912708, 3.343000000000096], - [3.988416, 3.87900000000041], - [4.176875, 4.226999999999759], - [4.207625, 3.6170000000002034], - [3.671459, 3.6290000000001044], - [3.891084, 3.8389999999997038], - [4.03325, 4.32699999999997], - [4.3285, 4.323000000000299], - [4.06225, 3.961999999999577], - [4.224583, 4.1739999999999], - [4.095583, 4.058999999999813], - [3.984667, 3.402999999999601], - [4.055416, 4.153000000000073], - [4.047625, 3.5799999999999166], - [4.130084, 3.893999999999842], - [4.084667, 3.916999999999504], - [4.131666, 4.47099999999967], - [3.843, 3.3490000000000464], - [4.075792, 3.638999999999726], - [3.710958, 3.3650000000000624], - [4.243375, 3.251000000000115], - [4.191458, 4.3839999999999435], - [4.877708, 4.4319999999999915], - [4.412459, 4.385999999999779], - [4.238041, 4.728999999999317], - [4.592708, 4.340999999999706], - [4.228042, 3.759000000000068], - [4.326541, 4.226999999999315], - [4.524375, 4.088000000000314], - [4.315458, 3.9690000000001113], - [4.181291, 3.8640000000000896], - [4.202084, 3.630000000000244], - [4.27575, 4.030999999999452], - [4.08575, 3.7909999999996558], - [4.388375, 3.95800000000035], - [4.265291, 3.830999999999918], - [4.756834, 4.423000000000066], - [4.110791, 3.995000000000193], - [4.175833, 3.9649999999999963], - [4.199833, 4.242999999999775], - [4.032625, 3.954999999999931], - [3.792084, 3.7879999999996805], - [3.981875, 4.348999999999936], - [4.324167, 4.354999999999887], - [4.143125, 3.486000000000544], - [4.233417, 4.47799999999976] - ] - }, - "wall_medians_ms": { - "baseline": 4.079292000000001, - "candidate": 4.176978999999999 - }, - "change_percent": 2.394704767395872 - } - ], - "output_sha256": "44efbafb2b822ee4be08be526ff59f0c8f4ed2f9a1efd15d103414291e1457f0", - "summary": { - "baseline": { - "count": 360, - "wall_median_ms": 4.0816875, - "cpu_median_ms": 3.954499999999861 - }, - "candidate": { - "count": 360, - "wall_median_ms": 4.156166499999999, - "cpu_median_ms": 3.9955000000000407 - }, - "change_ms": 0.0744789999999993, - "change_percent": 1.824710980446187 - } - }, - "env-current": { - "argv": ["env", "current", "node", "--json"], - "cwd_depth": 0, - "rounds": [ - { - "samples": { - "baseline": [ - [4.282333, 4.210999999999743], - [4.17575, 3.8729999999995712], - [4.35475, 4.437000000000246], - [4.478416, 4.473999999999201], - [4.393083, 4.4800000000000395], - [4.410833, 4.472000000000698], - [4.189208, 4.0399999999998215], - [4.666708, 4.541999999999824], - [4.055583, 3.8130000000000663], - [4.292834, 4.125000000000156], - [4.22575, 4.185999999998913], - [4.239958, 3.8959999999992334], - [4.246958, 4.550000000000054], - [4.333, 4.2320000000000135], - [4.176917, 4.278000000000226], - [5.570125, 5.296999999999663], - [5.296875, 4.838999999999594], - [5.608958, 5.283000000000371], - [4.938417, 4.4789999999999], - [5.299041, 4.614000000000118], - [4.275667, 4.025000000000389], - [4.515709, 3.9329999999999643], - [4.773916, 4.776000000000558], - [4.336166, 4.265000000000185], - [4.548583, 4.50100000000031], - [4.639916, 3.9769999999998973], - [5.7035, 4.954000000000569], - [4.86275, 4.169000000000089], - [4.471375, 4.3319999999997805], - [6.694292, 5.561000000000149], - [6.103083, 6.204999999999572], - [7.614584, 5.767000000000522], - [5.70875, 5.193000000000225], - [5.016042, 4.78299999999976], - [4.606167, 4.455999999999349], - [4.268417, 4.306999999999839], - [4.301167, 4.368000000000372], - [4.376125, 4.32599999999983], - [4.384333, 4.51700000000077], - [4.105708, 4.17299999999976], - [4.312667, 4.388000000000503], - [4.24175, 4.260000000000375], - [4.129125, 3.8400000000002876], - [4.332125, 4.078999999999944], - [4.280166, 4.141999999999868], - [4.464584, 4.618999999999929], - [4.163417, 4.072000000000742], - [4.06425, 4.2999999999997485], - [4.4265, 3.8119999999999266], - [4.441667, 4.506000000000121], - [4.021458, 4.071000000000602], - [4.210583, 3.8749999999989626], - [4.118542, 3.577999999999193], - [4.197, 4.437999999999498], - [4.142875, 3.658999999999857], - [4.247917, 3.9839999999999876], - [3.861125, 3.745999999999583], - [4.298458, 3.6009999999997433], - [4.052833, 3.9440000000006137], - [4.039209, 3.959000000000046], - [4.322875, 4.2730000000013035], - [4.331375, 4.726999999999926], - [4.243791, 4.384999999999195], - [4.189291, 3.547000000000189], - [4.084, 4.2759999999999465], - [3.822167, 3.4729999999996153], - [3.626083, 3.306000000000253], - [4.520833, 3.672999999999149], - [4.3625, 3.8370000000007565], - [4.678959, 4.786999999999431], - [4.298667, 4.258000000000095], - [3.892584, 3.633999999999915], - [4.126459, 3.826000000000107], - [4.582375, 4.542000000000712], - [4.529334, 4.274999999999807], - [4.482667, 4.4240000000002055], - [4.477792, 3.8410000000004274], - [4.656459, 4.878999999999856], - [4.722083, 4.914999999999559], - [4.333792, 4.141000000000616], - [4.463584, 4.548000000000663], - [4.877083, 4.709999999999326], - [5.172458, 4.983000000000182], - [5.083708, 4.7040000000002635], - [4.777166, 4.625000000000767], - [4.632, 4.634000000000249], - [5.074292, 4.756999999999678], - [4.756042, 4.438999999999638], - [5.462125, 5.209000000000685], - [4.718458, 4.578999999999667], - [4.731959, 4.3920000000001735], - [4.804083, 4.329000000000249], - [4.632, 4.338999999999871], - [4.726875, 4.18200000000013], - [5.523542, 5.219999999999558], - [4.807542, 4.511999999999183], - [5.601625, 5.351000000000106], - [5.078, 4.751999999999867], - [4.4075, 4.310000000000258], - [4.208667, 4.253000000000284], - [4.542291, 4.775000000000418], - [4.251792, 4.011000000000209], - [4.3045, 4.256999999999955], - [4.192166, 4.035000000000011], - [4.377292, 3.950000000000564], - [4.578291, 4.418999999999507], - [4.927833, 4.5640000000002345], - [4.958084, 4.876999999999576], - [4.813417, 4.649999999999821], - [4.287209, 4.6640000000000015], - [4.554584, 4.673999999999623], - [4.541916, 3.8960000000001216], - [4.296375, 4.152999999999629], - [4.74475, 4.66100000000047], - [4.368583, 3.994000000000497], - [4.436458, 4.254999999999676], - [4.325458, 3.7520000000004217], - [4.366917, 3.826000000000107], - [4.412125, 4.19000000000036], - [4.598584, 4.558000000001172] - ], - "candidate": [ - [4.574625, 4.470000000000418], - [4.516542, 4.884000000000555], - [4.360667, 4.399000000000264], - [4.400792, 4.66200000000061], - [4.336292, 4.353999999999303], - [4.467291, 4.537000000000013], - [4.505667, 4.502999999999702], - [4.503333, 4.545000000000243], - [4.342292, 4.472999999999949], - [4.568042, 4.552000000000334], - [4.366709, 4.258000000000983], - [4.326834, 4.218999999999973], - [4.243708, 4.260000000000375], - [4.335125, 4.446999999999868], - [4.18375, 4.241999999999635], - [4.972833, 4.222000000000392], - [5.753, 5.6280000000006325], - [5.553958, 5.044999999999966], - [5.18375, 5.056999999999867], - [5.447583, 5.241999999999969], - [4.997542, 4.354999999999443], - [4.739334, 4.551999999999445], - [4.643167, 4.141999999999868], - [4.712042, 4.128999999999827], - [4.839459, 4.290000000000127], - [4.684541, 4.869999999999486], - [5.216916, 4.433999999999827], - [5.0665, 5.101999999999052], - [4.513125, 4.20700000000096], - [4.935417, 4.519000000000162], - [5.6205, 5.265999999999771], - [6.415792, 5.933999999999884], - [5.596875, 5.1160000000001205], - [4.860459, 4.626000000000019], - [5.330291, 5.088999999999899], - [5.020917, 4.552000000000334], - [4.474292, 4.551000000000194], - [4.398875, 4.1399999999995885], - [4.372542, 3.9410000000001943], - [4.558042, 4.724999999999646], - [4.406667, 4.437999999999498], - [4.496958, 4.839999999999733], - [4.75025, 4.378999999999245], - [4.399917, 4.4880000000002696], - [4.322458, 4.642000000000479], - [4.402167, 4.46999999999953], - [4.371958, 4.497999999999891], - [4.252208, 4.349999999999632], - [4.233166, 4.526000000000252], - [4.571375, 4.0079999999997895], - [4.162791, 3.5730000000002704], - [4.212416, 4.473000000000837], - [4.135292, 3.7490000000008905], - [4.348166, 3.6849999999999383], - [4.235, 4.4800000000000395], - [4.182416, 3.7320000000002906], - [4.510167, 3.87900000000041], - [4.65775, 4.819000000000351], - [4.156583, 4.588999999999288], - [4.189459, 3.669999999999618], - [4.524084, 3.9359999999994955], - [4.265, 3.641999999999257], - [4.24125, 3.834000000000337], - [4.263958, 3.58300000000078], - [4.080583, 3.7269999999995918], - [4.557542, 4.668000000000561], - [4.282959, 3.7399999999996325], - [4.173416, 4.34900000000038], - [4.568, 4.540000000000433], - [4.614792, 4.057000000000421], - [4.177083, 3.5959999999999326], - [4.11025, 3.5489999999995803], - [4.057291, 3.690999999999889], - [7.44475, 5.1229999999993225], - [4.9905, 5.0400000000001555], - [4.859416, 4.0319999999995915], - [4.794958, 4.6439999999998705], - [4.500875, 4.693999999999754], - [4.005166, 3.547000000000189], - [4.683792, 4.978000000000371], - [4.613125, 4.01199999999946], - [5.346459, 4.853999999999914], - [5.257833, 5.094000000000598], - [5.234417, 4.885999999999058], - [5.18875, 5.1229999999993225], - [4.927625, 4.725999999999786], - [5.078375, 4.8560000000001935], - [4.899584, 4.411000000000165], - [5.33025, 5.010999999999655], - [4.937917, 4.592999999999847], - [4.804292, 4.612000000000727], - [4.687917, 4.277999999999338], - [5.0045, 4.917999999999978], - [4.721542, 4.580000000000695], - [4.522125, 4.16599999999967], - [4.515792, 4.499000000000919], - [5.135, 4.577000000000275], - [4.90275, 4.453999999999958], - [4.355, 4.3839999999999435], - [4.412292, 4.351999999999023], - [4.58025, 4.5000000000001705], - [4.30075, 4.199999999999093], - [4.34625, 4.691000000000223], - [4.404916, 4.5239999999999725], - [4.382292, 4.195000000000171], - [4.712333, 4.827999999999832], - [5.406625, 5.12500000000049], - [5.04775, 4.832999999999643], - [4.725541, 4.593000000000735], - [4.663834, 4.813999999999652], - [4.386459, 4.440000000000666], - [4.519333, 4.495999999999611], - [4.676459, 4.412000000000305], - [4.72125, 4.175999999999291], - [4.400709, 4.680999999999713], - [4.600459, 3.9250000000006224], - [4.469083, 4.6829999999991045], - [4.475875, 4.338999999999871], - [4.793083, 4.5679999999999055], - [4.304375, 4.206999999999184] - ] - }, - "wall_medians_ms": { - "baseline": 4.411479, - "candidate": 4.540813 - }, - "change_percent": 2.931760527478433 - }, - { - "samples": { - "baseline": [ - [4.011875, 4.072999999999993], - [4.127833, 4.1799999999998505], - [4.089709, 4.115000000000535], - [4.208708, 4.178999999999711], - [4.307334, 4.7389999999989385], - [4.328334, 4.666999999999533], - [4.245917, 4.151000000000238], - [4.538458, 4.558999999999536], - [4.372416, 4.701999999999984], - [4.329, 3.7000000000002586], - [4.536083, 3.809999999999647], - [4.353792, 3.86299999999995], - [4.618084, 4.680999999999713], - [3.949083, 3.3560000000001367], - [4.183542, 3.776999999999475], - [6.195708, 3.7359999999999616], - [4.332375, 4.3639999999998125], - [5.656375, 5.73200000000007], - [5.820333, 5.570999999999771], - [5.050541, 4.64700000000029], - [4.949416, 4.141999999999868], - [4.691292, 3.9519999999999555], - [4.686, 4.302000000000916], - [4.791667, 4.6759999999999025], - [4.597583, 4.297999999999469], - [4.63325, 4.020000000000579], - [4.555834, 4.3189999999988515], - [4.50225, 4.205999999999932], - [4.239541, 3.667000000000087], - [5.09175, 4.9720000000004205], - [4.56475, 4.4789999999999], - [4.293291, 4.208000000000212], - [4.480334, 4.332000000000669], - [4.245041, 4.077000000000552], - [4.19325, 4.113000000000255], - [4.27375, 4.224000000000672], - [4.137, 3.9639999999998565], - [4.332458, 3.766999999999854], - [4.207166, 4.190999999999612], - [4.212167, 4.443000000000197], - [4.209667, 3.6140000000006722], - [4.278375, 4.687999999999803], - [4.162542, 3.667000000000087], - [4.094416, 4.089999999999705], - [4.24225, 3.890000000000171], - [4.081042, 3.8840000000002206], - [4.246667, 4.194000000000031], - [4.172208, 4.3720000000000425], - [4.436041, 4.627000000001047], - [4.213958, 4.17600000000018], - [4.217291, 3.5359999999995395], - [4.317209, 4.415000000000724], - [4.372791, 4.551000000000194], - [4.087, 3.998000000000168], - [4.177875, 3.635000000000055], - [4.163292, 3.6599999999999966], - [4.345375, 4.1279999999996875], - [4.362, 3.6730000000009255], - [4.435041, 4.321000000000019], - [4.573542, 4.217999999998945], - [4.503542, 4.412000000000305], - [4.687291, 4.248999999999725], - [4.680709, 4.850999999998606], - [4.5835, 4.686000000000412], - [4.522708, 4.474999999999341], - [4.484209, 4.3189999999988515], - [4.452625, 4.269999999999108], - [4.604792, 4.784999999999151], - [4.3195, 4.33400000000006], - [4.405625, 4.62799999999941], - [4.363625, 4.320000000000768], - [4.263542, 4.090999999998957], - [4.527667, 4.745999999999917], - [4.183708, 3.4970000000003054], - [4.215125, 4.2359999999996845], - [4.317125, 4.222999999999644], - [4.414667, 4.279000000000366], - [4.510167, 4.440000000000666], - [4.193791, 4.150000000000098], - [4.58625, 4.723000000000255], - [4.279333, 3.6280000000008528], - [4.229875, 3.5850000000001714], - [4.349083, 4.069000000000322], - [5.716833, 5.497999999999337], - [6.046541, 5.603000000000691], - [5.210667, 5.383000000000138], - [4.631333, 4.851999999999634], - [4.608541, 4.667000000000421], - [4.255458, 4.415000000000724], - [4.2385, 3.6170000000002034], - [4.177833, 4.387999999999614], - [4.680958, 4.503999999998953], - [4.695292, 3.775000000000972], - [4.40125, 4.36600000000098], - [4.327042, 4.556000000000893], - [3.808083, 3.404000000001517], - [4.13625, 3.4919999999996065], - [4.243416, 3.6560000000003257], - [5.519917, 4.662999999999862], - [4.774125, 4.722000000000115], - [4.194166, 3.638999999999726], - [4.426917, 4.4480000000000075], - [4.349583, 4.569999999999297], - [4.3225, 4.514000000000351], - [4.20025, 4.160999999999859], - [5.012875, 5.009999999999515], - [4.541333, 4.363999999998924], - [4.176291, 3.569999999999851], - [4.272792, 4.208999999999463], - [4.270042, 4.17299999999976], - [4.340291, 4.123000000000765], - [4.432292, 3.671000000000646], - [4.259667, 3.6610000000001364], - [4.37575, 3.7130000000002994], - [6.124417, 3.650000000000375], - [4.063542, 3.5319999999998686], - [4.653084, 4.654999999999632], - [4.0845, 3.501999999999228], - [3.970375, 4.14099999999884], - [4.723041, 4.429000000000904] - ], - "candidate": [ - [4.289375, 3.9879999999996585], - [4.384708, 4.432000000000436], - [4.13075, 4.392999999999425], - [4.560709, 4.582000000000086], - [4.279584, 4.722000000001003], - [4.428291, 4.673000000000371], - [5.156, 3.891000000000311], - [4.122625, 3.616000000000952], - [4.226667, 3.9239999999995945], - [5.287375, 5.542000000000158], - [4.579459, 4.3639999999998125], - [4.558875, 4.9320000000001585], - [4.598958, 3.9800000000003166], - [4.460542, 4.545000000000243], - [4.444417, 4.305999999999699], - [4.382375, 4.373000000000182], - [4.131458, 3.702000000000538], - [4.66225, 4.63099999999983], - [6.375459, 5.461000000000382], - [6.9225, 5.3909999999994795], - [5.1675, 4.839999999999733], - [4.607709, 4.621000000000208], - [4.966, 4.3439999999996814], - [4.905, 4.1719999999996205], - [5.444667, 4.817000000000959], - [5.048791, 4.514999999999603], - [4.670417, 3.975000000000506], - [4.152375, 3.6880000000003577], - [5.674166, 5.678999999999768], - [5.007459, 4.988999999999244], - [4.836792, 4.874000000000933], - [4.872, 4.92699999999946], - [4.417917, 4.180999999999102], - [4.823625, 4.649999999999821], - [4.310708, 4.305999999999699], - [4.486333, 4.291999999999518], - [4.409708, 4.265999999999437], - [4.406, 4.1810000000008785], - [4.430584, 3.7359999999999616], - [4.832625, 3.8770000000001303], - [4.454292, 3.8869999999988636], - [4.175167, 4.49500000000036], - [4.585167, 3.966000000000136], - [4.525709, 3.906000000000631], - [4.453292, 3.893999999998954], - [4.212084, 3.8049999999998363], - [4.377917, 4.557000000000144], - [4.457375, 4.064999999999763], - [4.361708, 3.7839999999995655], - [4.358083, 3.8029999999995567], - [4.397208, 4.048000000000052], - [4.094083, 3.5869999999995628], - [4.539167, 3.970999999999947], - [4.228166, 3.7089999999997403], - [4.072542, 4.2439999999999145], - [4.227, 4.386000000000223], - [4.2295, 3.6810000000002674], - [4.209583, 4.486999999999242], - [4.877625, 3.99699999999914], - [5.228875, 4.940000000001277], - [4.929292, 4.4919999999999405], - [4.744666, 4.364000000000701], - [4.893209, 4.915000000000447], - [4.564042, 4.64800000000043], - [4.47575, 4.316000000001097], - [4.486291, 4.202000000001149], - [4.49775, 4.000000000000448], - [4.553542, 4.9760000000000915], - [4.537083, 4.461000000000936], - [4.637333, 4.150000000000098], - [4.67875, 5.011999999999794], - [4.760334, 4.479000000000788], - [4.554333, 4.693999999999754], - [4.581666, 4.724999999999646], - [4.224625, 3.6850000000008265], - [4.33075, 3.946000000000005], - [4.32675, 4.145999999999539], - [4.391625, 3.7050000000000693], - [4.384292, 3.945999999999117], - [4.381625, 4.0129999999996], - [4.278792, 4.048999999999303], - [4.117708, 4.237999999999964], - [4.224209, 3.7119999999992714], - [5.939333, 5.338000000000953], - [5.386833, 4.623999999999739], - [4.462209, 4.080000000000084], - [4.723333, 4.906999999999329], - [4.531667, 4.02099999999983], - [4.847667, 4.219999999999224], - [4.572, 4.387000000000363], - [4.477667, 4.402999999999935], - [4.339542, 3.8170000000006254], - [4.650958, 4.437999999999498], - [4.536042, 3.8989999999996527], - [4.519084, 4.377999999999105], - [3.971959, 3.656999999998689], - [4.252125, 4.346999999999213], - [4.636042, 4.852999999999774], - [4.716209, 3.982000000000596], - [4.8195, 4.834999999999923], - [4.524167, 3.9920000000002176], - [4.731125, 4.141999999999868], - [4.415292, 3.8090000000003954], - [4.466375, 4.154999999999909], - [4.138084, 4.119999999999457], - [4.284209, 3.907000000000771], - [4.742917, 4.1810000000008785], - [4.3095, 4.387000000001251], - [4.30875, 3.7199999999995015], - [4.54975, 4.218000000000721], - [4.608959, 4.508999999998764], - [4.270459, 4.419000000000395], - [4.237709, 4.251999999999256], - [4.74275, 4.1739999999999], - [4.43325, 4.598999999999798], - [4.333375, 4.432999999999687], - [4.263084, 3.847000000000378], - [4.279167, 3.8570000000008875], - [4.239084, 4.395000000000593], - [4.503542, 3.8809999999998013] - ] - }, - "wall_medians_ms": { - "baseline": 4.342833, - "candidate": 4.481979 - }, - "change_percent": 3.2040375487613737 - }, - { - "samples": { - "baseline": [ - [4.104208, 4.108999999999696], - [4.494542, 4.288999999999987], - [4.584709, 4.929000000000627], - [5.495167, 5.142999999999454], - [4.5105, 4.5760000000001355], - [4.081792, 3.8279999999994985], - [4.230084, 4.313999999999929], - [4.033, 3.947000000000145], - [4.656667, 4.577000000000275], - [4.350875, 4.299000000000497], - [4.258458, 4.145999999999539], - [4.224792, 4.230999999999874], - [4.164708, 4.03700000000029], - [4.495459, 4.460000000000797], - [4.19875, 4.405000000000214], - [4.551917, 4.158000000000328], - [4.71625, 3.8879999999998915], - [4.5205, 4.526999999999504], - [4.005333, 3.9449999999998653], - [4.370625, 3.7609999999999033], - [3.903625, 3.474999999999895], - [4.376583, 4.049999999999443], - [4.044667, 4.424999999999457], - [4.18775, 3.6690000000003664], - [4.196875, 4.1399999999995885], - [4.004833, 3.3879999999992805], - [4.23, 3.6799999999992394], - [4.178583, 3.721999999999781], - [4.223875, 3.607000000000582], - [4.091542, 3.426000000000151], - [4.317875, 3.918000000000532], - [4.026083, 3.86299999999995], - [4.207792, 4.34900000000038], - [3.953, 3.8869999999997518], - [4.472125, 3.755000000000841], - [4.450375, 3.905999999999743], - [4.306833, 3.819000000000017], - [4.105459, 4.374999999999574], - [4.015709, 3.963000000000605], - [4.28875, 4.574999999999108], - [4.411083, 4.1719999999996205], - [4.869708, 4.577999999999527], - [4.291625, 3.8909999999994227], - [4.422834, 4.383000000000692], - [4.09325, 3.9810000000004564], - [4.604125, 4.693999999998866], - [4.26275, 4.153999999999769], - [4.499916, 4.631000000000718], - [4.421875, 4.443999999999448], - [4.338458, 4.393000000000313], - [4.652167, 4.5640000000002345], - [4.345916, 4.137999999999309], - [4.401541, 4.185999999999801], - [4.197292, 4.537000000000013], - [4.339459, 3.9829999999998478], - [4.411458, 4.2320000000000135], - [4.486959, 4.618999999999929], - [4.507041, 4.840999999998985], - [4.359125, 4.236999999999824], - [4.238958, 3.562999999999761], - [4.376042, 4.348999999999492], - [4.070625, 3.663000000000416], - [4.124667, 4.34100000000015], - [4.50625, 3.943000000000474], - [4.035375, 3.5469999999993007], - [4.236166, 3.799000000000774], - [4.272292, 4.618999999999929], - [4.080834, 3.999000000000308], - [4.161375, 4.705999999999655], - [4.273542, 3.87800000000027], - [4.007334, 3.3909999999997], - [5.614458, 5.954000000000015], - [4.816541, 4.849000000000103], - [4.441042, 3.9199999999990354], - [4.562708, 4.767000000000188], - [4.463, 3.8640000000000896], - [4.242208, 4.137999999999309], - [4.883333, 3.989999999999938], - [4.31025, 4.269999999999996], - [4.374625, 4.573999999999856], - [4.186583, 3.6250000000004334], - [4.832834, 4.112999999999367], - [5.344667, 4.621000000000208], - [5.324041, 5.190999999999946], - [4.832292, 4.734999999999268], - [4.7255, 4.384999999999195], - [4.426084, 4.203000000000401], - [4.651375, 4.593999999999987], - [4.424292, 4.16699999999981], - [4.645375, 4.3600000000001415], - [4.3525, 4.347000000000101], - [4.445291, 3.8509999999991607], - [4.147, 4.0300000000002], - [4.48575, 3.7479999999998626], - [4.138625, 3.811000000000675], - [4.200416, 3.790000000000404], - [4.31475, 4.258999999999347], - [4.238042, 3.4080000000002997], - [4.207584, 4.035999999999262], - [4.106084, 4.128000000000576], - [4.364458, 3.6639999999987793], - [4.228958, 3.6519999999997665], - [4.081875, 3.5020000000010043], - [4.033458, 3.635000000000055], - [4.270375, 4.093000000000124], - [4.394542, 4.394000000001341], - [4.120083, 4.203000000000401], - [4.193541, 4.4480000000000075], - [4.31925, 4.431000000000296], - [4.178416, 4.552000000000334], - [4.299166, 4.63599999999964], - [4.039292, 3.581999999999752], - [4.510959, 4.647999999999541], - [4.396291, 3.5769999999999413], - [4.069458, 4.308000000000867], - [4.436292, 3.979000000000177], - [4.352, 4.443999999999448], - [3.85575, 3.4890000000000754], - [3.997167, 4.329999999999501], - [4.047208, 3.6349999999991667] - ], - "candidate": [ - [4.141458, 4.161999999999999], - [6.198084, 4.862000000000144], - [4.738833, 4.412999999999556], - [4.418459, 3.9949999999997488], - [4.858375, 4.8560000000001935], - [4.271, 4.401000000000543], - [4.101042, 4.3519999999999115], - [4.146625, 4.273999999999667], - [4.301, 4.475000000000229], - [4.314083, 4.46799999999925], - [4.53225, 4.696000000000922], - [4.394292, 4.565999999999626], - [4.598958, 4.548999999999026], - [4.423708, 3.7329999999995422], - [4.176666, 4.609999999999559], - [5.364125, 5.173000000000982], - [4.635541, 4.733999999999128], - [4.887459, 4.082000000000363], - [4.510792, 3.9600000000001856], - [4.252625, 4.219000000000861], - [4.088125, 3.629999999999356], - [4.090958, 4.0930000000010125], - [4.4365, 4.701999999999984], - [4.476709, 4.62899999999955], - [4.503083, 3.9170000000012806], - [4.539459, 4.243000000000663], - [4.250583, 4.104000000000774], - [4.287667, 4.342999999999542], - [4.394917, 4.735000000000156], - [4.361667, 4.272999999999527], - [4.162, 3.658999999999857], - [4.19225, 3.7529999999996733], - [4.210083, 3.777999999999615], - [4.386833, 3.7919999999997955], - [5.3405, 5.543999999999549], - [4.3505, 4.725000000000534], - [4.316458, 4.144000000000148], - [4.101334, 3.5799999999994725], - [4.395167, 3.826000000000107], - [4.733792, 4.143000000000896], - [4.39825, 3.8330000000001974], - [5.0095, 5.3520000000002454], - [4.703834, 5.020000000000024], - [4.637625, 4.983000000000182], - [4.559875, 4.31599999999932], - [4.554583, 4.414000000000584], - [4.669292, 4.96800000000075], - [4.772667, 4.5359999999998735], - [4.445833, 4.433000000000575], - [4.502542, 4.426999999999737], - [4.542709, 4.113999999999507], - [4.967292, 4.9960000000002225], - [4.533792, 4.6520000000001005], - [4.527042, 4.703000000000124], - [4.662459, 4.604000000000497], - [4.626167, 4.855000000000054], - [4.320375, 3.9920000000002176], - [4.745625, 4.861000000000892], - [4.851209, 4.506000000000121], - [4.303459, 4.386999999999475], - [4.312958, 3.6660000000008353], - [4.003042, 3.5730000000002704], - [4.020958, 4.126999999999548], - [4.400292, 4.5880000000000365], - [4.46225, 4.913999999999419], - [4.603666, 4.734000000000016], - [4.762, 3.978000000000037], - [4.424042, 4.558000000000284], - [4.369625, 3.773999999999056], - [4.074167, 3.543000000000518], - [4.502458, 4.7160000000001645], - [5.663166, 4.889999999999617], - [4.649791, 4.590000000000316], - [5.005083, 5.027000000000115], - [4.758125, 4.804000000000919], - [4.262917, 4.229999999999734], - [4.392, 3.8920000000004507], - [4.359875, 4.228000000000343], - [4.487083, 3.9349999999993557], - [4.576417, 4.719000000000584], - [4.689917, 4.870999999999626], - [4.424208, 3.8970000000002614], - [4.96175, 5.087999999999759], - [5.702875, 5.696000000000367], - [5.112916, 4.803000000000779], - [4.658167, 4.558000000000284], - [4.657333, 4.458999999999769], - [4.324166, 4.547000000000523], - [4.601958, 4.534999999999734], - [4.25825, 4.531000000000063], - [4.388834, 4.427000000000625], - [4.491833, 3.8759999999999906], - [4.640917, 4.042000000000101], - [4.665125, 3.973999999999478], - [4.4025, 4.939000000000249], - [4.507083, 4.811999999999372], - [4.680042, 4.136000000000806], - [4.248333, 4.141999999999868], - [4.524208, 3.8720000000003196], - [4.161792, 3.610000000000113], - [4.446583, 4.303000000000168], - [4.470667, 4.434999999999967], - [4.472, 4.0959999999996555], - [4.332291, 4.133999999999638], - [4.4625, 3.814000000000206], - [4.367834, 3.888999999999143], - [4.715916, 4.187999999999192], - [4.124625, 3.6209999999998743], - [4.492791, 3.8890000000000313], - [4.194208, 3.5109999999995978], - [4.39975, 3.842000000000567], - [4.211667, 4.424999999999457], - [4.431084, 3.7920000000006837], - [4.349167, 4.533999999999594], - [4.496541, 4.137999999999309], - [4.911333, 4.432000000000436], - [4.455334, 3.8000000000009138], - [4.666208, 4.334999999999312], - [4.145, 3.503000000000256], - [4.242959, 4.734000000000904] - ] - }, - "wall_medians_ms": { - "baseline": 4.3085415000000005, - "candidate": 4.462375 - }, - "change_percent": 3.570430968345062 - } - ], - "output_sha256": "7580ff3b52a2d98af85492b8d877503abd2ba58191106735906656c246a1680a", - "summary": { - "baseline": { - "count": 360, - "wall_median_ms": 4.350229000000001, - "cpu_median_ms": 4.251000000000005 - }, - "candidate": { - "count": 360, - "wall_median_ms": 4.497354, - "cpu_median_ms": 4.386999999999919 - }, - "change_ms": 0.14712499999999906, - "change_percent": 3.382005866817561 - } - }, - "env-current-deep": { - "argv": ["env", "current", "node", "--json"], - "cwd_depth": 20, - "rounds": [ - { - "samples": { - "baseline": [ - [5.024917, 4.95100000000015], - [4.926042, 5.174999999999486], - [4.745792, 4.805000000001058], - [5.379792, 5.484000000000933], - [5.412458, 5.354999999999777], - [4.783875, 4.273000000000415], - [4.924084, 5.066000000000237], - [4.744375, 4.229000000000482], - [4.646542, 4.421999999999926], - [5.043125, 4.509999999999792], - [4.817708, 4.692999999999614], - [5.036709, 4.371000000000791], - [4.767458, 4.756999999999678], - [6.252333, 5.4000000000007375], - [5.377583, 5.467999999999584], - [5.104042, 5.393999999999011], - [4.942292, 4.433999999999827], - [4.909292, 4.679000000000322], - [5.0045, 5.245000000000388], - [5.068875, 4.334999999999312], - [5.20225, 5.207999999999657], - [4.968833, 4.680000000000462], - [4.82875, 4.827999999999832], - [4.984666, 4.686999999999664], - [5.551333, 4.96700000000061], - [5.335166, 4.701999999999984], - [5.048417, 4.81400000000054], - [5.375667, 4.903000000000546], - [5.025792, 5.022000000000304], - [5.1735, 5.039000000000016], - [5.058334, 4.800999999999611], - [5.099208, 4.850000000001131], - [4.986625, 4.8320000000003915], - [5.583375, 5.6840000000004665], - [5.445833, 5.704999999998961], - [5.008125, 4.8040000000000305], - [5.230958, 5.204000000000875], - [5.346875, 5.073000000000327], - [5.66375, 5.452000000000901], - [5.395167, 5.324999999999136], - [5.0795, 4.887000000000086], - [5.519959, 5.361000000000615], - [4.645834, 4.182999999999382], - [5.124166, 5.349999999999966], - [4.789459, 4.99000000000116], - [4.808416, 4.567000000000654], - [4.90825, 5.197000000000784], - [5.203583, 4.900999999999378], - [4.908791, 4.239000000000104], - [4.602125, 4.272000000000276], - [4.6475, 4.151000000000238], - [4.903375, 4.698000000000313], - [5.034334, 4.737999999999687], - [4.569667, 3.999000000001196], - [5.039958, 5.190999999999946], - [4.900292, 4.821999999998994], - [4.427208, 4.1679999999999495], - [5.725416, 6.069000000000102], - [5.205042, 5.179000000000045], - [4.846209, 4.493999999999332], - [4.936, 4.634000000001137], - [5.901958, 6.1229999999996565], - [4.850125, 4.687000000000552], - [4.674, 4.197999999999702], - [4.7575, 4.075000000001161], - [4.689208, 4.887000000000086], - [5.038917, 4.381999999999664], - [4.645542, 4.239000000000104], - [4.602833, 4.129999999999967], - [4.837208, 4.137000000000057], - [4.96725, 4.455000000000098], - [4.3855, 4.005000000000258], - [4.790709, 4.056999999998645], - [4.576833, 4.7680000000003275], - [4.703542, 4.45499999999921], - [4.7425, 4.871000000000514], - [4.867208, 4.65400000000038], - [4.358541, 4.020000000000579], - [4.987792, 5.008999999999375], - [4.738583, 5.022000000000304], - [4.564125, 4.151000000000238], - [4.356708, 4.0519999999997225], - [4.689708, 4.472000000000698], - [4.789334, 4.776999999998921], - [6.401875, 6.2309999999996535], - [6.446292, 6.46199999999908], - [6.165084, 5.639999999999645], - [5.664625, 5.057000000000755], - [7.281584, 6.465999999999639], - [5.441458, 5.548000000000997], - [4.92525, 4.443000000000197], - [5.03175, 5.217000000000027], - [4.768667, 4.571000000000325], - [5.327875, 5.560000000000898], - [5.907125, 5.943999999999505], - [5.375833, 5.627000000000493], - [5.042166, 5.138000000000531], - [5.11825, 4.974999999999952], - [4.935, 5.022000000000304], - [4.915292, 4.7269999999990375], - [4.991375, 5.120999999999043], - [5.029167, 5.069000000000656], - [4.799959, 4.144000000000148], - [4.949125, 5.231000000000208], - [4.803625, 4.690999999999335], - [4.792125, 4.457000000000377], - [4.403333, 4.027000000000669], - [5.483459, 4.962000000000799], - [4.564125, 4.170000000000229], - [4.473833, 3.9290000000011815], - [5.457083, 4.936999999998193], - [6.0385, 4.30199999999914], - [5.166958, 4.975000000001728], - [5.564, 5.211000000000965], - [5.12625, 4.33600000000034], - [5.88325, 5.123000000001099], - [4.889667, 5.162000000000333], - [5.016709, 4.398000000000124], - [5.096583, 5.622999999999934], - [5.142375, 4.5640000000002345] - ], - "candidate": [ - [5.245417, 5.590999999999902], - [5.075167, 5.279999999999951], - [4.66725, 4.616999999999649], - [5.236791, 5.369999999999209], - [5.504042, 4.77499999999953], - [5.128125, 5.199000000000176], - [5.543917, 5.504999999999427], - [5.186959, 5.266999999999911], - [4.890708, 4.78899999999971], - [4.683625, 4.717000000000304], - [5.178875, 4.573999999999856], - [5.846166, 5.371000000000237], - [4.889917, 4.194999999999283], - [5.924459, 5.503000000000036], - [5.394625, 4.615000000000258], - [4.819666, 4.274000000000555], - [4.834709, 4.978000000000371], - [4.90875, 4.405999999999466], - [5.23925, 4.580999999999946], - [4.841042, 4.730000000000345], - [5.84475, 5.755999999999872], - [5.323708, 5.391000000000368], - [5.592791, 5.888999999999811], - [5.487417, 5.736999999999881], - [5.237667, 4.715000000000913], - [5.794334, 5.467999999998696], - [5.72, 5.488999999999855], - [5.64525, 5.364999999999398], - [4.850167, 4.837999999999454], - [5.54325, 5.166000000000892], - [5.462833, 5.198000000000036], - [5.241708, 5.040999999999407], - [5.273167, 5.160999999999305], - [5.717375, 5.739999999999412], - [5.66175, 5.914999999999893], - [5.54825, 5.529000000001005], - [5.660125, 5.813999999999098], - [5.680416, 5.428999999999462], - [5.2925, 5.26900000000019], - [6.0045, 5.644999999999456], - [5.595917, 5.537000000000347], - [6.138125, 5.969999999999587], - [5.062959, 5.202999999999847], - [5.263042, 5.29400000000102], - [4.881125, 4.897999999998959], - [5.362625, 5.655999999999217], - [5.074125, 4.538999999999405], - [5.206542, 5.363000000000007], - [4.689375, 4.271000000000136], - [4.88525, 4.921999999999649], - [4.891542, 5.046000000000106], - [4.950083, 4.558999999999536], - [4.6995, 4.247999999999585], - [4.856959, 4.391000000000034], - [4.627667, 4.455999999999349], - [5.129542, 5.152000000000712], - [5.351667, 5.43900000000086], - [5.095958, 4.289999999999239], - [4.960875, 4.364999999999952], - [5.406959, 5.738000000000909], - [5.666584, 5.132999999998944], - [4.927208, 4.300999999999888], - [5.630125, 5.156999999999634], - [5.162, 4.521000000000441], - [5.02875, 4.868999999999346], - [4.983583, 4.548999999999026], - [5.103334, 5.10799999999989], - [4.594917, 4.933000000000298], - [4.928875, 5.296999999999663], - [4.853125, 4.544000000000992], - [4.993584, 5.1709999999989265], - [4.96, 4.34400000000057], - [5.020167, 5.209000000000685], - [4.912125, 4.418000000000255], - [4.794375, 4.138000000000197], - [4.6355, 4.114999999999647], - [4.743375, 4.379000000000133], - [4.721125, 4.721999999999227], - [4.947709, 4.760000000000986], - [4.702167, 4.15599999999916], - [4.884958, 4.995000000000083], - [4.646958, 4.192999999999891], - [5.135125, 4.590999999999568], - [5.008792, 4.271000000001024], - [6.798667, 6.619000000000597], - [5.815084, 5.378000000000327], - [6.062125, 6.271000000001692], - [6.038917, 6.001999999998731], - [6.164208, 6.119999999999237], - [5.3155, 4.7280000000000655], - [5.150042, 4.681999999998965], - [5.533292, 5.466000000000193], - [4.933167, 4.491999999999052], - [5.86725, 6.127000000001104], - [5.5245, 5.37299999999874], - [5.040958, 5.024999999999835], - [5.483958, 5.646999999999736], - [5.121, 5.1360000000002515], - [5.357208, 5.228999999999928], - [5.289542, 4.954000000001457], - [5.093292, 5.088000000000648], - [5.247417, 5.471999999999255], - [5.403542, 5.074000000000467], - [5.401709, 4.597999999997882], - [4.833292, 4.306000000001475], - [4.649458, 4.436999999999358], - [5.070917, 4.695999999999145], - [4.916166, 4.46799999999925], - [4.921667, 4.806999999999562], - [5.04525, 4.398000000000124], - [4.97925, 4.515000000001379], - [4.665458, 4.958999999999492], - [5.156, 4.353999999999303], - [5.80175, 5.354999999999777], - [5.229292, 5.083999999998312], - [5.131208, 4.457999999999629], - [4.657167, 4.095999999998767], - [5.159209, 5.43000000000049], - [5.232167, 4.537000000000901], - [5.749792, 6.16299999999903] - ] - }, - "wall_medians_ms": { - "baseline": 4.9895835, - "candidate": 5.153021 - }, - "change_percent": 3.2755740033211023 - }, - { - "samples": { - "baseline": [ - [4.586166, 4.268999999998968], - [4.794917, 4.570000000001073], - [4.986542, 5.01700000000227], - [4.926125, 4.811000000000121], - [4.759708, 4.730000000000345], - [4.763917, 4.801000000000499], - [4.936666, 4.632000000000858], - [4.661334, 4.144999999999399], - [4.666292, 4.65400000000038], - [4.511916, 4.194000000001807], - [4.912833, 4.432000000001324], - [4.608209, 4.611000000000587], - [4.688709, 4.331000000000529], - [4.896792, 4.7800000000002285], - [4.789541, 4.953000000000429], - [4.839291, 4.288999999999987], - [4.944125, 5.183999999999855], - [4.921042, 4.993999999999943], - [4.617666, 4.944999999999311], - [5.423417, 4.760999999998461], - [5.70125, 5.131000000000441], - [5.55875, 4.926999999998571], - [5.651583, 5.031000000000674], - [5.450416, 5.105999999999611], - [4.941083, 4.928999999998851], - [4.803625, 4.211000000001519], - [5.00025, 4.975999999999203], - [4.987292, 4.310000000000258], - [4.856833, 4.720999999999975], - [4.971916, 5.261999999998324], - [4.643709, 4.052000000001499], - [6.196917, 5.582000000002196], - [5.560833, 4.882000000000275], - [5.940792, 6.071999999999633], - [5.905292, 5.87900000000019], - [5.036125, 5.028999999998618], - [5.177375, 4.599000000000686], - [5.215083, 4.486999999999242], - [4.8345, 4.084000000002419], - [5.390833, 5.284999999998874], - [5.005291, 5.095999999999989], - [5.069833, 4.9850000000013495], - [5.092167, 4.538000000000153], - [4.709792, 4.331999999998004], - [4.8025, 4.143000000000896], - [5.127542, 4.871999999998877], - [4.781, 4.6860000000013], - [4.760042, 4.578999999999667], - [4.85875, 4.920999999999509], - [4.7245, 4.177000000000319], - [4.62825, 4.742000000000246], - [5.001709, 4.979000000000511], - [4.97575, 5.085999999998592], - [4.73675, 4.78799999999957], - [4.44825, 3.9440000000006137], - [4.970792, 4.197999999998814], - [4.754834, 5.134000000001748], - [4.770125, 4.3720000000000425], - [4.524125, 4.049000000001968], - [5.084542, 5.064000000000846], - [4.313958, 3.9879999999996585], - [4.8325, 4.98300000000107], - [4.683875, 4.068000000000183], - [4.775375, 4.065999999998127], - [4.691, 4.17500000000004], - [4.733416, 4.164999999998642], - [4.9165, 4.45399999999907], - [4.851375, 5.293999999999244], - [4.845583, 4.47699999999962], - [4.574625, 3.9290000000011815], - [4.397083, 4.0160000000000196], - [4.425708, 3.8879999999998915], - [4.637625, 4.47699999999962], - [4.396167, 4.244999999999166], - [4.822584, 4.261999999998878], - [4.360084, 3.9250000000006224], - [4.518208, 4.025000000000389], - [4.522167, 3.9569999999997663], - [4.406875, 3.849999999999909], - [4.610708, 4.775000000000418], - [4.357583, 4.411999999998528], - [4.671083, 4.180000000001627], - [4.467042, 3.9010000000008205], - [4.5345, 4.03700000000029], - [5.483542, 5.548999999998472], - [5.2385, 5.192000000000974], - [5.776459, 5.062000000002342], - [5.3385, 5.173999999998458], - [5.277167, 4.583999999999477], - [4.858875, 4.3210000000009074], - [5.2995, 5.336999999999037], - [5.85725, 5.705000000000737], - [6.154, 5.931999999999604], - [5.891917, 5.528000000001754], - [5.448709, 5.304999999999893], - [4.9535, 4.859999999998976], - [4.557416, 4.499000000000919], - [4.938708, 4.7280000000000655], - [4.855292, 4.78799999999957], - [5.0265, 4.929000000000627], - [5.363792, 4.679999999998685], - [4.751459, 4.99000000000116], - [5.175375, 4.466000000000747], - [4.869667, 4.547000000000523], - [5.800208, 5.859000000000947], - [5.338541, 5.584999999999951], - [4.884334, 4.531000000000063], - [4.840292, 4.8040000000000305], - [4.7635, 4.295000000000826], - [4.684584, 4.8440000000002925], - [4.921125, 4.987999999999104], - [4.811959, 5.373000000002293], - [5.038083, 4.984999999999573], - [4.636667, 4.241000000000383], - [4.986833, 4.875999999999436], - [4.657083, 5.110000000001946], - [5.020417, 5.046000000000106], - [4.862125, 4.62899999999955], - [4.783291, 4.588000000001813], - [4.716709, 4.4069999999987175] - ], - "candidate": [ - [5.218, 5.058000000000007], - [5.225542, 5.110999999999422], - [5.239375, 4.885999999999058], - [5.16425, 5.0819999999980325], - [5.055334, 4.457000000000377], - [4.8735, 4.4469999999989795], - [5.039458, 4.605999999999], - [4.993459, 5.221000000000586], - [5.073, 4.50200000000045], - [4.912333, 5.248999999999171], - [4.877125, 5.077999999997473], - [4.922458, 4.4189999999986185], - [5.005375, 4.528000000000532], - [4.99, 4.4599999999999085], - [4.725417, 4.279999999999617], - [4.659167, 4.253999999999536], - [4.832709, 4.236999999999824], - [5.109083, 4.470000000001306], - [5.077541, 4.266000000001213], - [5.700875, 5.473999999999535], - [6.048917, 6.280999999999537], - [8.057625, 5.60000000000116], - [6.052042, 5.917000000000172], - [5.06125, 4.607000000000028], - [5.477375, 5.217000000000027], - [5.305375, 5.755000000000621], - [5.181167, 4.649000000000569], - [5.068542, 4.964999999998554], - [4.674541, 4.194000000000031], - [4.826584, 4.258000000001871], - [4.978625, 4.78299999999976], - [5.842708, 5.301999999998586], - [6.4065, 6.7779999999988405], - [6.438833, 6.285999999999348], - [5.176416, 5.199000000001064], - [5.519542, 5.2880000000001814], - [5.296667, 5.129999999999413], - [5.23575, 5.25299999999973], - [4.928709, 5.312999999999235], - [6.093375, 5.588000000001259], - [5.535375, 4.713999999999885], - [5.389917, 5.085999999998592], - [5.023042, 5.171000000000703], - [5.04, 4.78999999999985], - [5.028792, 4.865999999999815], - [5.269583, 4.6920000000003625], - [5.077084, 4.374999999999574], - [5.054708, 4.4360000000001065], - [4.706333, 4.186000000000689], - [5.0165, 4.3720000000000425], - [4.831917, 4.2549999999987875], - [5.043459, 4.50200000000045], - [5.194709, 4.480000000000928], - [5.195042, 4.582000000000974], - [4.986, 4.479999999999151], - [5.31225, 5.264999999999631], - [4.741125, 4.2149999999985255], - [4.863792, 4.903999999999797], - [5.111708, 5.25500000000001], - [4.795708, 4.099999999999326], - [4.970875, 4.434999999999079], - [4.912084, 4.300000000000637], - [4.807292, 4.92399999999904], - [5.139334, 5.058000000001783], - [5.883625, 5.905000000000271], - [5.042333, 5.475000000000563], - [5.048167, 5.044000000001603], - [4.855166, 4.307000000000727], - [4.931875, 5.079000000000278], - [4.555042, 4.269999999999996], - [4.865708, 4.627999999998522], - [4.367167, 4.070000000000462], - [4.738584, 4.18400000000041], - [4.714125, 4.964000000001079], - [4.550708, 4.542999999999964], - [4.552417, 4.839999999999733], - [4.930917, 4.863000000000284], - [4.630958, 4.646999999998513], - [4.204791, 4.000000000001336], - [4.733292, 5.060999999999538], - [4.335792, 4.0180000000020755], - [4.662209, 4.335999999998563], - [4.905041, 4.779999999998452], - [5.006458, 5.060999999999538], - [4.7315, 4.229000000000482], - [5.249667, 4.5770000000011635], - [5.500917, 5.18899999999789], - [5.328417, 4.765000000000796], - [5.53125, 5.257000000000289], - [5.22, 4.580999999999946], - [5.461458, 5.266999999999911], - [5.83925, 5.643999999998428], - [5.669875, 6.016999999999939], - [6.348917, 5.829999999999558], - [5.542125, 4.993000000000691], - [5.073834, 5.065000000000097], - [5.400292, 5.1069999999988624], - [5.368125, 5.337000000000813], - [5.210625, 4.898999999999987], - [5.218666, 4.730999999999597], - [4.812417, 4.276000000000835], - [5.106, 4.646999999998513], - [5.161958, 5.506000000000455], - [5.108958, 5.09199999999943], - [5.270834, 5.351999999998469], - [5.9005, 5.70199999999943], - [5.46575, 5.6840000000004665], - [5.011458, 5.112999999999701], - [4.870917, 5.0589999999992585], - [5.712625, 5.779000000000423], - [5.297625, 5.464999999999165], - [5.114958, 4.984999999997797], - [4.89825, 4.938000000000997], - [4.977542, 4.986000000000601], - [4.949042, 5.1469999999991245], - [4.864459, 4.327999999999221], - [4.8715, 4.386999999999475], - [5.191125, 4.325000000001467], - [4.796292, 4.143999999998371], - [4.968542, 4.227000000000203] - ] - }, - "wall_medians_ms": { - "baseline": 4.8560625, - "candidate": 5.055021 - }, - "change_percent": 4.097115718753619 - }, - { - "samples": { - "baseline": [ - [5.1225, 5.046000000000106], - [4.834333, 4.572000000001353], - [4.940459, 5.073000000001215], - [4.732916, 4.850999999998606], - [5.19475, 5.10300000000008], - [4.76425, 4.17500000000004], - [4.521917, 4.2149999999985255], - [4.992375, 5.015000000000214], - [4.791833, 4.524999999999224], - [5.346167, 4.716999999999416], - [5.196, 4.545000000000243], - [4.67325, 4.300000000000637], - [4.945208, 4.390000000000782], - [5.245167, 5.275999999998504], - [4.969541, 4.484000000001487], - [5.172458, 4.531000000000063], - [4.95325, 4.884999999999806], - [4.965959, 4.953999999999681], - [4.730208, 4.129999999999967], - [4.968125, 4.853000000000662], - [4.724584, 4.255000000000564], - [4.821666, 4.2960000000000775], - [5.0285, 4.684999999998496], - [4.99775, 4.33400000000006], - [4.975375, 4.459000000000657], - [4.713625, 4.448999999999259], - [5.189333, 5.156999999998746], - [4.755875, 4.189999999999472], - [4.980583, 4.386000000000223], - [6.064708, 5.720000000000169], - [6.542708, 6.111999999999895], - [5.880458, 5.723999999998952], - [5.436583, 5.28700000000093], - [5.312709, 4.614000000000118], - [4.952708, 4.842999999999265], - [5.022375, 4.2960000000000775], - [5.17175, 5.284000000001399], - [4.894292, 4.376000000000602], - [5.130875, 4.256999999999067], - [4.870917, 4.279000000000366], - [6.506208, 5.739999999999412], - [5.55125, 5.6300000000018], - [5.301, 5.383999999999389], - [5.0495, 4.9850000000013495], - [4.974042, 5.459999999999354], - [4.980083, 4.514000000000351], - [5.403375, 4.583999999999477], - [5.020875, 4.142000000001644], - [4.806583, 5.2400000000005775], - [5.16075, 4.9429999999990315], - [4.939125, 4.9320000000001585], - [5.176208, 4.453000000001595], - [4.938167, 4.694999999999894], - [4.741458, 5.093000000000458], - [4.689583, 4.8130000000004], - [5.322875, 5.630000000000024], - [5.099917, 4.414000000000584], - [5.016958, 4.567999999999017], - [5.369084, 5.002999999998536], - [5.479541, 5.529000000001005], - [5.206834, 4.629999999998802], - [5.086292, 4.879999999998219], - [5.016667, 4.95100000000015], - [4.947542, 4.7170000000011925], - [4.952125, 4.569999999999297], - [5.285083, 5.062999999999818], - [4.821084, 4.80800000000059], - [4.899625, 4.691999999998586], - [5.1615, 5.011000000001431], - [5.291833, 4.835999999999174], - [4.97475, 4.400999999999655], - [4.948458, 4.786999999998542], - [4.935041, 4.911999999997363], - [4.661667, 4.166000000001446], - [4.590625, 4.059999999999064], - [5.086709, 4.381999999999664], - [4.95275, 4.46099999999916], - [4.846708, 4.715000000000913], - [4.89075, 4.870000000000374], - [5.151458, 4.503999999998953], - [5.165875, 4.887000000000086], - [4.95825, 5.21199999999844], - [4.903333, 4.291000000000267], - [4.768042, 4.339000000001647], - [4.815875, 4.758000000000706], - [4.943417, 4.972999999999672], - [5.143958, 4.6229999999987115], - [5.722208, 5.188999999999666], - [5.597875, 5.535000000001844], - [5.381625, 4.78999999999985], - [4.990208, 4.402999999999935], - [4.881583, 4.431000000000296], - [4.739334, 4.244999999999166], - [4.610208, 4.039999999998045], - [4.682917, 3.9610000000003254], - [4.666833, 4.066000000001679], - [4.795916, 4.747999999999308], - [5.315125, 4.497999999999891], - [4.779917, 4.3189999999988515], - [5.412917, 5.568000000000239], - [5.273792, 5.252000000002255], - [5.456333, 5.449000000002258], - [5.155667, 5.205000000000126], - [4.948792, 4.906999999999329], - [4.704583, 4.561000000000703], - [4.882917, 4.697999999999425], - [5.026875, 4.818999999999463], - [5.058709, 5.14400000000137], - [4.775167, 4.717999999998668], - [4.923958, 4.936000000000718], - [5.11575, 5.140999999998286], - [4.43875, 4.559000000000424], - [4.680333, 4.348000000000241], - [5.134042, 4.331000000000529], - [5.00875, 4.045999999998884], - [5.308959, 5.414000000001806], - [6.549292, 6.759000000000626], - [6.014292, 5.142999999998565], - [5.859917, 6.034000000001427], - [5.489416, 4.853999999999914] - ], - "candidate": [ - [5.059209, 4.979999999999762], - [5.189375, 5.119999999998015], - [5.24475, 5.4560000000005715], - [5.136041, 5.568000000000239], - [5.003583, 4.974999999999952], - [5.189334, 5.114999999999981], - [4.9995, 5.202000000000595], - [5.169083, 4.622000000001236], - [4.719834, 4.319000000000628], - [5.017708, 5.07599999999897], - [5.3255, 5.129000000000161], - [5.158625, 4.507000000000261], - [5.709584, 6.099999999999994], - [5.960417, 4.925000000000068], - [5.345542, 5.389999999998452], - [5.293584, 5.354000000000525], - [4.932417, 4.412000000000305], - [5.196833, 4.583000000000226], - [5.114208, 4.745999999999029], - [5.120125, 4.554999999999865], - [4.940542, 4.8330000000014195], - [4.752708, 4.509999999999792], - [4.840334, 4.394000000001341], - [4.992709, 4.89899999999821], - [4.939584, 5.143000000000342], - [5.094583, 5.074000000000467], - [5.774625, 4.879000000000744], - [4.794209, 5.130000000001189], - [5.17025, 4.536999999999125], - [4.989709, 4.3210000000009074], - [5.83525, 5.971999999999866], - [5.651083, 4.925000000000068], - [5.813625, 5.1469999999991245], - [5.53675, 5.58000000000014], - [5.51375, 4.549000000000802], - [5.225166, 5.247000000000668], - [5.11625, 4.45199999999879], - [5.625625, 4.633999999999361], - [5.221834, 5.471000000000004], - [5.203375, 4.961999999999023], - [7.426958, 5.711000000001576], - [6.898958, 5.548999999998472], - [5.606458, 5.329999999998947], - [6.5225, 5.223000000000866], - [5.010459, 5.1009999999998], - [5.307291, 4.656999999999911], - [5.046958, 4.979000000000511], - [5.349208, 5.183999999998079], - [5.025125, 4.552999999999585], - [5.134666, 4.526999999999504], - [5.292916, 4.6280000000002985], - [4.918, 4.5869999999990085], - [5.154375, 5.219999999999558], - [5.384, 5.57500000000033], - [5.088, 4.336999999999591], - [5.6955, 4.804999999999282], - [5.37, 5.525999999999698], - [5.369125, 4.758999999999958], - [5.645417, 5.424000000001428], - [5.379833, 5.271999999999721], - [5.473416, 5.46200000000141], - [5.456959, 5.504000000001952], - [5.151834, 4.963999999999302], - [5.018083, 4.915999999999698], - [5.363208, 5.0480000000003855], - [4.963083, 4.9440000000000595], - [5.233709, 5.034999999999457], - [5.380292, 5.084000000001865], - [5.434333, 5.142999999998565], - [5.283708, 4.812000000001149], - [4.792916, 4.818000000000211], - [5.036708, 4.312000000002314], - [5.056041, 4.71300000000241], - [5.684666, 5.6659999999979505], - [5.136542, 5.193000000002002], - [5.073584, 4.90999999999886], - [4.846333, 5.018000000001521], - [4.947, 4.403999999999186], - [4.9875, 4.496999999998863], - [5.326291, 4.6530000000011285], - [5.308375, 5.441999999998615], - [5.08325, 4.644000000002535], - [4.986709, 4.9829999999992935], - [5.176416, 4.987999999999104], - [4.862167, 4.344999999998933], - [4.91525, 4.340000000000899], - [5.240375, 4.820000000002267], - [5.79975, 6.099999999998218], - [6.045791, 6.0509999999993624], - [5.32275, 5.316999999999794], - [4.966708, 4.904999999999049], - [4.870542, 4.428000000000765], - [5.075083, 4.898000000000735], - [5.52725, 5.277000000001308], - [4.558416, 4.1570000000010765], - [4.748458, 4.708999999998298], - [5.2805, 4.742000000000246], - [4.945125, 5.095999999999989], - [4.943708, 4.877000000000464], - [4.879917, 4.348000000000241], - [6.468958, 6.15799999999922], - [5.163833, 5.291999999997188], - [5.106375, 5.39799999999957], - [5.162708, 5.046000000000106], - [4.930541, 4.913000000000167], - [5.345375, 5.21899999999853], - [5.665584, 5.491000000001023], - [4.987584, 4.673000000000371], - [5.179417, 5.169000000000423], - [4.975417, 5.198000000000036], - [4.822208, 4.744000000000526], - [4.88375, 5.017000000000493], - [5.049292, 4.9829999999992935], - [5.47825, 5.402000000000129], - [4.919583, 5.265999999998883], - [6.396667, 5.5789999999991124], - [6.632834, 6.115000000001203], - [5.580959, 5.253999999998982], - [5.730209, 5.580999999999392], - [6.293, 6.339000000000539] - ] - }, - "wall_medians_ms": { - "baseline": 4.9853955, - "candidate": 5.1696665 - }, - "change_percent": 3.696216278126774 - } - ], - "output_sha256": "7580ff3b52a2d98af85492b8d877503abd2ba58191106735906656c246a1680a", - "summary": { - "baseline": { - "count": 360, - "wall_median_ms": 4.952729, - "cpu_median_ms": 4.771500000000373 - }, - "candidate": { - "count": 360, - "wall_median_ms": 5.130375, - "cpu_median_ms": 4.979500000000137 - }, - "change_ms": 0.1776460000000002, - "change_percent": 3.586830613990788 - } - }, - "env-which": { - "argv": ["env", "which", "node"], - "cwd_depth": 0, - "rounds": [ - { - "samples": { - "baseline": [ - [4.438875, 4.321999999998383], - [4.580959, 4.4260000000022615], - [5.07825, 4.519000000000162], - [4.837917, 4.572000000001353], - [4.397208, 4.2960000000000775], - [4.549333, 4.427999999998988], - [4.590541, 4.329999999999501], - [4.658792, 3.87100000000018], - [4.623833, 4.1970000000013385], - [4.3915, 4.197999999998814], - [4.383125, 3.8669999999996207], - [4.310375, 4.549000000000802], - [4.316208, 3.603000000000023], - [4.495958, 4.557000000000144], - [4.225625, 3.5930000000004014], - [4.43225, 3.717999999999222], - [4.278333, 3.892999999997926], - [4.512375, 3.854000000000468], - [4.223041, 3.5729999999993822], - [4.0925, 4.155000000000797], - [4.374291, 4.1269999999986595], - [4.223125, 4.177999999999571], - [4.16625, 3.6610000000010245], - [4.102625, 4.139000000000337], - [4.445125, 4.110999999999976], - [4.183417, 3.7450000000003314], - [4.358, 3.7820000000010623], - [4.199542, 3.5360000000004277], - [4.322666, 4.166999999998922], - [4.631833, 4.468000000001027], - [4.754584, 4.604999999999748], - [4.234917, 3.864000000001866], - [4.389917, 4.1789999999988225], - [4.654916, 4.5349999999988455], - [4.523625, 4.849000000000103], - [4.563375, 4.293999999998022], - [4.659542, 4.753999999998371], - [4.758791, 5.11000000000017], - [4.501166, 4.450000000000287], - [4.286542, 4.2839999999984], - [4.281083, 4.481000000001956], - [4.573, 4.453000000001595], - [4.128, 3.994000000000497], - [4.462959, 4.500999999999422], - [3.956334, 3.9479999999993964], - [4.129209, 4.103000000000634], - [4.17575, 4.204999999998904], - [4.382416, 4.6520000000001005], - [4.426666, 3.787000000000873], - [4.446041, 3.805999999999088], - [4.3525, 3.7120000000001596], - [4.05325, 4.162000000000887], - [4.712125, 4.023999999999361], - [4.261792, 4.1399999999995885], - [3.976583, 3.516000000001185], - [4.40825, 3.8809999999998013], - [4.319333, 3.8689999999999003], - [4.186, 3.8909999999994227], - [4.686584, 5.24599999999964], - [5.270833, 5.466000000000193], - [5.705417, 5.958999999997161], - [5.131791, 4.276000000000835], - [5.089459, 4.184999999999661], - [5.212958, 4.659000000000191], - [4.28325, 3.720999999998753], - [4.526542, 4.3720000000000425], - [4.072292, 3.7010000000012866], - [4.663333, 3.9010000000008205], - [4.169041, 3.671999999998121], - [4.477333, 3.8590000000020552], - [4.378, 3.8330000000001974], - [4.351875, 4.288000000000736], - [4.351291, 4.286000000000456], - [4.2935, 3.788999999999376], - [4.463084, 3.973999999999478], - [4.430083, 4.5239999999999725], - [4.761875, 4.445999999999728], - [4.62675, 3.752000000002198], - [4.57025, 3.9639999999998565], - [4.285584, 4.057999999998785], - [4.380416, 3.7079999999996005], - [4.074292, 4.108000000000445], - [4.239417, 4.247999999998697], - [4.053042, 3.8400000000002876], - [4.159416, 3.648000000001872], - [4.317167, 4.519999999999413], - [4.509416, 4.521000000000441], - [4.404917, 3.6959999999996995], - [4.187709, 3.6249999999995453], - [4.454375, 3.8669999999996207], - [4.755042, 4.9429999999990315], - [4.314125, 3.906999999999883], - [4.250125, 3.568000000001348], - [4.52125, 4.660000000001219], - [4.195292, 4.298999999999609], - [4.382875, 3.711000000000908], - [4.149625, 4.067000000000931], - [4.880833, 4.935000000001466], - [4.146667, 4.381000000000412], - [4.4215, 4.481999999999431], - [4.373292, 4.516999999999882], - [4.54575, 4.310000000000258], - [4.178291, 4.865999999999815], - [4.228083, 4.125000000001933], - [4.305583, 4.465999999998971], - [4.471334, 4.523000000000721], - [4.311917, 4.645000000001787], - [4.143458, 4.342000000001178], - [4.634875, 5.0589999999992585], - [4.29625, 4.428000000000765], - [4.224791, 4.316999999998572], - [4.453084, 4.510000000001568], - [4.123334, 4.36600000000098], - [4.361584, 4.531000000001839], - [4.492125, 4.884999999999806], - [4.194083, 3.9130000000007215], - [4.207167, 4.293999999999798], - [4.337292, 4.346999999999213], - [4.357334, 4.535000000000622], - [4.217166, 4.273999999998779] - ], - "candidate": [ - [4.973417, 5.053000000000196], - [4.528875, 4.660999999998694], - [4.901417, 4.9200000000002575], - [6.115959, 5.129999999999413], - [4.526833, 3.865999999998593], - [4.687375, 3.9720000000009748], - [4.665916, 4.1330000000012745], - [4.417542, 4.580000000000695], - [3.981208, 3.6269999999980485], - [4.341833, 3.811000000000675], - [4.451833, 4.523000000000721], - [5.092708, 3.9749999999987295], - [4.338291, 4.419999999999646], - [4.424416, 4.272000000000276], - [4.433416, 4.293000000000546], - [4.724166, 5.071000000000936], - [4.198125, 4.318000000001376], - [4.183208, 3.8309999999981414], - [4.512709, 4.623000000002264], - [4.669125, 4.118999999999318], - [4.318292, 3.663000000001304], - [4.332833, 3.7880000000001246], - [4.682208, 4.936999999998193], - [4.037375, 3.5609999999994812], - [4.342209, 3.994000000000497], - [4.54475, 4.876999999998688], - [4.439334, 3.873999999999711], - [4.250125, 4.445000000000476], - [4.583292, 4.04800000000094], - [4.638291, 5.023999999998807], - [4.731333, 4.583999999999477], - [4.696042, 4.856999999997669], - [4.775375, 4.989000000001909], - [4.847333, 4.5770000000011635], - [4.554334, 4.5010000000011985], - [4.488042, 3.9900000000017144], - [4.389041, 4.34300000000043], - [4.857958, 5.3909999999994795], - [4.087333, 4.271000000001024], - [4.795125, 4.702999999999236], - [4.371458, 4.262999999999906], - [4.641542, 4.60399999999872], - [4.484375, 4.724999999998758], - [4.641417, 4.5880000000000365], - [4.349292, 4.595000000000127], - [4.261584, 4.322000000001935], - [4.517458, 4.6749999999988745], - [4.381833, 4.483000000000459], - [4.592667, 4.754999999999399], - [4.589334, 4.48599999999999], - [4.382875, 4.146999999999679], - [4.6195, 5.088000000000648], - [4.593083, 3.9840000000008757], - [4.542125, 4.024999999998613], - [4.486542, 4.006000000000398], - [4.213334, 4.2039999999996525], - [4.442, 3.8359999999997285], - [4.716542, 3.9370000000005234], - [5.446542, 4.690000000000083], - [5.371833, 4.580999999999946], - [5.086334, 5.245000000002165], - [5.810166, 5.6480000000007635], - [5.114084, 5.046000000000106], - [4.691334, 4.666000000000281], - [4.804292, 4.850000000001131], - [4.663584, 4.071999999998965], - [4.361416, 3.948999999998648], - [4.550792, 4.884999999999806], - [4.257791, 4.52900000000156], - [4.267416, 4.201999999999373], - [4.497583, 4.903999999999797], - [4.274375, 4.688999999999055], - [4.259334, 3.7719999999996645], - [4.409833, 4.846999999999824], - [4.609875, 4.611000000000587], - [4.313667, 3.619000000000483], - [4.667166, 3.8999999999997925], - [4.810084, 4.861999999999256], - [4.924083, 5.193999999999477], - [4.326417, 3.883000000000081], - [4.573375, 4.820999999999742], - [4.400209, 4.153000000000517], - [4.739208, 4.3600000000001415], - [4.311959, 3.6810000000002674], - [4.426333, 4.345999999998185], - [4.414708, 3.823000000000576], - [4.472375, 4.784000000000788], - [4.38525, 5.010999999999655], - [4.315083, 4.545999999999495], - [4.347958, 4.52900000000156], - [4.740917, 4.176000000001068], - [4.640958, 4.643999999998982], - [4.4115, 4.380999999998636], - [4.362875, 3.99799999999928], - [4.356917, 3.866000000000369], - [4.243292, 3.7399999999987443], - [4.342166, 3.805999999999088], - [4.827292, 4.812999999998624], - [4.321833, 4.345999999999961], - [5.113, 4.79900000000022], - [4.293416, 4.34300000000043], - [4.465083, 4.433999999999827], - [4.393458, 4.103000000000634], - [4.418208, 4.324999999997914], - [4.206333, 4.315000000000069], - [4.364917, 4.561999999999955], - [4.120666, 4.436999999999358], - [4.344791, 4.566999999997989], - [4.332417, 4.435000000000855], - [4.436625, 4.720999999999975], - [4.663333, 4.828999999999084], - [4.303208, 4.765999999998272], - [4.550875, 4.781999999998732], - [4.1815, 4.337999999998843], - [4.345375, 4.19800000000059], - [4.572084, 4.252000000001033], - [4.087709, 4.3309999999987525], - [4.613208, 4.6280000000002985], - [4.471292, 4.184999999999661], - [4.517458, 4.411000000001053] - ] - }, - "wall_medians_ms": { - "baseline": 4.3761455, - "candidate": 4.471833500000001 - }, - "change_percent": 2.1865817761315576 - }, - { - "samples": { - "baseline": [ - [4.730708, 4.1039999999998855], - [4.207125, 4.217000000000581], - [4.037, 4.0300000000002], - [4.370083, 4.348999999999492], - [4.270417, 4.486999999999242], - [4.251459, 4.039000000002346], - [3.942875, 4.01199999999946], - [4.202791, 3.668000000001115], - [4.541041, 4.208999999999463], - [4.230083, 4.198999999999842], - [4.002375, 4.045000000001409], - [4.115875, 4.068000000000183], - [4.194792, 3.97299999999845], - [4.43775, 3.866000000000369], - [4.407959, 4.191000000002276], - [4.384708, 4.128999999998939], - [4.345042, 4.355000000000331], - [4.494541, 4.687999999999803], - [4.296, 4.431999999999547], - [4.264458, 4.315000000001845], - [4.462417, 4.253999999999536], - [4.382583, 4.351999999999023], - [4.327125, 4.1910000000005], - [4.481542, 4.632999999998333], - [4.3125, 4.270999999999248], - [4.83275, 4.6520000000001005], - [4.453166, 4.455000000000098], - [4.414584, 4.197999999998814], - [4.168125, 4.370999999999015], - [4.491542, 4.196999999997786], - [4.238667, 3.695000000000448], - [4.016792, 4.180999999999102], - [4.412375, 3.9100000000011903], - [4.039667, 3.3569999999993883], - [4.047917, 4.563000000000983], - [4.07675, 3.3320000000003347], - [4.4655, 4.521999999999693], - [4.197333, 3.5229999999994988], - [4.262375, 4.208999999999463], - [4.25075, 4.469000000000278], - [4.046541, 3.475000000001671], - [4.215292, 3.6829999999987706], - [4.297792, 4.193000000000779], - [4.600875, 4.05500000000103], - [4.2385, 4.364999999998176], - [3.943916, 3.4879999999990474], - [4.487042, 4.52900000000156], - [4.4205, 3.7499999999983658], - [4.4025, 4.426000000000485], - [4.192, 3.686000000000078], - [4.471125, 4.585999999999757], - [4.214083, 3.7169999999999703], - [4.206708, 4.2850000000012045], - [3.893291, 4.229999999999734], - [4.387042, 4.371000000000791], - [4.497875, 4.633000000001886], - [4.407458, 4.434999999997302], - [3.939792, 4.100000000001103], - [4.011333, 4.279000000000366], - [4.1215, 4.06200000000112], - [4.304042, 4.452999999999818], - [4.17425, 4.255000000000564], - [4.321416, 4.410000000000025], - [3.940958, 3.916999999999504], - [4.174625, 4.348999999999492], - [4.228417, 3.9400000000000546], - [3.978625, 4.388999999999754], - [3.948667, 4.125999999999408], - [4.109334, 3.9600000000010738], - [3.882875, 4.130999999999219], - [4.085125, 4.036000000001039], - [3.835, 3.7309999999983745], - [4.122125, 4.056999999999533], - [4.324792, 4.313000000001566], - [4.128833, 3.976999999999009], - [4.128833, 4.305000000000447], - [5.593167, 5.338000000000065], - [4.878458, 4.776999999998921], - [4.878875, 4.452999999999818], - [5.201375, 4.926000000001096], - [5.548333, 5.482999999999905], - [4.810958, 4.704999999999515], - [4.6765, 4.393000000000313], - [4.377667, 3.9210000000000633], - [4.773625, 4.616000000000398], - [4.567083, 4.580000000000695], - [4.299625, 4.231000000000762], - [5.002709, 4.438999999997861], - [4.928958, 4.703000000001012], - [4.875625, 4.6459999999974855], - [4.529459, 4.068000000000183], - [4.281666, 4.096999999999795], - [4.462833, 4.395000000000593], - [4.456334, 4.389999999999006], - [4.236083, 4.3419999999976255], - [4.345958, 4.110000000000724], - [4.208417, 4.314999999998292], - [4.754875, 4.471000000002334], - [4.29475, 4.008999999999929], - [4.248208, 3.7279999999988434], - [3.911125, 3.6170000000002034], - [4.221417, 3.750000000000142], - [4.129917, 4.35900000000089], - [4.036417, 4.151000000000238], - [4.432625, 3.7759999999984473], - [4.948708, 3.56700000000032], - [4.203792, 4.0399999999998215], - [4.218625, 4.482000000002984], - [4.183, 3.5919999999993735], - [4.2565, 3.6290000000001044], - [4.574958, 4.436999999999358], - [4.460084, 3.9839999999990994], - [4.79575, 4.625000000000767], - [4.339166, 4.792999999999381], - [4.326667, 3.6249999999995453], - [4.219041, 3.653999999999158], - [4.126625, 3.6360000000001946], - [4.424834, 4.322999999999411], - [3.973667, 3.519000000000716], - [4.478792, 4.376999999999853] - ], - "candidate": [ - [4.326875, 4.605999999999], - [4.39025, 4.5469999999987465], - [4.264625, 4.23200000000179], - [4.230792, 4.417999999999367], - [4.401166, 4.298000000000357], - [4.261667, 4.31599999999932], - [4.187, 4.336999999999591], - [4.203167, 4.454999999998321], - [4.352917, 4.372000000001819], - [4.34425, 4.013999999997964], - [4.095708, 4.135999999999029], - [4.686459, 4.540999999999684], - [4.396084, 4.243000000002439], - [4.549917, 4.392999999998537], - [4.520667, 4.311999999998761], - [4.372041, 4.336000000002116], - [4.36975, 4.208999999999463], - [4.387, 3.949999999999676], - [4.494291, 4.346999999999213], - [4.737083, 4.9829999999992935], - [4.700083, 4.266000000001213], - [4.61675, 4.566999999999766], - [4.742291, 4.707000000001571], - [4.666083, 4.623999999999739], - [4.525042, 4.266000000001213], - [4.808625, 4.645999999999262], - [4.706375, 4.551000000001082], - [4.837542, 4.678999999999434], - [4.42, 4.021000000001607], - [4.42575, 3.679000000001764], - [4.23075, 4.552000000000334], - [4.388, 3.7680000000008818], - [5.1425, 5.110999999999422], - [4.382334, 4.262000000000654], - [4.176292, 4.216999999998805], - [4.246083, 4.618000000000677], - [4.245166, 3.665999999999059], - [4.140542, 3.743000000000052], - [4.611709, 3.982000000000596], - [4.246041, 4.336999999999591], - [4.511833, 4.064999999998875], - [4.519042, 4.423000000000954], - [4.434333, 3.814000000000206], - [3.99675, 3.5229999999994988], - [4.334625, 4.380000000001161], - [4.400041, 4.061000000000092], - [4.799917, 3.8909999999994227], - [4.84375, 4.542999999999964], - [4.539542, 3.766000000000602], - [4.760417, 5.041999999999547], - [4.586167, 3.9680000000004156], - [4.706083, 4.846000000000572], - [4.466291, 3.865999999998593], - [4.207292, 4.575000000000884], - [4.093709, 4.252999999998508], - [4.808334, 4.935999999998941], - [4.315834, 4.4770000000013965], - [4.227208, 4.31099999999951], - [4.19325, 4.243000000000663], - [4.126209, 4.186999999998164], - [4.1725, 4.45399999999907], - [4.284, 4.315000000000069], - [4.378541, 4.258000000000095], - [4.276292, 4.137999999999309], - [4.533041, 4.924000000000817], - [4.587541, 4.535000000000622], - [4.028791, 4.174000000000788], - [3.92175, 4.14099999999884], - [4.170291, 4.376999999999853], - [4.028291, 4.156000000001825], - [3.937291, 4.344999999998933], - [4.057125, 3.9519999999999555], - [4.382333, 4.551000000002858], - [4.492625, 4.039999999998045], - [4.328625, 4.737999999999687], - [4.309667, 4.642999999999731], - [4.793708, 4.690000000000083], - [6.133708, 6.145000000000067], - [5.431083, 5.246000000001416], - [5.218125, 5.132999999998944], - [5.0015, 4.839999999999733], - [4.6645, 4.735000000000156], - [4.756125, 4.63799999999992], - [4.787458, 4.595000000000127], - [4.657375, 4.434999999999079], - [4.855, 4.691999999998586], - [4.681792, 4.598000000001434], - [4.428625, 4.305999999999699], - [4.904875, 4.655000000001408], - [4.531875, 4.414000000000584], - [4.627542, 4.335000000001088], - [4.563417, 4.846999999999824], - [4.257625, 4.723000000000255], - [4.529, 4.451000000001315], - [4.707667, 4.739000000000715], - [4.60375, 4.801000000000499], - [4.154792, 4.225999999999175], - [4.5295, 4.376000000000602], - [4.699666, 4.737999999999687], - [4.709, 4.477999999998872], - [4.309334, 4.5410000000014605], - [4.699625, 4.701999999998208], - [3.973458, 3.516000000001185], - [4.2915, 3.5799999999994725], - [4.270041, 4.362000000000421], - [4.606292, 4.836000000000951], - [4.456958, 3.6339999999981387], - [4.421083, 3.936999999998747], - [4.497792, 4.2320000000000135], - [4.259833, 4.381000000000412], - [4.187167, 4.399000000001152], - [4.126625, 3.6410000000000053], - [4.778709, 3.8999999999997925], - [4.773333, 4.4130000000013325], - [4.553417, 3.9970000000000283], - [4.376916, 4.260000000000375], - [4.340167, 4.7170000000011925], - [4.169041, 3.6589999999989686], - [4.223917, 4.251000000000005], - [4.602916, 3.9290000000011815] - ] - }, - "wall_medians_ms": { - "baseline": 4.295375, - "candidate": 4.4234165 - }, - "change_percent": 2.9809155195995807 - }, - { - "samples": { - "baseline": [ - [4.633166, 4.490999999998024], - [4.461625, 4.33400000000006], - [4.298625, 4.260000000000375], - [4.247834, 4.087999999999425], - [4.454917, 4.205999999999932], - [4.346084, 4.146000000000427], - [4.445333, 4.328000000000998], - [4.201417, 4.009000000001706], - [4.404, 4.419000000000395], - [4.163333, 4.1679999999999495], - [4.623959, 4.340999999998374], - [4.04975, 3.686000000000078], - [5.405667, 5.444999999999922], - [4.226584, 4.229999999999734], - [4.837792, 4.36800000000126], - [4.368125, 4.391000000000034], - [4.471333, 4.3179999999996], - [4.467583, 4.096999999999795], - [4.391834, 3.5840000000000316], - [4.745542, 5.236000000000018], - [5.201834, 4.5589999999986475], - [4.886167, 4.30199999999914], - [4.762208, 4.519999999999413], - [5.057459, 5.371999999999488], - [4.705459, 4.7399999999999665], - [4.475375, 4.250000000000753], - [4.449375, 4.5469999999987465], - [4.368666, 4.508999999998764], - [4.219542, 3.623000000001042], - [3.857167, 3.5279999999993095], - [4.353625, 4.096000000000544], - [4.326625, 3.7469999999988346], - [4.307583, 4.434999999999079], - [4.430666, 4.068000000000183], - [4.212625, 4.044000000000381], - [4.431958, 3.713999999998663], - [5.782792, 5.207999999999657], - [4.842958, 4.723000000000255], - [4.693416, 4.499999999998394], - [4.588583, 4.607999999997503], - [4.448625, 4.445000000000476], - [4.229417, 4.426999999999737], - [4.484042, 4.33400000000006], - [4.343125, 4.893000000000924], - [4.349708, 4.206000000001708], - [4.135792, 3.501999999999228], - [4.618667, 4.552999999999585], - [3.883833, 3.4360000000006607], - [4.120042, 3.750000000000142], - [4.697166, 4.719000000001472], - [4.743208, 4.113999999999507], - [4.339625, 3.906999999999883], - [4.331333, 3.690000000000637], - [4.672, 3.9970000000000283], - [4.005583, 4.4010000000014315], - [5.027167, 4.9029999999987695], - [4.554709, 4.35000000000052], - [4.67425, 4.396999999999096], - [5.031, 4.291000000000267], - [4.765084, 3.9829999999998478], - [5.105291, 4.626000000001795], - [4.916667, 4.213000000000022], - [4.90325, 4.842999999999265], - [4.988667, 4.526999999999504], - [4.603791, 4.727000000000814], - [5.11625, 4.67200000000112], - [5.716458, 4.979999999999762], - [4.933167, 4.129000000000715], - [4.545541, 3.696000000001476], - [4.411375, 4.137000000000057], - [4.385792, 3.7330000000004304], - [4.54575, 3.71900000000025], - [4.560083, 4.578999999999667], - [4.330791, 4.338000000000619], - [4.510291, 3.875000000000739], - [4.214875, 3.644000000001313], - [4.460417, 3.819000000000017], - [4.559958, 4.564999999999486], - [4.095042, 4.1919999999997515], - [4.202459, 3.955000000001263], - [4.112208, 3.5109999999995978], - [4.394625, 4.20700000000096], - [4.342291, 4.3439999999996814], - [4.325375, 3.7010000000012866], - [4.32725, 4.328999999998473], - [4.104625, 3.6249999999995453], - [4.255166, 3.8340000000012253], - [4.1035, 4.123999999999128], - [4.0835, 3.531000000000617], - [4.122667, 4.0530000000007504], - [4.039375, 3.5720000000001306], - [4.508167, 3.98199999999882], - [4.338125, 3.7380000000020175], - [4.183208, 3.52599999999903], - [4.170416, 3.7920000000006837], - [4.150708, 4.1170000000008145], - [4.183458, 4.137000000000057], - [4.234959, 4.479999999999151], - [4.151458, 3.9650000000008845], - [4.070166, 3.6479999999983193], - [4.533958, 4.056000000000282], - [4.435291, 4.450000000000287], - [4.479459, 4.326000000000718], - [4.361958, 4.42199999999815], - [4.584625, 4.287999999998959], - [4.333875, 4.274000000000555], - [5.134167, 4.777000000000697], - [4.272, 4.138000000001085], - [4.597125, 4.614000000000118], - [4.572167, 4.250000000000753], - [4.491042, 4.201000000000121], - [4.2235, 4.083000000001391], - [4.610542, 4.234999999997768], - [4.634833, 4.1789999999988225], - [4.361375, 4.249999999998977], - [4.478542, 4.363000000001449], - [4.367542, 4.289999999999239], - [4.265833, 4.34100000000015], - [4.230125, 4.137000000001834], - [4.207292, 4.208999999999463] - ], - "candidate": [ - [4.276666, 4.1050000000009135], - [4.440292, 4.364999999999952], - [4.3945, 4.1909999999987235], - [4.419875, 4.279000000000366], - [4.400792, 4.302000000000916], - [4.667666, 4.61999999999918], - [4.548666, 4.4589999999988805], - [4.668083, 4.459999999998132], - [4.458459, 4.433000000000575], - [4.711292, 4.570000000001073], - [4.784542, 4.355000000000331], - [4.689167, 4.376000000000602], - [4.636334, 4.271999999998499], - [4.276959, 4.438000000000386], - [4.505375, 4.421999999999926], - [4.292041, 4.279999999999617], - [4.367, 3.9080000000009107], - [4.582125, 4.513999999998575], - [4.246709, 3.875000000000739], - [4.2365, 3.835000000000477], - [5.216458, 4.889000000002142], - [5.195458, 5.196000000001533], - [5.185917, 5.1469999999991245], - [5.502708, 5.290000000000461], - [4.668417, 4.184999999999661], - [4.956708, 4.823000000000022], - [4.273834, 3.808000000001144], - [4.400333, 4.67200000000112], - [4.208, 3.665999999999059], - [4.488, 4.020000000000579], - [4.368542, 3.7169999999999703], - [4.309292, 4.543999999999215], - [4.521292, 4.322000000001935], - [4.245083, 3.5709999999991027], - [4.436708, 3.811000000000675], - [4.319375, 4.665000000001029], - [5.384125, 5.131000000000441], - [4.948792, 5.1640000000006125], - [4.827292, 4.832999999999643], - [4.709, 4.844000000002069], - [4.680833, 4.508000000001289], - [4.610833, 4.598000000001434], - [4.67675, 4.870999999997849], - [4.333084, 3.8049999999998363], - [4.542375, 4.1269999999986595], - [4.274917, 4.571000000000325], - [4.405375, 3.773999999999944], - [4.097292, 3.6039999999992745], - [4.248917, 3.7160000000007187], - [4.100416, 3.6759999999986803], - [4.554167, 4.573000000000604], - [4.758042, 4.877000000000464], - [4.241, 4.722999999998478], - [4.502333, 4.507000000000261], - [4.87775, 4.501999999998674], - [5.491042, 5.218000000001055], - [4.782958, 4.338000000000619], - [4.651, 4.187999999999192], - [5.01375, 5.198000000000036], - [4.959125, 5.1240000000003505], - [5.092459, 5.2109999999991885], - [5.147083, 5.398999999998821], - [4.944667, 4.298000000000357], - [4.830709, 5.000000000000782], - [5.49725, 5.968999999998559], - [5.804, 5.511999999999517], - [5.6735, 5.24399999999936], - [4.967042, 4.718999999999696], - [4.778833, 4.756999999997902], - [4.517375, 4.015000000000768], - [4.819458, 4.596000000001155], - [4.578417, 4.621000000000208], - [4.49725, 4.180999999999102], - [4.756417, 4.041999999998325], - [4.815291, 4.853999999999914], - [4.938958, 4.911999999999139], - [4.4555, 4.311999999998761], - [4.4605, 3.7900000000021805], - [4.552959, 4.076999999998776], - [4.914208, 4.719999999998947], - [4.490625, 4.611000000000587], - [4.463792, 4.118999999999318], - [4.346333, 3.992999999999469], - [4.455709, 4.383000000000692], - [4.312084, 3.69399999999942], - [4.193416, 4.287000000001484], - [4.648292, 4.503999999997177], - [4.119417, 3.7450000000021078], - [4.26975, 4.621000000000208], - [4.505083, 4.14099999999884], - [4.381625, 4.423000000000954], - [4.33975, 4.448999999999259], - [4.181417, 4.248999999997949], - [4.118833, 4.422000000001702], - [4.288667, 4.161999999999111], - [4.410708, 3.8060000000008642], - [4.284792, 3.7949999999984385], - [4.048666, 3.5050000000005355], - [4.254208, 4.66300000000075], - [4.503209, 3.854000000000468], - [4.684833, 4.018999999999551], - [5.023917, 5.09399999999971], - [4.607, 4.571000000000325], - [4.503834, 4.431000000000296], - [4.627375, 4.429000000001793], - [4.913708, 4.823000000000022], - [4.849459, 4.642999999997954], - [4.710167, 4.498999999999143], - [4.83625, 4.609000000000307], - [4.630083, 4.488999999999521], - [4.714792, 4.583999999999477], - [4.521125, 4.581999999999198], - [4.53675, 4.2970000000011055], - [4.587833, 4.319000000000628], - [4.6075, 4.314000000000817], - [4.4505, 4.255000000000564], - [4.511042, 4.596000000001155], - [4.423958, 4.206999999997407], - [4.655083, 4.548999999999026], - [4.257208, 4.494000000001108] - ] - }, - "wall_medians_ms": { - "baseline": 4.4210205, - "candidate": 4.5395625 - }, - "change_percent": 2.681326630356029 - } - ], - "output_sha256": "f388283b5044705a64e616e7b5527e8cdd176835ab01b64bde99d1452e860c99", - "summary": { - "baseline": { - "count": 360, - "wall_median_ms": 4.3614795, - "cpu_median_ms": 4.210999999999743 - }, - "candidate": { - "count": 360, - "wall_median_ms": 4.4957705, - "cpu_median_ms": 4.413500000000958 - }, - "change_ms": 0.13429100000000016, - "change_percent": 3.0790239871584912 - } - }, - "node-startup": { - "argv": ["node", "-e", ""], - "cwd_depth": 0, - "rounds": [ - { - "samples": { - "baseline": [ - [33.571833, 31.767000000000323], - [35.573416, 33.64100000000114], - [33.7765, 32.18700000000041], - [33.8535, 32.246999999999915], - [33.284334, 31.784999999999286], - [33.941542, 32.22900000000095], - [34.377625, 32.68800000000027], - [32.881791, 31.299000000000632], - [37.270125, 35.320999999999714], - [35.906084, 34.28499999999879], - [36.394375, 34.18000000000099], - [34.201625, 32.37000000000023], - [33.243417, 31.44400000000047], - [33.976292, 32.053999999998695], - [33.867917, 31.828000000000856], - [33.676417, 31.847999999998322], - [33.785208, 32.09099999999765], - [34.004458, 32.32200000000063], - [32.8555, 30.65100000000065], - [31.427708, 29.896999999998286], - [34.530041, 32.68399999999971], - [31.927208, 30.45299999999962], - [32.135792, 30.647999999999342], - [34.927167, 33.20299999999854], - [34.409625, 32.81800000000068], - [35.388583, 33.08900000000037], - [35.538958, 33.796999999999855], - [33.49125, 31.99099999999966], - [34.031708, 32.33900000000034], - [33.795708, 32.01500000000124], - [33.505833, 31.587999999999283], - [33.292292, 31.836000000001974], - [33.79225, 32.007999999997594], - [33.490458, 31.743000000002297], - [33.404167, 31.704000000001287], - [34.73725, 32.79600000000116], - [34.111916, 32.362000000002666], - [35.823583, 34.000999999996395], - [35.372, 33.707999999997185], - [32.682875, 30.915000000000248], - [32.327792, 30.616000000001975], - [32.1325, 30.53899999999743], - [32.574875, 30.639999999998224], - [32.913541, 31.103000000001657], - [33.1435, 31.432999999999822], - [32.18875, 30.550999999999107], - [32.098042, 30.307000000000528], - [32.507709, 30.865999999999616], - [32.449833, 30.797999999997216], - [31.873084, 30.381999999999465], - [32.828291, 31.12199999999632], - [35.520375, 33.66899999999973], - [34.462542, 32.79600000000116], - [34.02125, 32.50699999999895], - [33.289958, 31.434000000004403], - [33.57325, 31.95599999999743], - [32.07725, 30.466999999998023], - [32.966458, 30.96299999999985], - [32.88275, 30.87199999999868], - [33.147084, 31.69199999999961], - [34.158958, 32.336999999998284], - [32.195459, 30.573000000000405], - [32.501875, 30.732000000000426], - [33.693083, 32.11200000000147], - [32.231292, 30.56100000000228], - [34.063917, 32.24199999999655], - [34.896417, 33.090000000001396], - [32.126208, 30.425000000001035], - [33.983, 32.298000000000826], - [33.114208, 31.059999999996535], - [33.368583, 31.44800000000103], - [32.504833, 30.70700000000315], - [32.104209, 30.394999999998618], - [32.886209, 31.069000000002234], - [32.687541, 30.973000000003026], - [32.185625, 30.752999999997144], - [32.402708, 30.567000000001343], - [33.1145, 31.490999999999048], - [32.796333, 31.17300000000256], - [33.00325, 31.08800000000045], - [35.822292, 34.01999999999816], - [33.613792, 31.95700000000201], - [32.780709, 31.130999999998465], - [32.0745, 30.444000000002802], - [32.015667, 30.38800000000208], - [32.994542, 31.200999999999368], - [32.807833, 30.973000000003026], - [31.598209, 30.122999999996125], - [32.747541, 30.952000000002755], - [32.594667, 30.82200000000057], - [33.006166, 31.435999999999353], - [32.641125, 30.93600000000052], - [33.109625, 31.3180000000024], - [32.376208, 30.626000000001596], - [34.579875, 32.97199999999734], - [35.086958, 33.471999999999724], - [33.868334, 32.28899999999868], - [32.729583, 31.18800000000377], - [32.686541, 30.95700000000079], - [32.846166, 31.052999999999997], - [33.61725, 31.762999999997987], - [32.404708, 30.87899999999877], - [32.335166, 30.604999999997773], - [32.65775, 30.81200000000095], - [32.1715, 30.4109999999973], - [32.571042, 30.882000000001852], - [32.715083, 30.985999999998626], - [32.959125, 31.040000000000845], - [35.101167, 33.40700000000041], - [34.708041, 32.79099999999957], - [33.925875, 32.17700000000079], - [33.171625, 31.34499999999818], - [32.9315, 31.116999999998285], - [32.695209, 31.088999999997924], - [32.671208, 30.875000000001762], - [32.705625, 31.030000000001223], - [35.037458, 33.29899999999952], - [32.988458, 31.499000000000166], - [32.96175, 31.154000000000792], - [32.379958, 30.839999999997758] - ], - "candidate": [ - [36.812458, 33.640999999999366], - [35.048208, 33.34799999999838], - [34.258625, 32.53000000000128], - [34.519167, 32.403000000000404], - [34.104041, 32.31099999999998], - [35.07975, 33.287999999998874], - [33.879375, 32.171000000001726], - [33.489333, 31.97099999999864], - [38.399375, 34.51699999999924], - [36.6015, 34.890000000000754], - [36.03275, 33.11799999999998], - [34.056917, 32.00199999999853], - [34.498292, 32.710999999999046], - [34.564875, 32.60700000000227], - [33.925042, 31.914999999999694], - [33.347125, 31.74100000000024], - [32.524125, 30.85500000000252], - [31.533917, 30.042999999999154], - [33.267959, 31.47100000000158], - [32.426625, 30.82800000000141], - [34.674667, 32.62900000000002], - [33.020292, 31.37199999999929], - [32.463208, 30.750000000001165], - [33.706292, 32.07300000000224], - [35.311917, 33.71099999999849], - [35.219375, 33.98099999999893], - [33.959333, 32.25000000000122], - [33.14425, 31.486000000001013], - [34.201791, 31.995999999997693], - [34.041792, 32.23900000000057], - [34.099542, 32.230999999999455], - [33.4435, 31.667999999999807], - [33.310834, 31.69199999999961], - [33.162333, 31.317999999998847], - [33.4925, 31.824000000000296], - [34.809208, 32.700999999999425], - [35.608083, 33.590999999997706], - [36.255916, 34.31900000000354], - [35.374959, 33.64300000000142], - [32.695584, 31.045999999999907], - [32.8035, 31.300999999999135], - [32.51525, 30.790000000003204], - [33.006125, 31.293999999999045], - [32.537833, 30.770000000000408], - [32.585083, 30.91699999999875], - [32.595916, 30.991000000000213], - [32.15375, 30.426999999999538], - [32.21775, 30.754000000001724], - [32.562167, 31.054000000001025], - [32.355667, 30.69500000000147], - [34.605209, 32.780000000002474], - [34.648083, 32.931000000001376], - [37.387333, 34.69600000000028], - [33.185916, 31.491999999996523], - [33.147792, 31.393000000001337], - [33.155, 31.410000000001048], - [31.638291, 29.779000000001332], - [32.642334, 30.95599999999976], - [32.992875, 31.45500000000112], - [32.688167, 31.043000000000376], - [33.010459, 31.114000000002306], - [33.190375, 31.403000000000958], - [32.655334, 31.17799999999704], - [32.668958, 30.96700000000041], - [32.36075, 30.657999999998964], - [35.376541, 33.71500000000083], - [35.613541, 33.9219999999969], - [34.340292, 32.81199999999984], - [33.035167, 31.270000000002796], - [33.058459, 31.244999999998413], - [33.076917, 31.276999999999333], - [32.540834, 30.875999999999237], - [33.055417, 31.37100000000359], - [32.405708, 30.82899999999711], - [32.559625, 30.575999999996384], - [31.936667, 30.31599999999912], - [32.662291, 31.13000000000099], - [31.956417, 30.428000000000566], - [32.556875, 30.528999999997808], - [32.452, 30.96000000000032], - [35.009834, 33.32800000000091], - [35.207416, 33.37900000000005], - [32.611, 30.89999999999904], - [32.589791, 31.039999999997292], - [33.298958, 30.978999999998535], - [32.377792, 30.4789999999997], - [32.444, 30.507000000000062], - [32.825375, 31.192000000000775], - [32.758292, 30.943999999998084], - [33.198042, 31.477999999999895], - [33.148584, 31.681999999999988], - [33.703834, 31.428999999999263], - [33.886916, 32.05099999999916], - [31.601917, 29.928999999995654], - [33.87625, 32.143000000001365], - [35.831917, 34.003000000002004], - [32.865084, 31.243000000003462], - [33.050917, 31.560999999996397], - [32.748291, 31.232999999996736], - [32.525083, 31.044000000001404], - [33.234, 31.239000000002903], - [32.838125, 31.226000000000198], - [32.579, 30.8010000000003], - [33.059834, 31.510000000000815], - [33.134541, 31.370000000002563], - [32.330458, 30.890999999996893], - [32.935125, 31.30400000000222], - [32.289042, 30.779000000002554], - [33.643583, 31.93499999999716], - [35.383791, 34.18100000000024], - [34.773458, 32.91799999999867], - [33.204583, 31.808000000001613], - [32.860083, 31.227000000001226], - [32.873416, 31.377000000002653], - [32.773834, 30.89199999999792], - [33.774875, 31.898999999999234], - [33.225291, 31.674000000002422], - [32.811333, 31.179999999999097], - [32.443167, 30.857999999998498], - [33.106541, 31.27800000000036] - ] - }, - "wall_medians_ms": { - "baseline": 33.1119165, - "candidate": 33.1393955 - }, - "change_percent": 0.08298824986465725 - }, - { - "samples": { - "baseline": [ - [34.950875, 32.85600000000244], - [35.268958, 33.71500000000083], - [34.179208, 32.293999999996714], - [32.993416, 31.033000000000754], - [33.21075, 31.351000000000795], - [32.146375, 30.53200000000089], - [32.090375, 30.566000000000315], - [32.282708, 30.836999999998227], - [32.748041, 31.04499999999888], - [32.144708, 30.51800000000071], - [32.421875, 30.878000000001293], - [32.158458, 30.57799999999844], - [33.109417, 31.009000000000952], - [33.37025, 31.404000000001986], - [34.450084, 32.85899999999842], - [34.482166, 33.034000000000674], - [33.38675, 31.573999999999103], - [33.435584, 31.75900000000098], - [32.969292, 31.27100000000027], - [32.865459, 31.19599999999778], - [36.483708, 34.64100000000059], - [38.691333, 33.96199999999894], - [33.654167, 31.860000000001776], - [33.187708, 31.55299999999528], - [32.370917, 30.89299999999895], - [31.820417, 30.129999999999768], - [33.012167, 31.25999999999962], - [33.363417, 31.508000000002312], - [34.641875, 33.255999999997954], - [33.610208, 32.13500000000025], - [33.020584, 31.50799999999876], - [32.558, 31.235000000002344], - [33.23775, 31.46499999999719], - [31.300083, 29.77700000000283], - [32.52025, 30.82199999999702], - [32.614541, 30.979000000002088], - [33.474916, 31.521000000001465], - [32.625416, 31.000999999999834], - [32.675791, 30.861999999999057], - [32.459833, 30.343999999999482], - [32.863375, 31.290999999999514], - [32.077292, 30.33100000000033], - [34.285167, 32.302000000001385], - [35.119666, 33.50899999999868], - [34.737333, 32.88300000000177], - [32.771709, 31.02400000000216], - [32.672875, 30.96100000000135], - [33.314416, 31.568999999997516], - [33.321084, 31.530000000000058], - [33.285375, 31.33799999999809], - [32.625625, 30.71000000000268], - [31.930042, 30.263000000001483], - [32.361958, 30.742999999997522], - [32.3335, 30.677999999998207], - [32.171041, 30.363999999998725], - [32.12125, 30.408000000001323], - [35.619958, 33.7949999999978], - [34.733708, 32.81299999999732], - [32.633333, 30.874000000000734], - [32.12275, 30.489000000002875], - [32.828125, 31.213000000001045], - [32.679666, 30.830999999999165], - [34.598292, 32.5969999999991], - [32.744792, 31.10799999999614], - [32.909167, 31.057000000000556], - [32.929041, 31.05199999999897], - [32.429208, 30.706999999996043], - [32.456916, 30.768999999995827], - [32.761709, 31.15100000000126], - [32.796167, 31.162000000005463], - [34.499708, 32.91699999999764], - [34.9735, 32.83100000000161], - [34.182083, 32.367999999998176], - [33.441917, 31.639999999995894], - [32.395791, 30.79100000000068], - [32.170667, 30.557999999999197], - [32.858625, 31.093999999995958], - [33.245333, 31.580000000001718], - [32.597916, 30.776999999996946], - [32.789291, 31.02800000000272], - [31.986208, 30.383000000004046], - [33.616834, 31.631000000004406], - [32.334959, 30.737999999999488], - [32.807084, 31.09600000000512], - [33.778542, 31.81599999999918], - [34.950166, 33.239000000001795], - [34.939625, 33.345000000000624], - [32.305, 30.882999999999328], - [33.697833, 31.878999999996438], - [33.496958, 31.818000000001234], - [33.359791, 31.515999999999877], - [32.954167, 30.971999999998445], - [33.667458, 31.77700000000172], - [32.954917, 31.2039999999989], - [32.83925, 31.13899999999603], - [32.691667, 30.850000000004485], - [32.475334, 30.814999999996928], - [33.298, 31.247999999997944], - [32.510625, 30.878000000001293], - [34.703625, 32.844000000004314], - [34.198042, 32.46599999999944], - [33.055292, 31.067000000000178], - [33.126542, 31.46799999999672], - [33.062833, 31.35199999999827], - [32.44875, 31.24199999999888], - [33.231875, 31.55399999999986], - [32.905917, 31.31100000000231], - [33.496583, 31.75300000000192], - [32.778625, 31.20200000000395], - [32.440167, 30.615999999998422], - [32.584208, 30.841999999999814], - [32.745541, 30.912999999998192], - [32.823959, 31.3769999999991], - [34.192917, 32.25400000000178], - [32.839542, 31.455999999998596], - [34.063916, 32.36300000000014], - [31.483583, 29.906000000000432], - [33.073917, 31.502999999997172], - [33.128625, 31.360999999996864], - [34.531875, 32.62300000000096] - ], - "candidate": [ - [34.557709, 32.84999999999627], - [32.832291, 31.419999999997117], - [32.308834, 30.91600000000483], - [32.04875, 30.311000000001087], - [33.06625, 31.064999999998122], - [32.837042, 31.120999999998844], - [33.3225, 31.419999999997117], - [32.501333, 31.040000000004397], - [32.818583, 31.226000000000198], - [33.460458, 31.905999999999324], - [32.749959, 31.248000000001497], - [32.655667, 31.045999999999907], - [33.052833, 31.480999999999426], - [32.540125, 31.13299999999697], - [35.77075, 33.90500000000074], - [33.893125, 32.36900000000276], - [33.034792, 31.33499999999856], - [34.301292, 32.60399999999919], - [32.903167, 31.303999999998666], - [33.377291, 31.362000000001444], - [34.387583, 32.35700000000108], - [34.109166, 32.31999999999857], - [33.438041, 31.80600000000311], - [31.290083, 29.71300000000099], - [32.757084, 31.094000000003064], - [33.322375, 31.51499999999885], - [33.939458, 31.860000000001776], - [33.072375, 31.226999999997673], - [34.627541, 33.145999999998565], - [34.272541, 32.83400000000114], - [33.181667, 31.522000000002492], - [32.484125, 30.82899999999711], - [34.005, 32.313000000002035], - [31.444583, 29.761000000000593], - [32.84825, 31.38399999999919], - [33.9465, 32.05299999999767], - [33.747667, 32.016000000002265], - [33.079875, 31.79799999999844], - [32.63625, 31.036000000000286], - [32.3215, 30.698000000001002], - [32.073542, 30.414000000000385], - [33.164042, 31.41199999999955], - [34.792583, 33.20799999999835], - [34.899708, 33.12900000000241], - [33.66275, 31.97099999999864], - [33.224875, 31.51499999999885], - [32.887833, 31.155999999999295], - [33.060584, 31.300999999999135], - [32.823208, 31.175000000001063], - [32.682167, 31.18700000000274], - [32.893208, 31.17899999999807], - [32.639792, 30.84599999999682], - [32.8315, 31.214000000002073], - [32.7895, 30.906000000001654], - [31.937042, 30.245000000000744], - [34.269375, 33.13099999999736], - [33.5295, 31.749000000004912], - [34.827166, 33.26799999999963], - [35.074292, 33.286000000003924], - [32.865625, 31.25599999999551], - [33.102667, 31.406999999997964], - [33.050375, 31.348000000001264], - [33.019083, 31.497000000001663], - [33.196708, 31.56900000000107], - [32.853834, 30.998000000003856], - [32.593042, 30.97500000000153], - [32.534916, 30.931000000002484], - [33.596792, 31.913000000002967], - [32.6495, 31.07199999999466], - [32.536709, 30.958999999999293], - [32.243333, 30.55400000000219], - [35.144667, 33.339999999995484], - [35.086375, 33.105000000002605], - [34.778542, 33.057000000003], - [32.563417, 30.8690000000027], - [36.87175, 32.23100000000301], - [32.314542, 30.666000000000082], - [33.195167, 31.333000000000055], - [32.326625, 30.830999999999165], - [32.104084, 30.46799999999905], - [33.814042, 31.81599999999918], - [33.357625, 31.805999999996004], - [32.832333, 31.183999999996104], - [32.727666, 30.968999999998914], - [32.5395, 30.777999999997974], - [35.319, 33.757999999998844], - [34.105291, 32.465000000001965], - [33.834708, 32.0430000000016], - [33.254542, 31.62799999999777], - [33.318292, 31.41400000000516], - [32.817791, 31.30299999999764], - [32.646375, 31.05899999999906], - [33.904792, 32.03800000000001], - [33.067791, 31.14800000000173], - [32.74525, 31.00000000000236], - [32.773375, 31.039999999997292], - [33.509459, 31.600000000004513], - [32.5455, 30.977999999997508], - [33.689292, 31.81099999999759], - [34.931417, 33.23199999999815], - [34.698292, 32.96500000000435], - [31.678167, 30.191999999996], - [33.278333, 31.62500000000179], - [33.484792, 31.607000000004604], - [33.769375, 31.994000000000966], - [32.516916, 30.625999999998044], - [33.02875, 31.447999999997478], - [32.986125, 31.25800000000112], - [33.798917, 32.05399999999514], - [32.773042, 30.985999999998626], - [32.592083, 31.03200000000328], - [32.546417, 30.863000000000085], - [33.274833, 31.80500000000208], - [35.16475, 33.43399999999974], - [34.461958, 32.71399999999858], - [33.561417, 31.95100000000295], - [32.219292, 30.668999999999613], - [33.750916, 32.08100000000158], - [33.298834, 31.32200000000296], - [33.030416, 31.387000000002274] - ] - }, - "wall_medians_ms": { - "baseline": 32.941604, - "candidate": 33.0670205 - }, - "change_percent": 0.3807237194642932 - }, - { - "samples": { - "baseline": [ - [33.431958, 31.904999999998296], - [32.881125, 30.86799999999812], - [32.830625, 31.11099999999567], - [33.232, 31.61400000000114], - [35.327833, 33.69599999999906], - [35.154708, 33.70699999999616], - [32.660333, 30.96100000000135], - [33.276917, 31.414000000001607], - [33.327375, 31.43700000000038], - [33.069291, 31.30300000000119], - [32.645875, 30.906000000001654], - [35.002291, 32.40299999999863], - [33.308958, 31.67799999999943], - [33.017625, 31.43100000000132], - [33.242291, 31.788999999999845], - [33.021583, 31.06899999999868], - [32.656917, 31.12000000000137], - [32.526833, 30.90400000000315], - [33.034041, 31.13400000000155], - [34.914209, 33.23300000000273], - [32.801458, 31.53700000000015], - [33.774167, 31.96900000000369], - [33.380875, 31.346999999996683], - [32.707709, 30.877000000003818], - [32.318667, 30.80500000000086], - [32.616791, 31.204999999999927], - [33.519833, 31.914000000000442], - [32.883375, 31.179000000001622], - [32.371708, 30.53499999999687], - [33.63325, 31.755999999997897], - [32.978541, 31.303999999998666], - [32.355041, 30.888000000000915], - [34.532584, 32.56100000000117], - [35.628666, 33.76999999999697], - [33.475917, 31.756999999995372], - [32.305834, 30.78299999999956], - [32.442125, 30.608000000000857], - [33.5385, 32.074999999998965], - [32.378416, 30.7420000000036], - [32.564458, 30.77199999999891], - [32.177166, 30.41300000000291], - [34.866041, 33.1949999999992], - [33.598041, 31.76599999999752], - [32.989542, 31.16099999999733], - [33.151208, 31.10900000000072], - [32.368291, 30.580000000000496], - [32.327208, 30.87200000000223], - [34.835084, 32.89000000000186], - [34.154792, 32.61100000000283], - [34.504584, 33.0459999999988], - [32.841959, 31.106999999998663], - [32.667041, 30.987999999993576], - [32.767916, 31.258999999998593], - [33.235625, 31.63200000000188], - [33.008709, 31.320999999998378], - [32.607458, 30.914999999993142], - [32.495709, 30.661000000002048], - [33.503041, 31.837000000003002], - [33.356042, 31.532999999996036], - [34.016875, 32.20200000000517], - [33.676709, 32.097000000000264], - [35.467584, 33.458999999993466], - [34.12575, 32.39899999999807], - [32.452375, 30.655000000002985], - [32.087583, 30.57799999999844], - [32.939916, 31.487999999995964], - [32.259916, 30.673999999997648], - [32.441209, 30.683000000003346], - [32.045459, 30.039000000002147], - [32.513208, 30.80700000001002], - [31.619916, 30.183999999998434], - [32.625583, 31.040000000004397], - [32.287875, 30.560999999991623], - [32.01075, 30.41699999999281], - [33.952917, 32.41099999999619], - [34.587458, 32.808000000002835], - [34.966958, 33.12299999999624], - [33.734875, 31.93600000000174], - [33.298417, 31.617000000004225], - [32.709125, 31.078000000000827], - [33.149834, 31.424999999998704], - [32.643459, 31.04600000000346], - [31.629958, 30.178999999996847], - [31.86675, 30.203000000000202], - [31.533292, 29.683999999996047], - [32.892, 31.04400000000851], - [32.076625, 30.603999999996745], - [32.254334, 30.40300000000684], - [32.784333, 31.27500000000083], - [33.2415, 31.440999999993835], - [35.286583, 33.363999999991734], - [34.521708, 32.82800000000208], - [32.441292, 30.79200000000526], - [32.198125, 30.526999999999305], - [32.650542, 31.058000000001584], - [32.577041, 30.929999999997904], - [32.037334, 30.293999999997823], - [32.020375, 30.539999999994905], - [32.352875, 30.876999999996713], - [32.163459, 30.535999999997898], - [32.657875, 30.88000000000335], - [32.619166, 30.797999999997216], - [32.551333, 30.783999999997036], - [32.858958, 30.750999999995088], - [34.312, 32.5160000000011], - [34.077375, 32.29600000000232], - [32.857958, 31.359000000001913], - [33.51925, 31.71999999999997], - [33.052708, 31.179999999999097], - [33.006958, 31.204000000002452], - [32.619875, 30.723999999999307], - [32.237041, 30.68299999999624], - [32.570125, 30.982000000008725], - [32.2565, 30.798000000004322], - [32.004375, 30.436000000001684], - [32.76725, 30.959000000002845], - [32.422625, 30.321999999998184], - [34.165208, 32.29600000000232], - [34.488292, 32.76100000000781], - [35.0205, 33.34800000000371] - ], - "candidate": [ - [32.651875, 30.825999999997578], - [32.372042, 30.847000000004954], - [32.818708, 31.216000000000577], - [32.684083, 31.721999999998474], - [34.09625, 31.7670000000021], - [35.729, 33.91600000000139], - [34.845625, 33.105000000002605], - [32.891292, 31.504999999999228], - [34.489708, 32.93899999999894], - [32.649916, 30.95199999999565], - [32.882917, 31.171000000000504], - [32.710625, 31.15800000000135], - [34.017625, 32.28499999999812], - [33.386041, 31.75200000000089], - [33.270792, 31.786000000000314], - [32.627542, 31.013999999998987], - [32.400875, 30.675999999999704], - [32.681625, 31.21799999999908], - [35.099834, 33.36199999999678], - [35.027834, 33.3919999999992], - [34.489334, 32.78999999999854], - [33.741084, 32.212999999998715], - [33.616916, 31.897999999998206], - [33.074542, 31.300999999999135], - [32.650167, 30.822999999998046], - [33.146375, 31.681999999999988], - [34.43925, 32.60599999999769], - [32.392625, 30.99300000000227], - [32.898375, 31.115000000003334], - [33.65775, 32.36400000000117], - [32.819959, 31.24000000000038], - [32.906833, 31.119999999997816], - [32.911291, 31.15500000000182], - [35.948042, 34.28399999999954], - [35.093459, 33.34500000000418], - [33.36525, 31.61500000000217], - [32.947709, 31.077000000003352], - [32.92075, 30.963999999997327], - [33.616208, 31.79699999999741], - [32.850708, 31.280999999999892], - [32.477917, 30.83499999999617], - [32.945959, 31.458000000000652], - [33.705666, 31.974000000005276], - [33.46575, 31.82199999999824], - [33.602541, 31.908999999998855], - [32.4905, 30.815000000004034], - [33.41375, 31.76899999999705], - [35.034375, 33.22199999999498], - [35.073583, 33.2870000000014], - [33.999584, 32.53999999999735], - [33.726125, 31.86200000000383], - [32.436583, 30.807000000002915], - [33.403, 31.69300000000419], - [33.439625, 31.78100000000228], - [32.604, 30.814999999996928], - [32.482625, 31.056000000006634], - [33.86975, 31.92099999999698], - [33.304791, 31.395000000003392], - [32.427166, 30.658000000002517], - [32.958708, 31.111999999993145], - [32.880875, 31.204000000002452], - [36.125666, 34.24400000000105], - [35.461417, 33.81000000000256], - [32.687042, 30.946999999997615], - [33.106125, 31.358000000004438], - [32.261541, 30.545000000003597], - [32.864458, 31.092999999998483], - [33.892958, 32.15500000000304], - [32.889625, 31.269999999999243], - [33.536, 31.687999999988392], - [32.70175, 31.056999999997004], - [33.200958, 31.458000000000652], - [32.943875, 31.31200000000689], - [32.555084, 30.8340000000058], - [32.219666, 30.470999999998583], - [34.434792, 32.896000000000925], - [34.83575, 32.90499999999952], - [32.115083, 30.539000000004535], - [31.243292, 29.582999999995252], - [32.668958, 31.02599999999711], - [32.126583, 30.554999999999666], - [32.645625, 30.937999999999022], - [32.499541, 30.989000000005262], - [31.855791, 30.394999999998618], - [30.703875, 29.249999999997556], - [33.509834, 31.826999999992722], - [33.001916, 31.283000000001948], - [32.41725, 31.030000000001223], - [33.346834, 31.472000000000833], - [35.698917, 34.1060000000013], - [35.28325, 33.364000000005944], - [31.882917, 30.39799999999815], - [32.271709, 30.59999999999974], - [33.239791, 31.424999999998704], - [31.911583, 30.27399999999858], - [32.814917, 31.03500000000281], - [33.450334, 31.736000000002207], - [32.427875, 30.787000000003673], - [32.336125, 30.57900000000302], - [33.318583, 31.64499999999748], - [32.8785, 31.153000000003317], - [32.822959, 31.03500000000281], - [39.014417, 31.63200000000188], - [33.660541, 31.879000000003543], - [34.805458, 33.0239999999975], - [35.849625, 33.75499999999931], - [34.967625, 33.470999999998696], - [32.464, 31.07599999999877], - [32.956166, 31.178000000004147], - [33.112292, 31.346999999996683], - [32.391958, 30.77899999999545], - [32.80175, 31.125000000002956], - [32.973583, 31.426999999993654], - [32.99, 31.16399999999686], - [32.020833, 30.55599999999714], - [32.853, 31.51799999999838], - [32.978708, 31.221000000002164], - [33.0905, 31.159999999999854], - [34.811584, 32.88199999999364], - [34.332916, 32.63099999999497] - ] - }, - "wall_medians_ms": { - "baseline": 32.858458, - "candidate": 32.966145499999996 - }, - "change_percent": 0.3277314474099624 - } - ], - "output_sha256": "6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", - "summary": { - "baseline": { - "count": 360, - "wall_median_ms": 32.9604375, - "cpu_median_ms": 31.20450000000119 - }, - "candidate": { - "count": 360, - "wall_median_ms": 33.063417, - "cpu_median_ms": 31.37150000000144 - }, - "change_ms": 0.10297950000000355, - "change_percent": 0.3124336562583707 - } - }, - "npm-version": { - "argv": ["env", "exec", "npm", "--version"], - "cwd_depth": 0, - "rounds": [ - { - "samples": { - "baseline": [ - [68.985375, 65.98900000000185], - [71.330167, 67.90800000000274], - [71.751666, 68.5360000000017], - [68.878875, 67.1650000000028], - [68.976, 65.51100000000076], - [67.621916, 64.52600000000075], - [69.26725, 66.81999999999988], - [67.638625, 64.782000000001], - [72.289375, 68.87100000000146], - [71.795417, 68.24399999999997], - [69.833, 66.279999999999], - [68.900333, 65.85900000000322], - [68.053375, 64.79399999999913], - [68.100333, 65.02800000000519], - [68.821916, 66.02399999999875], - [73.158875, 69.76399999999927], - [68.623292, 65.47799999999881], - [69.508708, 66.0480000000021], - [68.011583, 64.78700000000259], - [69.485834, 66.53500000000179], - [77.217208, 71.49799999999829], - [70.182625, 66.63700000000006], - [72.252916, 69.01099999999616], - [72.427334, 68.9350000000033], - [72.898875, 68.84399999999857], - [68.335292, 65.34099999999654], - [69.816625, 65.64400000000603], - [71.533875, 67.31999999999516], - [74.649208, 67.3800000000071], - [71.282542, 68.28900000000004], - [69.758333, 66.16400000000056], - [69.350666, 66.8500000000023], - [69.04975, 65.48500000000246], - [70.074166, 66.8980000000019], - [72.597542, 68.91999999999854], - [70.519625, 67.66600000000267], - [73.922125, 70.49500000000108], - [71.268959, 67.577], - [71.188375, 67.28300000000331], - [71.067083, 67.24499999999978], - [70.016875, 66.16600000000261], - [68.317458, 65.96600000000308], - [71.736458, 68.35000000000235], - [71.815958, 69.20900000000074], - [70.208958, 66.989999999997], - [69.200125, 65.5140000000003], - [69.309625, 65.9169999999989], - [67.883625, 64.74000000000757], - [70.979375, 65.97700000000373], - [74.22275, 70.86200000000531], - [71.027542, 67.69200000000097], - [71.201291, 66.56699999999915], - [69.369917, 65.73099999999243], - [71.342459, 67.55700000000076], - [71.622583, 68.34200000000124], - [69.482417, 66.25100000000117], - [72.533959, 69.08100000000417], - [68.629666, 65.7679999999985], - [68.208792, 65.50000000000722], - [69.155875, 66.14700000000084], - [68.6685, 65.73399999999907], - [70.459917, 67.40499999999372], - [68.210375, 65.7020000000017], - [72.616542, 69.41000000000486], - [70.306125, 67.73599999999647], - [71.817833, 68.91900000000106], - [68.417833, 65.10699999999758], - [67.370666, 63.79299999999688], - [68.313417, 64.5019999999974], - [69.542209, 65.60199999999838], - [68.871208, 65.48200000000293], - [69.538917, 66.19199999999381], - [68.150292, 65.09000000000498], - [70.285125, 65.51499999999777], - [68.472875, 65.33799999999701], - [68.969583, 65.84900000000005], - [71.671, 68.30500000000228], - [72.183834, 69.04999999999717], - [69.7555, 66.72299999999609], - [69.376667, 65.6980000000047], - [66.174666, 63.33599999999251], - [70.190625, 66.76299999999458], - [68.373417, 64.6160000000009], - [72.641792, 68.81599999999821], - [68.976833, 65.65299999999752], - [68.632833, 65.51999999999936], - [68.701791, 65.46900000000022], - [67.663, 64.22299999999836], - [68.657166, 65.55399999999878], - [70.341083, 66.42599999999987], - [71.1825, 67.66199999999856], - [70.861333, 67.41200000000447], - [68.873583, 65.66399999999817], - [69.974167, 66.99700000000064], - [70.034792, 66.86799999999948], - [70.9245, 66.792999999997], - [69.819833, 66.46800000000042], - [70.484625, 67.35600000000375], - [69.516916, 66.16000000000355], - [70.106542, 66.5169999999975], - [68.812625, 65.57999999999709], - [68.296666, 65.17399999999895], - [69.301583, 65.99500000000091], - [71.269458, 67.73000000000451], - [72.594584, 69.02600000000803], - [68.607667, 65.41700000000361], - [68.6075, 65.82099999999969], - [69.060792, 65.73700000000571], - [68.93475, 65.50599999999918], - [69.799625, 66.20000000000914], - [70.634417, 67.1390000000045], - [69.614625, 65.7900000000069], - [69.146166, 66.01700000000221], - [68.58575, 65.26499999999658], - [69.303541, 66.13300000000066], - [68.731459, 65.57300000000055], - [71.352542, 67.30799999999704], - [72.062459, 69.89300000000753], - [69.950791, 66.80800000000175], - [69.307333, 66.12399999999496] - ], - "candidate": [ - [69.625458, 66.65499999999724], - [69.426125, 67.36300000000028], - [73.357125, 70.00399999999729], - [69.56575, 66.58900000000045], - [74.075292, 67.66700000000014], - [69.089958, 66.19299999999839], - [69.049125, 65.70999999999572], - [68.848208, 65.41200000000202], - [68.933208, 66.03299999999734], - [72.738334, 69.85600000000147], - [69.570084, 66.54199999999832], - [68.043875, 65.04400000000032], - [68.605625, 64.74099999999794], - [68.470375, 65.0929999999974], - [68.633709, 64.76800000000082], - [72.300583, 68.27700000000192], - [71.838916, 68.9220000000006], - [70.011625, 66.66399999999584], - [69.661834, 67.01999999999941], - [68.758958, 64.83599999999967], - [71.211917, 67.88099999999986], - [70.253958, 66.74100000000038], - [73.335917, 69.8900000000009], - [70.487792, 67.14099999999945], - [68.332959, 65.94400000000178], - [68.73325, 65.51699999999983], - [70.312333, 66.41100000000222], - [70.303167, 66.473000000002], - [69.478541, 65.89299999999554], - [71.505, 68.40699999999345], - [68.714833, 65.8730000000034], - [69.880041, 66.49199999999666], - [69.5525, 66.28999999999508], - [72.039292, 68.61299999999915], - [70.256541, 67.08499999999873], - [73.830083, 70.72000000000145], - [70.507541, 67.28399999999368], - [70.477667, 67.23500000000371], - [71.994209, 68.23699999999633], - [71.817375, 67.98500000000018], - [71.2845, 67.97499999999701], - [70.762, 67.77199999999794], - [73.299833, 69.60099999999869], - [69.821917, 66.27699999999948], - [68.57275, 65.0449999999978], - [70.783708, 67.02900000000511], - [69.106667, 66.36899999999457], - [68.927083, 65.11799999999823], - [69.075125, 66.00599999999446], - [74.072208, 70.24099999999578], - [70.65875, 67.27399999999761], - [71.1645, 67.66600000000267], - [71.362584, 68.0240000000012], - [71.657542, 67.37500000000551], - [70.462708, 66.98300000000046], - [70.794375, 67.2919999999948], - [71.510625, 68.43500000000091], - [70.207167, 67.21399999999278], - [74.989125, 66.41899999999623], - [72.209291, 68.60600000000261], - [69.765209, 66.4510000000007], - [70.806917, 67.9190000000034], - [71.910791, 68.66799999999529], - [70.246333, 66.97499999999934], - [68.627375, 65.66899999999976], - [68.644917, 65.55200000000383], - [69.003959, 65.95399999999785], - [67.721916, 64.82300000000407], - [68.719667, 65.29300000000404], - [73.63475, 70.83300000000747], - [73.352, 70.0909999999979], - [69.764542, 66.73800000000085], - [66.995791, 63.66899999999731], - [69.391791, 66.89899999999938], - [69.657291, 66.31500000000301], - [68.619375, 65.3780000000026], - [73.461083, 69.74400000000003], - [69.4355, 66.08799999999349], - [68.603417, 65.26700000000574], - [67.878417, 64.84100000000126], - [69.894792, 66.04900000000669], - [68.565208, 64.95000000000317], - [68.14825, 64.60299999999819], - [71.494541, 67.77900000000159], - [70.05475, 66.52700000000777], - [68.642792, 65.13399999999336], - [68.896958, 65.35500000000383], - [70.285708, 66.66500000000042], - [70.807375, 66.88100000000219], - [67.263292, 64.10599999999533], - [73.377709, 70.24700000000195], - [69.291042, 65.94199999999972], - [69.736167, 66.03400000000192], - [68.174958, 64.95600000000223], - [68.577417, 65.90699999999572], - [67.686833, 64.72000000000122], - [72.161125, 68.29900000000322], - [72.917792, 69.60199999999617], - [69.545625, 66.3330000000002], - [68.6, 65.73399999999907], - [68.678458, 65.56499999999943], - [69.48975, 65.19100000000577], - [68.852417, 65.653999999995], - [73.54, 70.25799999999549], - [69.241292, 66.63399999999342], - [69.009208, 65.36700000000195], - [71.131416, 67.98499999999308], - [69.82525, 66.56600000000168], - [69.199625, 66.03799999999183], - [71.414625, 67.59099999999307], - [74.115958, 70.61499999999654], - [70.558917, 67.21699999999942], - [68.969375, 65.1369999999929], - [69.233875, 66.59499999999952], - [68.972875, 65.62400000000679], - [69.106875, 65.5749999999955], - [69.1205, 65.98199999999821], - [73.347833, 69.92099999999368], - [71.495917, 67.45700000000454], - [70.04425, 66.96000000000168] - ] - }, - "wall_medians_ms": { - "baseline": 69.6850625, - "candidate": 69.793563 - }, - "change_percent": 0.155701230805394 - }, - { - "samples": { - "baseline": [ - [68.880375, 65.31400000000076], - [71.59925, 68.26800000000333], - [68.65275, 65.57800000000213], - [69.539791, 65.67900000000293], - [69.486084, 66.68499999999256], - [68.1195, 65.2550000000005], - [68.723417, 66.30899999999684], - [72.092875, 68.58299999999673], - [73.966292, 70.42299999999813], - [69.241167, 66.20300000000157], - [68.932792, 65.48099999999835], - [69.586667, 65.77600000000672], - [69.154667, 65.56699999999438], - [69.700791, 65.84000000000145], - [69.593041, 66.12499999999955], - [71.44175, 68.27600000000444], - [70.445334, 66.35499999999439], - [67.415084, 64.62499999999949], - [70.861125, 67.61400000000606], - [69.9415, 65.77000000000055], - [69.565125, 66.24000000000052], - [70.185291, 67.14000000000198], - [72.890708, 69.72799999999779], - [69.486667, 67.30600000000209], - [71.648209, 67.54800000000216], - [68.646167, 65.87000000000387], - [68.512, 65.23100000000426], - [68.465625, 64.76300000000634], - [74.3825, 71.04400000000766], - [74.864083, 71.41300000000683], - [72.239458, 69.2239999999984], - [71.927125, 68.71199999999789], - [70.575208, 67.60600000000494], - [70.219708, 67.1040000000005], - [70.359333, 66.99400000000111], - [75.248625, 71.77099999999825], - [78.245792, 73.79600000000153], - [78.3515, 74.14700000000352], - [77.707542, 73.58200000000181], - [77.30025, 73.19000000000386], - [74.65575, 70.73799999999864], - [74.891209, 71.35799999999648], - [72.875, 70.01900000000205], - [67.660959, 64.20200000000165], - [71.043834, 67.2840000000079], - [70.346333, 66.96600000000075], - [68.6185, 65.41400000000408], - [69.182667, 65.53800000000365], - [71.772375, 68.36299999999795], - [70.590667, 66.81100000000129], - [69.418833, 66.3589999999985], - [70.234416, 66.68699999999461], - [69.415417, 66.2229999999937], - [69.905292, 66.17299999999915], - [68.942042, 66.03199999999987], - [71.987833, 68.90700000000294], - [70.937209, 67.190999999994], - [73.610125, 69.84400000000335], - [71.863084, 68.29600000000369], - [74.809583, 70.67500000000138], - [71.842292, 68.5410000000104], - [72.91375, 69.21899999999681], - [71.776792, 68.25700000000268], - [70.132834, 66.60300000000774], - [72.041292, 69.07799999999753], - [71.27, 67.43999999999772], - [70.537, 67.72800000000245], - [70.797042, 67.62600000000418], - [71.960125, 68.53899999999413], - [69.901292, 66.75200000000814], - [71.5085, 67.96599999999842], - [69.199583, 65.75100000000589], - [70.091666, 66.65600000000182], - [70.023291, 66.98000000000093], - [74.289459, 70.77000000001021], - [70.218917, 67.32200000000432], - [70.030375, 66.52299999998945], - [72.298792, 68.52499999999395], - [70.641584, 66.53700000001095], - [71.538084, 66.18600000001607], - [70.385709, 67.5510000000088], - [72.1615, 68.5799999999972], - [72.530708, 69.86100000000306], - [69.189, 65.97100000000466], - [69.840417, 66.81299999999624], - [69.208791, 66.03300000000445], - [69.394125, 66.24700000000416], - [70.241041, 66.84199999999407], - [71.7545, 68.57200000000319], - [71.3055, 67.94299999999964], - [66.749708, 63.65900000000124], - [69.92675, 66.31200000001058], - [70.812875, 67.04100000000324], - [71.717458, 67.65500000000202], - [68.948291, 65.00599999999679], - [72.635583, 69.25699999999324], - [69.336167, 66.24999999999659], - [69.59475, 66.6789999999935], - [68.43425, 65.2290000000022], - [70.905375, 68.14899999999113], - [70.687834, 66.99700000001485], - [70.025834, 66.89999999998975], - [73.212792, 69.48299999999108], - [70.223875, 67.65400000000454], - [70.3065, 67.34199999999646], - [69.303834, 66.52100000000871], - [69.128333, 65.74799999999925], - [70.902416, 68.20799999999849], - [71.662792, 68.4049999999985], - [71.474875, 68.86400000000492], - [69.829917, 66.8539999999922], - [69.572583, 66.307000000009], - [69.8875, 66.57699999999522], - [71.81075, 67.6559999999995], - [69.26825, 65.9300000000087], - [70.75625, 66.796999999994], - [70.524542, 67.29599999999891], - [71.151667, 67.1740000000085], - [68.254625, 65.3949999999952], - [69.650875, 66.60399999999811] - ], - "candidate": [ - [71.787875, 68.325999999999], - [72.523792, 69.40399999999869], - [69.952375, 66.51300000000049], - [70.456084, 66.92900000000179], - [68.985625, 65.71800000000394], - [69.669875, 66.24399999999753], - [68.348542, 64.92000000000075], - [70.89775, 66.90100000000143], - [69.323375, 66.40400000000568], - [69.676042, 66.73399999999674], - [69.957084, 67.07600000000724], - [69.528959, 66.1749999999941], - [68.945625, 65.29599999999647], - [69.477834, 66.14800000000542], - [73.051, 69.73099999999732], - [69.495875, 66.29099999999966], - [68.275542, 65.06300000000209], - [68.509875, 65.49400000000105], - [71.718375, 68.08799999999593], - [69.130417, 65.75099999999878], - [68.150583, 65.10499999999553], - [72.999541, 69.79900000000328], - [69.743666, 66.59599999999699], - [68.560084, 65.41599999999903], - [70.4355, 66.6439999999966], - [69.538583, 65.58700000000073], - [68.046958, 65.07999999998759], - [71.782958, 67.79399999999214], - [73.15725, 69.78499999999599], - [74.225625, 70.99699999999842], - [75.142292, 71.62399999999991], - [69.749375, 67.07300000000771], - [69.41975, 65.96799999999092], - [69.706292, 66.5909999999954], - [73.820917, 70.18400000000469], - [75.275125, 71.90399999999642], - [77.351667, 74.52299999999923], - [80.470875, 76.05000000000217], - [78.535916, 74.62799999998992], - [78.083875, 73.7489999999994], - [76.563792, 72.61499999999899], - [74.006083, 69.5530000000062], - [71.575542, 68.23599999999885], - [70.039334, 66.94199999999739], - [70.491708, 67.35099999999505], - [69.171875, 66.02399999999164], - [70.014041, 66.75599999999804], - [71.9655, 67.6339999999982], - [73.992917, 70.06799999999913], - [72.309833, 69.68600000000436], - [70.183291, 66.58200000000392], - [69.75225, 66.22899999999987], - [71.334375, 67.28600000000284], - [68.869458, 65.56100000000953], - [72.617791, 68.77299999999309], - [72.242083, 68.6850000000021], - [75.517542, 72.38600000000162], - [73.097541, 69.59400000000215], - [70.447291, 67.38299999999242], - [75.661291, 71.15100000000041], - [71.252167, 67.9619999999943], - [71.992541, 69.01699999999522], - [74.537625, 70.44499999999942], - [70.186458, 66.60599999999306], - [69.623459, 66.42200000000287], - [71.403, 67.19000000000364], - [73.305834, 69.34799999999797], - [71.185042, 67.74499999999506], - [72.999, 69.75500000000068], - [69.794208, 66.36299999999551], - [70.706583, 68.22799999999773], - [70.653125, 68.64900000000063], - [70.752166, 67.92499999999535], - [71.403709, 67.93399999999394], - [71.030625, 67.87599999999827], - [72.518334, 69.22699999999793], - [69.199833, 66.22699999999782], - [70.220417, 67.0120000000054], - [70.2565, 66.82799999998679], - [69.826, 66.04699999999752], - [68.799458, 65.88099999999031], - [71.611541, 68.65700000000174], - [70.49075, 66.84899999999061], - [70.097667, 66.38700000000597], - [72.319416, 68.93999999999778], - [70.130083, 66.94799999999645], - [71.998542, 66.90799999999797], - [69.2965, 66.22600000000034], - [70.195167, 66.64299999999912], - [69.780917, 66.24999999999659], - [68.86025, 65.90099999999666], - [70.132416, 67.03999999999155], - [71.579, 67.99099999999214], - [69.285917, 65.87799999999788], - [69.543875, 66.00600000001577], - [73.761875, 70.43700000001252], - [68.9985, 65.55399999999167], - [68.308792, 65.10400000000516], - [69.956, 66.58500000000345], - [70.185583, 67.17899999999588], - [70.923125, 67.45899999998528], - [69.689583, 66.3900000000126], - [73.074666, 69.51600000000724], - [68.858833, 65.83000000000538], - [70.446083, 67.03300000000922], - [67.797417, 65.04199999999116], - [70.43475, 67.37199999999177], - [68.485292, 65.32400000000393], - [73.554084, 69.62000000000046], - [72.837375, 69.38800000000356], - [70.559167, 66.97599999999682], - [69.355167, 65.82099999999969], - [70.26025, 66.68200000000013], - [70.235625, 67.11199999999451], - [69.88175, 66.68600000000424], - [74.150916, 70.5949999999973], - [72.451291, 68.54199999999366], - [70.222583, 66.85699999999883], - [69.444833, 66.36500000000467], - [70.268792, 66.51399999999796] - ] - }, - "wall_medians_ms": { - "baseline": 70.372521, - "candidate": 70.351771 - }, - "change_percent": -0.02948594096835455 - }, - { - "samples": { - "baseline": [ - [73.219, 69.60600000000738], - [75.49375, 70.82900000000336], - [71.154917, 68.06000000000267], - [71.273958, 67.58500000000822], - [70.813791, 67.41800000000353], - [71.403541, 67.55400000000122], - [71.655209, 68.7069999999892], - [74.43875, 71.31499999999846], - [71.361417, 68.78199999999879], - [70.504417, 67.0029999999997], - [70.931709, 67.20599999999877], - [72.239584, 68.31100000000845], - [72.0375, 67.6729999999992], - [71.709833, 67.90799999998853], - [70.027542, 66.50899999999638], - [70.736584, 67.42500000000007], - [71.372875, 68.25000000000614], - [70.795541, 67.6729999999992], - [72.053208, 68.80100000000766], - [74.3825, 70.76599999999189], - [74.071458, 70.68100000000754], - [69.787125, 66.55999999999551], - [69.14125, 65.72600000001216], - [68.509292, 65.37199999999643], - [69.12725, 66.11899999998627], - [72.118417, 68.92499999999302], - [73.172916, 69.55299999999909], - [69.672417, 66.61900000000287], - [69.916417, 66.62599999999941], - [68.855959, 65.80100000000755], - [68.56725, 65.68800000000863], - [69.465333, 66.1839999999927], - [71.190375, 67.72700000000498], - [73.064709, 70.04099999998914], - [71.774958, 67.8180000000026], - [69.84575, 66.74699999999234], - [69.315709, 65.85800000000575], - [70.447208, 67.29699999998218], - [70.267333, 67.01799999999025], - [71.518125, 68.1900000000013], - [71.690875, 68.53700000000629], - [69.096459, 66.24300000001426], - [70.404167, 67.36499999999523], - [68.959417, 65.8379999999994], - [70.329084, 66.75500000000056], - [72.532542, 68.96900000000983], - [73.367791, 69.96099999999217], - [73.893125, 70.5600000000004], - [70.803167, 67.81200000000354], - [71.07675, 67.70600000000115], - [70.385875, 67.09700000000396], - [68.49525, 65.0890000000004], - [68.816125, 65.72600000001216], - [73.376792, 69.67700000001287], - [69.128625, 66.37100000000373], - [68.844666, 66.99100000000158], - [68.920583, 65.96000000000402], - [69.358958, 66.29499999999666], - [70.102083, 66.43899999998837], - [70.468375, 67.4449999999922], - [73.707041, 71.19699999999796], - [70.228041, 66.81000000000381], - [69.853625, 67.53000000000497], - [70.18925, 67.26100000000201], - [69.147084, 65.73000000000206], - [68.897209, 65.89000000001022], - [71.365792, 68.10099999999863], - [74.186, 70.69500000000062], - [69.72575, 67.0419999999865], - [69.434791, 65.0359999999921], - [68.673167, 65.30300000000011], - [70.695458, 66.82899999999847], - [69.009042, 65.96000000000402], - [74.459458, 70.40500000000804], - [70.725708, 67.52199999999675], - [69.060875, 65.79999999999586], - [69.851625, 66.10799999999983], - [69.35375, 66.53299999999263], - [69.400834, 66.16700000000719], - [68.883708, 65.75700000000495], - [71.731833, 68.53800000000376], - [71.588542, 68.87100000000146], - [71.540584, 68.08700000000556], - [71.196791, 67.7999999999912], - [69.021708, 65.2639999999991], - [69.024792, 65.83700000000192], - [70.40075, 66.4380000000051], - [74.104583, 70.81499999999608], - [70.657208, 67.38500000000158], - [70.127584, 66.86999999999443], - [70.293, 66.66699999999537], - [69.840792, 66.31199999999637], - [69.632709, 65.98400000000026], - [68.442375, 65.40200000000596], - [70.458834, 67.16599999998607], - [70.585583, 68.1250000000091], - [71.608458, 68.09300000000462], - [68.939459, 65.83200000000033], - [70.268083, 66.78100000000597], - [69.841, 66.78899999999999], - [70.622292, 67.03000000000259], - [73.465875, 70.26499999999203], - [73.060042, 69.82299999999952], - [73.852959, 69.84699999999577], - [73.871375, 70.03899999999419], - [74.099417, 70.25900000000718], - [73.8975, 70.03999999999166], - [72.942333, 69.77400000000955], - [70.047583, 66.77700000000186], - [72.059708, 68.45799999999258], - [69.78975, 67.00399999999718], - [70.03675, 66.67000000001622], - [68.809792, 65.85400000000163], - [68.629, 65.70700000000329], - [72.818041, 69.33500000000947], - [71.473375, 67.53199999998571], - [70.723542, 67.09800000001565], - [68.649334, 65.4180000000224], - [69.390167, 66.00400000000661], - [68.296125, 65.36099999999578] - ], - "candidate": [ - [74.335333, 70.92900000000668], - [71.297666, 67.82499999999914], - [73.37875, 68.95499999998833], - [73.426125, 69.11999999999807], - [73.5885, 70.57499999999095], - [74.2215, 70.09700000000407], - [73.410958, 69.9769999999944], - [72.820083, 69.54100000001517], - [72.010666, 68.91999999999143], - [70.4465, 67.1830000000142], - [69.58, 66.371999999987], - [70.0135, 66.75199999999393], - [72.671459, 69.09800000001098], - [69.760792, 66.69100000000583], - [70.193375, 66.71699999999703], - [69.415083, 66.23100000000193], - [70.281083, 66.98199999999588], - [71.765167, 68.57300000000066], - [72.726542, 68.88999999999612], - [75.300375, 71.82400000000655], - [73.285792, 70.21099999998626], - [69.934709, 66.8760000000077], - [70.698458, 67.1169999999961], - [67.935625, 64.75000000000364], - [68.944583, 65.60800000001166], - [71.185208, 68.28900000000715], - [72.464458, 68.9040000000034], - [69.656417, 66.40199999999652], - [68.31425, 64.55300000000364], - [69.381334, 65.98899999998764], - [70.433416, 66.765999999987], - [69.096875, 65.52200000000141], - [71.634, 68.25100000000361], - [71.616125, 68.31200000000592], - [71.724417, 68.16100000000347], - [68.553917, 65.36200000000747], - [69.063792, 66.01799999999969], - [68.329167, 65.57400000001223], - [70.62075, 67.52600000000086], - [72.927833, 69.55299999999909], - [71.676916, 68.55499999998926], - [70.019709, 66.99100000000158], - [71.976375, 67.80299999999784], - [70.721166, 67.3010000000005], - [70.304542, 67.29599999999891], - [69.242208, 65.99299999999175], - [71.053625, 67.608000000007], - [69.170417, 65.90900000000488], - [69.775125, 66.62299999999277], - [70.837625, 67.18299999999999], - [70.137042, 66.70099999999479], - [69.459209, 66.3369999999901], - [70.044375, 66.16099999999392], - [74.498417, 70.95899999998778], - [70.177666, 66.35799999999392], - [69.897625, 66.2669999999963], - [70.723208, 67.43000000000166], - [69.10425, 66.42600000000698], - [69.320125, 66.27100000000041], - [68.956583, 66.04100000001267], - [74.47375, 71.05200000000877], - [70.512875, 67.10199999999134], - [69.966333, 66.58999999999082], - [67.957666, 64.9530000000027], - [69.709083, 65.97399999999709], - [71.328833, 67.67700000000332], - [69.21175, 66.09999999999161], - [74.541416, 70.38800000000833], - [68.554167, 65.41900000000567], - [69.394834, 66.24300000000005], - [69.365459, 66.54900000000907], - [69.991833, 67.07199999999602], - [69.607666, 66.05499999999154], - [69.42575, 65.87100000000135], - [73.156583, 69.61499999999887], - [70.297542, 67.52600000000086], - [68.947959, 65.86800000000892], - [68.246375, 65.10000000000105], - [69.149125, 65.45500000000004], - [70.86225, 67.62599999998997], - [72.563792, 69.20799999998906], - [69.046125, 65.69100000000105], - [71.242917, 68.14900000000534], - [68.665625, 65.48800000000199], - [68.809875, 65.8990000000017], - [69.829292, 66.21799999999212], - [69.036166, 65.39200000000278], - [74.066209, 70.08900000001006], - [69.7005, 66.94299999999487], - [70.9165, 67.47900000000584], - [69.084833, 65.99699999999586], - [68.702917, 65.62100000000726], - [68.824542, 65.41599999999903], - [71.712125, 67.89699999998788], - [73.93575, 69.95700000001648], - [69.859667, 67.08799999998405], - [70.719416, 67.32500000001096], - [70.347333, 67.09099999999069], - [70.643, 67.39399999999307], - [70.536084, 67.46800000000519], - [74.854334, 71.38199999999983], - [74.470041, 71.13600000000986], - [72.786375, 69.6659999999838], - [75.430542, 71.53200000001902], - [73.231084, 69.76099999999974], - [72.174042, 68.58200000000636], - [72.042041, 68.90199999999425], - [73.203, 69.57500000000039], - [72.059, 68.7679999999915], - [70.112958, 66.91000000000713], - [71.263416, 68.33699999999965], - [69.953834, 66.96799999998859], - [70.098958, 66.91899999999862], - [71.344125, 68.55299999999431], - [73.348458, 69.53099999999779], - [70.126583, 67.25000000000136], - [70.176417, 68.09599999999705], - [71.318083, 68.47199999998566], - [68.835917, 66.76799999998195], - [69.680375, 66.23899999999594] - ] - }, - "wall_medians_ms": { - "baseline": 70.4636045, - "candidate": 70.32593750000001 - }, - "change_percent": -0.19537320149438653 - } - ], - "output_sha256": "7efeac41a7e977323dc230cf27df01e3a37170497a392175ce09042ec2d7d2cc", - "summary": { - "baseline": { - "count": 360, - "wall_median_ms": 70.225958, - "cpu_median_ms": 66.86099999999584 - }, - "candidate": { - "count": 360, - "wall_median_ms": 70.22149999999999, - "cpu_median_ms": 66.94549999999566 - }, - "change_ms": -0.00445800000001384, - "change_percent": -0.006348080007700929 - } - }, - "install-cached": { - "argv": ["env", "install", "22.13.1"], - "cwd_depth": 0, - "rounds": [ - { - "samples": { - "baseline": [ - [4.202, 4.270000000019536], - [4.347375, 4.038000000008424], - [4.270958, 4.340000000013333], - [4.201833, 4.58600000000331], - [4.308333, 4.070999999996161], - [4.437917, 4.390999999998257], - [4.602541, 4.216999999997029], - [4.947125, 4.758000000009588], - [4.869625, 4.46199999998953], - [4.299, 4.1149999999987585], - [4.815458, 4.390999999998257], - [4.372208, 4.207000000008065], - [4.400542, 4.278999999996813], - [4.368875, 4.033999999990101], - [4.205, 4.2439999999999145], - [4.522208, 4.508999999998764], - [4.196125, 3.893000000019242], - [4.458625, 4.19499999999573], - [4.303875, 4.165999999997894], - [4.524542, 4.024999999998613], - [4.436125, 4.373999999998546], - [4.3675, 4.179000000007704], - [4.354667, 4.170999999999481], - [4.722292, 4.342999999991548], - [4.158792, 3.9490000000199643], - [4.532875, 4.714999999990255], - [4.057, 4.005000000006476], - [4.098084, 3.7240000000053897], - [4.347292, 4.447999999996455], - [4.071083, 4.1290000000060445], - [4.060416, 4.236000000005902], - [4.454834, 4.634999999993283], - [3.979375, 3.9579999999972415], - [4.075, 4.033000000006837], - [4.007875, 4.0600000000097225], - [4.326166, 4.187000000001717], - [4.039958, 3.9119999999996935], - [4.264042, 3.8109999999988986], - [4.296833, 4.153000000002294], - [3.971083, 3.660999999993919], - [4.229792, 4.136000000002582], - [4.205875, 4.205999999996379], - [4.0745, 4.170999999999481], - [4.098875, 3.505000000004088], - [4.468709, 4.447999999996455], - [4.123625, 4.2400000000100135], - [4.086709, 4.046999999999912], - [4.155292, 3.814000000005535], - [4.0475, 3.6029999999840356], - [4.051375, 3.6949999999933425], - [4.476792, 4.898999999994658], - [4.188958, 3.6600000000106547], - [5.310166, 5.450999999993655], - [4.87975, 4.704000000003816], - [5.374167, 5.052000000006274], - [5.732833, 5.533000000013999], - [4.402917, 4.390000000014993], - [4.43275, 4.527999999993426], - [4.21375, 4.439000000019178], - [4.44025, 4.038000000008424], - [4.534583, 4.0370000000109485], - [4.03475, 4.429999999999268], - [4.529, 4.665000000002806], - [4.216291, 4.145999999991545], - [4.288958, 3.7179999999921165], - [4.635625, 4.695999999995593], - [4.466542, 4.300999999998112], - [4.222958, 4.379999999997608], - [4.451333, 4.085000000003447], - [3.960958, 3.792999999987501], - [4.233875, 4.440000000002442], - [4.089208, 3.5810000000111586], - [4.004333, 4.106999999990535], - [4.237125, 3.540000000000987], - [4.038917, 4.191000000005829], - [4.15, 3.615000000010582], - [4.298458, 3.720000000001278], - [4.207542, 4.5939999999973224], - [4.107583, 3.5009999999857655], - [4.07075, 3.642999999996732], - [4.029583, 4.142000000001644], - [4.5, 4.715000000004466], - [5.121667, 5.591999999992936], - [4.259, 4.183000000011816], - [4.443292, 4.491999999999052], - [4.304958, 3.754000000000701], - [4.318208, 3.766999999996301], - [3.985583, 4.018999999999551], - [3.876375, 3.655999999992332], - [4.356166, 3.7229999999937036], - [4.170292, 4.3769999999909714], - [3.969667, 4.137000000000057], - [4.067, 4.31900000000951], - [4.218625, 3.789999999995075], - [4.308625, 4.322999999999411], - [3.985, 3.9450000000016416], - [3.996416, 3.7280000000095015], - [4.169291, 4.215999999999553], - [4.047417, 4.116999999993709], - [4.159084, 3.562999999999761], - [4.535041, 3.454000000004953], - [4.684917, 4.632999999998333], - [4.295375, 3.9850000000001273], - [4.399542, 4.315000000005398], - [4.224625, 4.691000000008216], - [4.030458, 4.32499999998015], - [4.355666, 4.501999999988016], - [4.316958, 4.14499999999407], - [4.164208, 4.256999999995514], - [3.844125, 3.631999999996083], - [4.32825, 4.417999999986932], - [4.122333, 4.292000000006624], - [4.419333, 4.1290000000060445], - [3.885125, 3.8619999999980337], - [4.396583, 4.2630000000087875], - [3.92925, 3.4999999999882903], - [4.94475, 4.722000000001003], - [4.762083, 4.267999999996164], - [4.453375, 4.033000000006837], - [4.716958, 4.43599999999833] - ], - "candidate": [ - [4.226875, 4.728999999997541], - [4.332042, 4.3819999999925585], - [4.188875, 4.19699999999068], - [4.717292, 4.872999999989247], - [4.41575, 4.123000000006982], - [4.631792, 4.455000000007203], - [4.662834, 4.54899999999725], - [4.434917, 4.502999999999702], - [4.878291, 4.558000000002949], - [4.97875, 4.654000000002156], - [4.431667, 4.249999999998977], - [4.396959, 4.284999999995875], - [4.613375, 4.227999999997678], - [4.467875, 4.404000000008068], - [4.435583, 4.062000000004673], - [4.752667, 4.474000000001865], - [4.313125, 4.059999999981301], - [4.579125, 4.294000000001574], - [4.492833, 4.09499999999241], - [4.5705, 4.455000000007203], - [4.521584, 4.5939999999973224], - [4.403917, 4.427000000006842], - [4.575709, 4.572999999993499], - [4.59475, 4.6820000000025175], - [4.45325, 4.454999999992992], - [4.402375, 4.162999999991257], - [4.220541, 4.581000000001723], - [4.418833, 4.482999999993353], - [4.654125, 4.4240000000002055], - [4.300875, 4.39699999999732], - [4.402166, 4.362000000000421], - [4.318, 4.228000000011889], - [4.341125, 4.267999999996164], - [4.172375, 4.184999999992556], - [4.358958, 4.165999999983683], - [4.756625, 4.941000000002305], - [4.2485, 4.278999999996813], - [4.265375, 4.241000000007489], - [4.254459, 4.187999999999192], - [4.250875, 4.174000000006117], - [4.57625, 4.582999999996673], - [4.2925, 4.463999999998691], - [4.464208, 4.565999999996961], - [4.185334, 4.23200000000179], - [4.577, 3.993000000008351], - [4.401958, 4.234999999994216], - [4.226792, 3.640999999987571], - [4.526166, 4.470999999995229], - [3.995125, 3.656000000006543], - [4.323834, 4.4570000000163645], - [3.861333, 3.5019999999974516], - [5.22125, 5.563999999992575], - [5.171917, 4.5630000000187465], - [4.675, 3.84099999999421], - [5.102333, 4.964999999984343], - [4.820666, 4.131999999984259], - [4.373458, 3.917999999998756], - [4.512125, 4.386999999994146], - [4.472458, 3.974999999996953], - [4.41425, 4.435999999984119], - [4.268208, 4.830999999995811], - [4.220375, 4.292999999989888], - [4.605584, 4.052000000001499], - [4.292, 3.9080000000097925], - [4.618917, 4.6780000000126165], - [4.189416, 3.622999999990384], - [4.9485, 4.238999999998327], - [4.348959, 3.9170000000154914], - [4.377375, 3.832000000002722], - [4.245875, 3.669999999999618], - [4.531417, 3.991999999996665], - [4.409458, 4.554999999996312], - [4.156958, 3.771999999997888], - [4.402167, 4.497000000000639], - [4.265167, 4.340999999996598], - [4.599083, 4.482999999993353], - [4.338167, 4.451999999986356], - [4.420583, 4.473000000018601], - [4.35275, 4.394000000004894], - [4.2685, 4.7650000000061254], - [4.205416, 4.344000000003234], - [4.27375, 3.745000000009213], - [4.310875, 3.705999999979781], - [4.231584, 3.771000000000413], - [4.293667, 3.8749999999936335], - [4.271542, 3.6500000000074806], - [4.548917, 4.629000000008432], - [4.109667, 3.8059999999973115], - [4.729125, 4.978000000008365], - [4.185834, 3.8720000000154187], - [4.526542, 4.8850000000015825], - [3.998583, 4.282999999986714], - [4.381834, 4.7050000000012915], - [4.032417, 4.141000000004169], - [4.10425, 3.8810000000069067], - [4.102208, 3.8889999999867086], - [4.111833, 4.208999999988805], - [4.280917, 4.161000000010517], - [4.131958, 4.104999999995584], - [4.39475, 4.615999999998621], - [4.151959, 4.276000000004387], - [4.438458, 3.8059999999973115], - [4.553041, 4.08000000000186], - [4.309416, 3.789999999995075], - [4.133459, 3.867999999997096], - [4.267, 4.151000000021554], - [4.340542, 4.141000000004169], - [4.097125, 4.277000000001863], - [4.374833, 4.397000000011531], - [4.094875, 3.7480000000158498], - [4.213584, 4.452999999998042], - [4.107167, 4.261999999997101], - [4.303459, 4.440000000002442], - [4.735959, 4.755999999986216], - [4.170166, 3.767000000010512], - [4.278791, 3.7149999999996908], - [4.71475, 4.295999999996525], - [4.700375, 4.761000000002014], - [4.627833, 4.217999999994504], - [4.670542, 5.013000000005263] - ] - }, - "wall_medians_ms": { - "baseline": 4.279958000000001, - "candidate": 4.376104 - }, - "change_percent": 2.2464239135056685 - }, - { - "samples": { - "baseline": [ - [4.539958, 4.080000000016071], - [4.515584, 4.000999999988153], - [4.647, 4.315000000005398], - [4.208792, 4.012000000003013], - [4.599458, 4.494000000008214], - [4.601083, 4.351999999997247], - [4.4945, 4.354999999989673], - [4.062959, 3.9579999999972415], - [4.334834, 4.098999999996522], - [4.227375, 4.064999999997099], - [4.541917, 4.264000000006263], - [4.022959, 4.222999999996091], - [4.041375, 3.7039999999990414], - [4.441875, 4.353000000008933], - [4.119292, 4.3539999999921974], - [4.393917, 4.348000000007346], - [4.899334, 5.141000000008944], - [4.09725, 3.966000000005465], - [4.107958, 3.7630000000064], - [4.013375, 3.733999999994353], - [4.137792, 3.9349999999984675], - [4.225666, 4.4049999999913325], - [4.166458, 4.320999999990249], - [3.992334, 3.9770000000061145], - [4.437084, 4.366000000004533], - [4.122875, 4.264999999989527], - [4.106333, 4.027000000007774], - [3.998833, 3.8289999999960855], - [4.039042, 4.00200000001405], - [4.291584, 3.859000000005608], - [3.914542, 3.8420000000058963], - [4.425917, 4.556000000007998], - [4.073375, 4.389000000003307], - [4.268416, 4.620000000002733], - [4.103416, 3.6119999999897345], - [4.5905, 3.9429999999924803], - [3.977041, 3.5989999999941347], - [3.932833, 4.176000000001068], - [4.186875, 3.602000000014982], - [4.233792, 3.5839999999893735], - [4.231333, 3.5529999999965867], - [4.153916, 3.7930000000017117], - [4.392625, 4.407999999997969], - [4.150291, 4.277999999985127], - [4.277791, 3.7419999999883657], - [4.177, 4.18000000000518], - [4.15775, 3.619000000000483], - [4.36125, 4.314000000007923], - [4.326042, 3.799000000000774], - [4.2155, 4.4189999999986185], - [4.369834, 3.9310000000085665], - [4.570834, 3.839999999996735], - [4.133833, 4.004999999992265], - [4.2975, 3.7130000000047403], - [4.0335, 3.5099999999914644], - [4.241833, 4.173999999991906], - [4.271833, 3.7730000000095743], - [4.119125, 4.474000000001865], - [4.692375, 4.5709999999985484], - [3.995333, 3.5709999999937736], - [4.122333, 3.7130000000047403], - [4.496583, 4.669000000006918], - [4.67125, 4.187999999999192], - [4.177833, 4.179999999990969], - [4.08575, 3.9390000000025793], - [4.336417, 4.559999999997899], - [4.232708, 4.306999999997174], - [4.224042, 3.680000000002792], - [4.16, 4.068000000003735], - [4.220625, 4.399000000006481], - [3.983292, 4.393000000007419], - [4.222084, 4.203000000003954], - [4.203208, 3.8420000000058963], - [4.335125, 3.799000000014985], - [4.010291, 3.733999999994353], - [3.959458, 3.5009999999857655], - [4.167334, 4.055000000008135], - [3.958625, 3.4800000000103637], - [4.03025, 4.249999999998977], - [4.324333, 4.230999999990104], - [4.146542, 4.255999999998039], - [3.937792, 4.071000000010372], - [3.890459, 3.8170000000121718], - [4.07425, 3.9720000000045275], - [4.151167, 4.272999999997751], - [3.958959, 3.715999999997166], - [4.14, 4.08199999999681], - [4.028708, 4.004000000009], - [4.094291, 3.7229999999937036], - [4.130125, 4.172000000011167], - [4.372959, 4.288999999999987], - [4.053458, 4.162000000007993], - [4.501042, 3.793999999999187], - [4.453333, 4.085000000003447], - [3.869084, 4.337000000006697], - [3.815417, 3.8710000000037326], - [3.903875, 4.100999999991473], - [4.226084, 4.227999999997678], - [4.200458, 3.9949999999890906], - [4.451958, 3.8380000000017844], - [4.484792, 4.253000000005613], - [4.392417, 3.804000000002361], - [4.259083, 4.098999999996522], - [4.10975, 3.5660000000063974], - [4.24225, 4.519000000016149], - [5.553375, 5.351000000004547], - [4.80625, 4.5339999999924885], - [4.651, 4.615999999998621], - [4.5265, 4.621000000000208], - [4.386583, 4.25799999999299], - [4.419625, 4.2439999999999145], - [4.679167, 4.2019999999922675], - [4.719667, 4.683999999997468], - [4.303542, 4.0300000000002], - [4.288125, 4.344000000003234], - [4.512833, 4.0460000000024365], - [4.449, 4.352000000011458], - [4.195041, 4.295999999996525], - [4.41525, 4.536999999999125], - [4.636708, 4.836999999980662] - ], - "candidate": [ - [4.639, 4.3780000000026575], - [4.516458, 4.193000000000779], - [4.4255, 4.355999999987148], - [4.375292, 4.06700000000626], - [4.379916, 4.230999999990104], - [4.764292, 4.57300000000771], - [4.474708, 4.2350000000084265], - [4.212292, 4.24499999999739], - [4.175208, 3.9070000000123173], - [4.620792, 4.542000000000712], - [4.373708, 4.075999999997748], - [4.093292, 4.24499999999739], - [4.338959, 4.189999999994143], - [4.205875, 4.299000000003161], - [4.451584, 4.131000000000995], - [4.238667, 4.33400000000006], - [5.356833, 5.061999999981026], - [4.312709, 4.587000000000785], - [4.357458, 4.390999999998257], - [4.32175, 4.419999999996094], - [4.225084, 4.343000000005759], - [4.3615, 4.477000000008502], - [4.292291, 4.322000000001935], - [4.389208, 3.780000000006112], - [4.305417, 4.379999999997608], - [4.11275, 4.200999999994792], - [4.662084, 4.453999999995517], - [4.149958, 4.42300000000273], - [4.225416, 4.006000000003951], - [4.054333, 3.945999999984906], - [4.401791, 4.090999999988298], - [4.126417, 4.227999999997678], - [4.216667, 4.482999999993353], - [4.14025, 4.158000000003881], - [4.198333, 4.430999999996743], - [5.066042, 5.182000000019116], - [4.624792, 4.739000000000715], - [4.41575, 4.118000000005395], - [4.748125, 4.91999999998427], - [4.299375, 4.631000000003382], - [4.214125, 3.951000000000704], - [5.07575, 5.274000000000001], - [4.414334, 3.937000000007629], - [4.037584, 3.9910000000134005], - [4.250959, 4.322000000016146], - [4.698667, 4.19499999999573], - [4.199208, 4.281999999989239], - [4.307542, 3.6960000000050286], - [4.190375, 4.193999999998255], - [4.539458, 4.087999999995873], - [4.258417, 4.2529999999914025], - [4.399375, 4.380000000011819], - [4.160875, 4.368999999996959], - [4.789583, 4.876999999993359], - [4.161792, 3.689000000008491], - [4.226584, 3.855000000015707], - [4.349667, 3.871999999986997], - [4.7445, 4.262999999994577], - [4.514, 3.8049999999998363], - [4.315292, 4.16900000000453], - [4.539667, 4.718999999994367], - [4.527, 3.9550000000048158], - [4.500042, 3.974999999996953], - [4.754333, 4.007000000001426], - [4.561666, 4.087000000012608], - [4.117292, 4.23399999999674], - [4.223958, 3.849999999985698], - [4.399583, 4.556000000007998], - [4.172292, 3.67400000000373], - [4.540792, 3.9289999999851943], - [4.170083, 3.7229999999937036], - [4.460084, 4.018999999999551], - [4.302667, 3.883000000001857], - [4.505667, 4.7179999999826805], - [4.297958, 3.9270000000044547], - [4.286583, 4.3040000000047485], - [4.087042, 3.6209999999954334], - [4.2475, 3.9609999999896672], - [4.134084, 4.091000000002509], - [3.997084, 3.8849999999968077], - [4.213834, 4.249000000015712], - [4.26775, 4.241999999990753], - [4.054667, 4.021999999991976], - [4.224958, 3.9839999999884412], - [4.429459, 4.508999999998764], - [4.265666, 4.311000000001286], - [4.368042, 4.288000000002512], - [4.126, 3.872000000001208], - [4.331708, 4.210999999997966], - [4.060417, 3.9900000000017144], - [4.272792, 4.1329999999959455], - [4.103042, 4.3099999999896], - [4.172333, 4.1559999999947195], - [4.28625, 4.52300000000605], - [4.02975, 4.128999999991834], - [4.546958, 4.623999999992634], - [4.35175, 4.33400000000006], - [4.267917, 4.0140000000121745], - [4.062208, 4.283000000015136], - [4.399209, 4.111999999992122], - [4.668666, 4.150999999993132], - [4.341667, 4.255000000000564], - [4.287375, 3.6350000000027194], - [4.672583, 4.67700000000093], - [4.437625, 4.048999999980651], - [4.921958, 4.102999999986423], - [4.657834, 4.4240000000002055], - [4.7295, 4.453000000012253], - [4.7725, 4.750000000001364], - [4.426958, 4.075000000014484], - [4.55975, 4.900999999989608], - [4.940875, 4.41000000000713], - [4.91375, 4.5720000000102345], - [4.92775, 4.722999999998478], - [4.734042, 4.238999999998327], - [4.632542, 4.352999999994722], - [4.534291, 4.535999999987439], - [4.823625, 4.205999999996379], - [4.582542, 4.034000000018523], - [5.128583, 5.020999999999276] - ] - }, - "wall_medians_ms": { - "baseline": 4.223063, - "candidate": 4.3507085 - }, - "change_percent": 3.0225810034091305 - }, - { - "samples": { - "baseline": [ - [4.222583, 4.3270000000035225], - [4.094791, 4.153000000002294], - [4.234333, 4.349000000019032], - [4.349084, 4.390999999998257], - [4.264417, 4.359000000007995], - [4.197292, 4.090000000005034], - [4.109459, 4.210000000000491], - [3.830708, 3.9659999999912543], - [4.522875, 4.407000000000494], - [3.975041, 4.1290000000060445], - [4.277583, 3.9320000000202526], - [4.209125, 4.513000000002876], - [4.205208, 3.883000000001857], - [4.151291, 4.342000000008284], - [4.091458, 3.84099999999421], - [4.058584, 4.179999999990969], - [4.1665, 4.272000000000276], - [4.155375, 4.242000000004964], - [4.263917, 4.3099999999896], - [3.8775, 3.5710000000079845], - [3.813083, 3.8249999999919737], - [4.080083, 3.465999999988867], - [4.154625, 4.327000000017733], - [4.057375, 4.149999999995657], - [3.900333, 4.227000000000203], - [4.040875, 3.7610000000114496], - [3.885709, 3.9270000000044547], - [4.008625, 4.0359999999850515], - [4.391375, 4.09299999999746], - [3.870167, 3.685000000004379], - [4.230667, 4.339999999999122], - [4.298875, 4.135999999988371], - [4.004625, 3.9850000000001273], - [4.282791, 4.412999999999556], - [4.448291, 4.494999999991478], - [4.803208, 4.665000000002806], - [4.196292, 4.170999999999481], - [4.238667, 4.226000000002728], - [4.054209, 3.572999999988724], - [4.194833, 4.247000000006551], - [4.136541, 4.326999999989312], - [4.104084, 3.620000000012169], - [4.0735, 3.7739999999928386], - [4.156584, 3.961000000003878], - [4.305542, 4.340999999996598], - [3.781125, 3.3669999999972333], - [4.277375, 3.5529999999965867], - [4.232584, 4.183000000011816], - [4.000041, 3.5749999999978854], - [4.394291, 3.8419999999916854], - [4.647959, 4.803999999992925], - [4.359708, 3.7840000000102236], - [4.23225, 3.6460000000033688], - [3.940583, 3.5159999999905267], - [4.14075, 3.5080000000107248], - [4.233375, 3.603999999981511], - [4.404417, 4.311000000015497], - [4.0295, 3.9209999999911815], - [4.083042, 4.283000000000925], - [4.309291, 4.156999999992195], - [4.211833, 3.720000000001278], - [4.15775, 3.4639999999939164], - [4.08075, 3.398000000004231], - [4.044667, 4.144000000010806], - [4.265958, 4.225000000005252], - [4.166708, 3.63699999999767], - [4.112459, 4.268000000010375], - [4.027083, 3.4519999999957918], - [4.231625, 3.776000000002], - [4.107916, 3.699000000011665], - [4.31675, 3.838999999985049], - [4.009833, 3.4800000000103637], - [3.995083, 3.4539999999907423], - [4.25775, 4.287000000005037], - [4.12675, 3.5720000000054597], - [4.165375, 4.075999999997748], - [4.097458, 3.355999999982373], - [4.311167, 3.8750000000220552], - [4.363667, 4.087999999995873], - [4.094625, 3.500000000002501], - [4.238625, 3.486000000009426], - [4.016125, 3.8939999999882957], - [3.997667, 3.3910000000076934], - [4.15475, 3.55900000000986], - [5.095917, 3.8509999999973843], - [4.2575, 3.748000000001639], - [4.325583, 4.252000000008138], - [4.028125, 4.470999999995229], - [4.348542, 4.5339999999924885], - [4.251667, 4.020999999994501], - [4.35425, 4.524000000003525], - [4.2995, 3.857999999993922], - [4.280792, 4.006999999987215], - [4.483542, 4.352000000011458], - [4.57575, 4.54700000001651], - [4.3125, 3.895999999997457], - [4.202334, 4.145000000008281], - [4.521833, 4.245000000011601], - [4.453416, 3.973999999985267], - [4.412209, 4.497999999998115], - [4.3115, 4.467000000005328], - [4.740708, 4.68999999999653], - [4.474333, 4.29499999999905], - [4.676041, 4.505999999992127], - [4.414959, 4.00599999998974], - [4.475709, 4.389000000003307], - [4.490667, 4.310000000003811], - [4.402042, 4.178000000010229], - [4.031792, 4.333000000002585], - [4.415708, 4.421999999991044], - [4.271791, 4.212999999992917], - [4.819292, 4.215000000016289], - [4.302583, 4.446000000001504], - [4.201958, 4.354999999989673], - [4.660667, 4.491999999999052], - [4.2725, 4.183000000011816], - [4.557125, 4.836999999994873], - [3.967292, 3.4430000000043037], - [4.395584, 4.69900000001644], - [4.149292, 3.995999999986566] - ], - "candidate": [ - [4.373583, 4.4699999999977535], - [4.228875, 3.906000000000631], - [4.211583, 4.432999999991694], - [4.170917, 4.19699999999068], - [4.307208, 4.115999999982023], - [4.308417, 4.338000000004172], - [4.167959, 3.943000000006691], - [4.257625, 4.204999999998904], - [4.294791, 4.317000000000348], - [4.249459, 4.562999999990325], - [4.737791, 4.6169999999960964], - [4.440959, 4.2249999999910415], - [4.558, 4.506999999989603], - [4.446625, 4.627999999996746], - [4.105083, 4.190000000008354], - [4.056666, 4.040000000003374], - [4.413042, 4.298000000005686], - [4.354583, 4.490999999987366], - [4.309667, 4.388000000005832], - [3.991417, 4.188999999996668], - [4.343584, 3.9450000000158525], - [3.977708, 3.6860000000018545], - [4.426041, 3.7039999999848305], - [4.456334, 4.650000000012255], - [4.373334, 4.490999999987366], - [4.537958, 4.699000000002229], - [4.069791, 3.756999999993127], - [4.037167, 4.232999999999265], - [4.215791, 4.46000000000879], - [4.090208, 4.041999999998325], - [4.219959, 4.2810000000059745], - [4.386625, 4.259000000004676], - [4.221875, 4.451000000003091], - [4.225375, 4.445000000004029], - [4.446209, 4.2439999999999145], - [4.38375, 4.1060000000072705], - [4.071, 4.1520000000048185], - [4.387208, 4.517999999990252], - [4.146333, 4.086000000000922], - [4.584125, 3.9589999999947167], - [4.09275, 3.718000000020538], - [4.371916, 4.023999999986927], - [4.124, 3.708000000003153], - [4.093666, 3.9540000000073405], - [4.096208, 4.039999999989163], - [4.137625, 3.7010000000066157], - [4.575625, 4.799000000005549], - [4.287416, 3.746999999989953], - [4.592667, 4.241000000007489], - [4.557875, 4.869000000013557], - [4.423917, 3.9899999999875035], - [4.543375, 4.527999999993426], - [4.32825, 4.466000000007853], - [4.118333, 3.59999999999161], - [4.440125, 4.121000000012032], - [4.739458, 4.728000000014276], - [4.962584, 4.486999999983254], - [4.278416, 3.7839999999960128], - [4.545958, 3.849000000002434], - [4.457334, 3.914000000008855], - [4.488959, 4.525999999998476], - [4.521083, 4.829999999998336], - [4.265666, 4.5070000000038135], - [4.428375, 3.974999999996953], - [4.475333, 3.875999999991109], - [4.636625, 4.379000000000133], - [4.416875, 3.84099999999421], - [4.17375, 4.037999999994213], - [4.49825, 4.266000000001213], - [4.136958, 3.637999999995145], - [4.2705, 4.225000000005252], - [4.094625, 4.210999999997966], - [4.030625, 4.400000000003956], - [4.361167, 3.9939999999916154], - [4.383416, 4.757999999995377], - [4.480917, 3.827000000001135], - [4.072084, 4.2350000000084265], - [4.593708, 4.5849999999916236], - [4.28425, 4.535000000004175], - [3.947417, 3.5210000000063246], - [4.561667, 4.9119999999902575], - [4.098458, 4.344000000003234], - [4.2445, 4.123999999990247], - [4.058167, 3.6719999999945685], - [4.631792, 4.766000000003601], - [4.425, 4.156999999992195], - [4.389333, 4.392999999993208], - [4.403542, 4.502999999999702], - [4.603333, 4.5260000000126865], - [4.224708, 4.512000000005401], - [4.442541, 4.125000000001933], - [4.717375, 4.440999999999917], - [4.671708, 4.380000000011819], - [4.657792, 4.589999999993211], - [4.762417, 4.76799999998434], - [4.564208, 4.694999999998117], - [4.586958, 4.96999999998593], - [4.436667, 4.193000000000779], - [4.672208, 4.520000000013624], - [5.139584, 5.4189999999891825], - [4.906708, 5.071000000000936], - [4.6345, 4.517000000006988], - [4.456208, 4.348000000007346], - [4.821583, 4.30800000000886], - [4.52075, 4.187000000001717], - [4.598708, 4.688999999999055], - [4.438583, 4.262999999994577], - [4.414208, 4.596999999989748], - [4.452459, 4.249000000001502], - [4.712959, 4.456000000018889], - [4.594875, 4.061999999990462], - [4.518583, 4.636999999988234], - [4.600042, 3.9629999999988286], - [4.300916, 4.477000000008502], - [4.134125, 3.731000000001927], - [4.211833, 4.382999999990034], - [4.273917, 3.7779999999969505], - [4.120208, 3.58699999999601], - [4.192167, 3.614999999996371], - [4.4475, 4.00200000001405] - ] - }, - "wall_medians_ms": { - "baseline": 4.226625, - "candidate": 4.3869165 - }, - "change_percent": 3.7924230325614205 - } - ], - "output_sha256": "4aeb53ae081d30296305fbb982777e01411bf742fb2c6880e7a4b3bc1bd2de21", - "summary": { - "baseline": { - "count": 360, - "wall_median_ms": 4.231, - "cpu_median_ms": 4.147999999993601 - }, - "candidate": { - "count": 360, - "wall_median_ms": 4.3736455, - "cpu_median_ms": 4.249500000007345 - }, - "change_ms": 0.14264550000000042, - "change_percent": 3.3714370125266013 - } - }, - "install-fresh": { - "argv": ["env", "install", "22.13.1"], - "cwd_depth": 0, - "rounds": [ - { - "samples": { - "baseline": [ - [1105.69925, 1061.743000000007], - [1073.0215, 1043.7599999999918], - [1074.768875, 1028.5140000000013], - [1073.133041, 1032.6189999999826], - [1074.517291, 1044.080000000008], - [1054.010708, 1019.3700000000092], - [1043.723583, 1036.787000000018], - [1053.498042, 1033.5429999999947], - [1049.660041, 1021.7650000000162], - [1084.967959, 1042.8170000000136] - ], - "candidate": [ - [1121.345375, 1109.7879999999946], - [1123.11075, 1107.878999999997], - [1160.232417, 1119.7680000000078], - [1103.180041, 1082.2500000000018], - [1145.192875, 1112.556000000012], - [1194.521458, 1107.732999999996], - [1156.663583, 1101.2769999999819], - [1155.854875, 1115.2649999999937], - [1123.543666, 1089.3999999999835], - [1174.467416, 1106.1149999999884] - ] - }, - "wall_medians_ms": { - "baseline": 1073.0772705, - "candidate": 1150.5238749999999 - }, - "change_percent": 7.217243960811293 - }, - { - "samples": { - "baseline": [ - [1087.280541, 1048.846999999995], - [1059.1695, 1037.5350000000053], - [1088.240375, 1052.129999999977], - [1034.75225, 1011.9000000000256], - [1045.141542, 1031.2559999999849], - [1037.706583, 1020.1690000000099], - [1080.805584, 1038.5040000000174], - [1049.5185, 1036.090999999999], - [1066.344666, 1024.788000000001], - [1053.187875, 1029.4120000000078] - ], - "candidate": [ - [1101.5165, 1094.7069999999997], - [1107.906292, 1086.4590000000048], - [1146.560666, 1114.2010000000084], - [1107.247375, 1091.47999999999], - [1149.80425, 1113.8400000000104], - [1127.122792, 1095.0559999999996], - [1167.840834, 1120.5139999999858], - [1130.3415, 1104.625999999996], - [1119.412291, 1095.138999999989], - [1136.454667, 1098.4770000000026] - ] - }, - "wall_medians_ms": { - "baseline": 1056.1786875, - "candidate": 1128.7321459999998 - }, - "change_percent": 6.869430273369326 - }, - { - "samples": { - "baseline": [ - [1101.203042, 1026.157000000012], - [1058.8985, 1031.3700000000097], - [1041.464917, 1031.3820000000078], - [1067.4355, 1044.0490000000011], - [1068.879125, 1047.941000000037], - [1096.708334, 1066.6829999999834], - [1077.328375, 1042.080000000027], - [1086.38675, 1053.9400000000114], - [1068.431875, 1043.9489999999978], - [1042.303625, 1021.207000000004] - ], - "candidate": [ - [1141.619042, 1103.3479999999827], - [1114.095917, 1104.469000000023], - [1127.086458, 1093.4269999999628], - [1112.957709, 1090.9540000000106], - [1108.053375, 1096.0649999999816], - [1126.644959, 1115.5149999999878], - [1141.546084, 1110.876999999988], - [1147.578875, 1116.6979999999853], - [1099.803833, 1080.2620000000047], - [1093.502833, 1079.6339999999987] - ] - }, - "wall_medians_ms": { - "baseline": 1068.6554999999998, - "candidate": 1120.370438 - }, - "change_percent": 4.8392524999871345 - } - ], - "output_sha256": "4aeb53ae081d30296305fbb982777e01411bf742fb2c6880e7a4b3bc1bd2de21", - "summary": { - "baseline": { - "count": 30, - "wall_median_ms": 1067.9336875, - "cpu_median_ms": 1036.4390000000085 - }, - "candidate": { - "count": 30, - "wall_median_ms": 1127.104625, - "cpu_median_ms": 1103.9085000000027 - }, - "change_ms": 59.170937500000036, - "change_percent": 5.540693976843958 - } - } - }, - "sample_columns": ["wall_ms", "cpu_ms"] -} diff --git a/bench/binary-size/evidence/compression-benchmark-rounds.json b/bench/binary-size/evidence/compression-benchmark-rounds.json deleted file mode 100644 index 3f87719838..0000000000 --- a/bench/binary-size/evidence/compression-benchmark-rounds.json +++ /dev/null @@ -1,497 +0,0 @@ -[ - { - "variant": "napi-compressed-o3", - "node": "v22.23.2", - "source_bytes": 141779, - "results": { - "parse": { - "median_ms": 4.445375000000013, - "samples_ms": [ - 4.309042000000005, 4.182166000000009, 4.449042000000006, 4.470500000000001, - 4.417083000000005, 4.450209000000001, 4.47916699999999, 4.668000000000006, - 4.353915999999998, 4.250875000000008, 4.459209000000001, 4.4422910000000115, - 4.60304099999999, 4.3478339999999776, 4.469208000000009, 4.564791999999983, - 4.445833000000022, 4.572457999999983, 4.302334000000002, 4.300625000000025, - 4.229417000000012, 4.445375000000013, 4.711083000000002, 4.310292000000004, 4.422708 - ], - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.1577920000000006, - "samples_ms": [ - 2.0942090000000064, 2.1074580000000083, 2.454499999999996, 2.2743750000000205, - 2.2497499999999775, 2.2772910000000195, 2.252416000000011, 2.203000000000003, - 2.230165999999997, 2.144959, 2.1028750000000116, 2.3869580000000212, 2.1247079999999983, - 2.114167000000009, 2.13900000000001, 2.102541000000002, 2.1577920000000006, - 2.1732920000000036, 2.2343329999999924, 2.382083999999992, 2.132333000000017, - 2.1289579999999546, 2.0898750000000064, 2.0859590000000026, 2.1638750000000186 - ], - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.081124999999986, - "samples_ms": [ - 2.042500000000018, 2.081124999999986, 2.159999999999968, 2.0162500000000136, - 2.1004159999999956, 2.141707999999994, 2.0592920000000277, 2.0802920000000427, - 2.0873339999999985, 2.0943750000000136, 2.054083999999989, 2.040666999999985, - 2.178375000000017, 2.070291999999995, 2.058917000000008, 2.032791999999972, - 2.0319999999999823, 2.0689160000000015, 2.100666999999987, 2.040416999999991, - 2.167500000000018, 2.108333000000016, 2.1348750000000223, 2.3224590000000376, - 2.0880000000000223 - ], - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.0026249999999663487, - "samples_ms": [ - 0.003500000000030923, 0.0031250000000113687, 0.0027499999999918145, 0.004415999999991982, - 0.004917000000034477, 0.0031250000000113687, 0.002583000000015545, 0.002625000000023192, - 0.0026249999999663487, 0.002541000000007898, 0.002625000000023192, 0.00254199999994853, - 0.0025420000000053733, 0.0024999999999977263, 0.006792000000018561, 0.004249999999956344, - 0.0028340000000071086, 0.0026249999999663487, 0.0025420000000053733, - 0.0024999999999977263, 0.0025840000000130203, 0.0024999999999977263, 0.002375000000029104, - 0.0024580000000469227, 0.002375000000029104 - ], - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - }, - { - "variant": "napi-compressed-o3", - "node": "v22.23.2", - "source_bytes": 141779, - "results": { - "parse": { - "median_ms": 4.290458000000001, - "samples_ms": [ - 4.297458000000006, 4.311374999999998, 4.43754100000001, 4.403041999999999, - 4.240291999999997, 4.586666000000008, 4.277000000000001, 4.4077079999999995, - 4.236000000000004, 4.445125000000004, 4.2167499999999905, 4.239709000000005, - 4.455459000000019, 4.276457999999991, 4.290458000000001, 4.269207999999992, - 4.309416999999996, 4.379750000000001, 4.161583000000007, 4.162416000000007, - 4.252375000000001, 4.237791999999985, 4.405167000000006, 4.188041999999996, 4.588583 - ], - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.1464579999999955, - "samples_ms": [ - 2.195999999999998, 2.203624999999988, 2.3936669999999935, 2.1464579999999955, - 2.1211669999999856, 2.145792, 2.184375000000017, 2.116500000000002, 2.13870799999998, - 2.2161250000000052, 2.0954169999999976, 2.311250000000001, 2.145667000000003, - 2.131458000000009, 2.154375000000016, 2.0644169999999917, 2.139792, 2.259416999999985, - 2.218083000000007, 2.362707999999998, 2.173291000000006, 2.181791000000004, - 2.0505419999999788, 2.045500000000004, 2.127917000000025 - ], - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.0600839999999607, - "samples_ms": [ - 2.1119170000000054, 2.0865420000000086, 2.0219999999999914, 2.0767920000000117, - 2.132167000000038, 2.0940420000000017, 2.002791000000002, 1.973957999999982, - 1.9600000000000364, 1.965709000000004, 2.0133749999999964, 1.9688749999999686, - 1.9335419999999885, 1.9305830000000128, 1.982500000000016, 2.1144580000000133, - 2.107249999999965, 2.2087499999999523, 2.066958999999997, 2.0600839999999607, - 2.051540999999986, 2.1825419999999554, 1.9942500000000223, 2.2685410000000275, - 2.119374999999991 - ], - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.0027499999999918145, - "samples_ms": [ - 0.0031250000000113687, 0.0028750000000172804, 0.002667000000030839, 0.003708000000017364, - 0.004750000000001364, 0.0029170000000249274, 0.002666000000033364, 0.0025420000000053733, - 0.0024579999999900792, 0.0024999999999977263, 0.0025840000000130203, 0.002415999999982432, - 0.002375000000029104, 0.002459000000044398, 0.005999999999971806, 0.004124999999987722, - 0.002708000000041011, 0.002583000000015545, 0.0025420000000053733, 0.0027499999999918145, - 0.0031250000000113687, 0.0031250000000113687, 0.00304199999999355, 0.002999999999985903, - 0.0030409999999960746 - ], - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - }, - { - "variant": "napi-o3", - "node": "v22.23.2", - "source_bytes": 141779, - "results": { - "parse": { - "median_ms": 4.358833999999973, - "samples_ms": [ - 4.411625000000001, 4.308208999999991, 4.454959000000002, 4.270708999999982, - 4.272958000000017, 4.343833999999987, 4.383624999999995, 4.567417000000006, - 4.352249999999998, 4.2539580000000115, 4.370249999999999, 4.206832999999989, - 4.407708000000014, 4.358833999999973, 4.421875, 4.349375000000009, 4.33883400000002, - 4.427082999999982, 4.30012499999998, 4.367041, 4.264290999999986, 4.329167000000012, - 4.5191250000000025, 4.46029200000001, 4.370833000000005 - ], - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.1328750000000127, - "samples_ms": [ - 2.1340409999999963, 2.044083999999998, 2.564290999999969, 2.1315420000000245, - 2.0847080000000346, 2.0562499999999773, 2.095958000000053, 2.17674999999997, - 2.0969579999999723, 2.114582999999982, 2.0787920000000213, 2.319000000000017, - 2.134291000000019, 2.1323750000000246, 2.1437080000000037, 2.2215419999999995, - 2.130833999999993, 2.124834000000021, 2.160041999999976, 2.350208000000009, - 2.173917000000017, 2.1328750000000127, 2.192834000000005, 2.08804200000003, - 2.273458000000005 - ], - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.071916999999985, - "samples_ms": [ - 2.082667000000015, 2.014083000000028, 1.997624999999971, 2.0309589999999957, - 2.0473330000000374, 2.1649590000000103, 2.045458999999994, 1.9966670000000022, - 2.010167000000024, 2.1495419999999967, 2.059415999999999, 2.0402910000000247, - 2.071124999999995, 2.146250000000009, 2.12179100000003, 2.047957999999994, - 2.1199169999999867, 2.1818329999999833, 2.033917000000031, 2.075540999999987, - 2.140291999999988, 2.071916999999985, 2.3907919999999763, 2.09133300000002, - 2.150374999999997 - ], - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.00254199999994853, - "samples_ms": [ - 0.003417000000013104, 0.0029590000000325745, 0.0030000000000427463, 0.005208999999979369, - 0.004958999999985281, 0.0027919999999994616, 0.002625000000023192, 0.0024999999999977263, - 0.0025829999999587017, 0.0024999999999977263, 0.0024999999999977263, - 0.0024999999999977263, 0.0026249999999663487, 0.0024579999999900792, 0.006290999999976066, - 0.004208000000005541, 0.0028750000000172804, 0.00254199999994853, 0.0024999999999977263, - 0.002415999999982432, 0.0024579999999900792, 0.0024589999999875545, 0.002417000000036751, - 0.0024169999999799074, 0.0024169999999799074 - ], - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - }, - { - "variant": "napi-o3", - "node": "v22.23.2", - "source_bytes": 141779, - "results": { - "parse": { - "median_ms": 4.348583000000005, - "samples_ms": [ - 4.348583000000005, 4.468083000000007, 4.5767919999999975, 4.323916000000011, 4.413916, - 4.427250000000001, 4.228915999999998, 4.363208, 4.323458000000002, 4.421207999999993, - 4.329625000000007, 4.390540999999985, 4.4992909999999995, 4.343333999999999, - 4.381792000000019, 4.27604199999999, 4.255209000000008, 4.369249999999994, - 4.3403749999999945, 4.2426670000000115, 4.349083000000007, 4.2842919999999935, - 4.476167000000004, 4.320416999999992, 4.259250000000009 - ], - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.1312499999999943, - "samples_ms": [ - 2.1350419999999986, 2.110416000000015, 2.372250000000008, 2.1235420000000147, - 2.120834000000002, 2.1741670000000113, 2.1312499999999943, 2.094374999999985, - 2.1389580000000024, 2.158209000000028, 2.1701659999999947, 2.32974999999999, - 2.1110000000000184, 2.1170000000000186, 2.1241249999999923, 2.153375000000011, - 2.067875000000015, 2.0841669999999795, 2.135707999999994, 2.2970419999999763, - 2.1006670000000156, 2.097457999999989, 2.107292000000001, 2.17108300000001, - 2.136624999999981 - ], - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.072915999999964, - "samples_ms": [ - 2.0647920000000113, 2.1172919999999635, 2.095792000000017, 2.101541999999995, - 2.1020829999999933, 2.0471670000000017, 2.043666999999971, 2.028041999999971, - 2.111083000000008, 2.1112079999999764, 2.1382090000000176, 2.042333000000042, - 2.024499999999989, 2.0674169999999776, 2.1536669999999845, 2.045749999999998, - 2.0343750000000114, 2.072915999999964, 2.1299169999999776, 2.0499169999999935, - 2.048166999999978, 2.020208000000025, 2.1348339999999553, 2.402417000000014, - 2.101083000000017 - ], - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.003291999999987638, - "samples_ms": [ - 0.004000000000019099, 0.004250000000013188, 0.0037499999999681677, 0.00587499999994634, - 0.006000000000028649, 0.0029159999999706088, 0.003207999999972344, 0.0037079999999605207, - 0.0034579999999664324, 0.003249999999979991, 0.0032920000000444816, 0.00333299999999781, - 0.003165999999964697, 0.003207999999972344, 0.007958000000030552, 0.004415999999991982, - 0.0031249999999545253, 0.003291999999987638, 0.00333299999999781, 0.0032089999999698193, - 0.003291999999987638, 0.003249999999979991, 0.0031670000000190157, 0.0030000000000427463, - 0.0028750000000172804 - ], - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - }, - { - "variant": "napi-compressed-o3", - "node": "v22.23.2", - "source_bytes": 141779, - "results": { - "parse": { - "median_ms": 4.443416999999997, - "samples_ms": [ - 4.421999999999997, 4.428291999999999, 4.5967919999999935, 4.443416999999997, - 4.540790999999999, 4.422958999999992, 4.541250000000005, 4.582499999999996, - 4.462209000000001, 4.461540999999997, 4.438999999999993, 4.402584000000019, - 4.533916999999974, 4.36458300000001, 4.341833000000008, 4.456834000000015, - 4.491333999999995, 4.558374999999984, 4.3700000000000045, 4.286999999999978, - 4.451667000000015, 4.326958000000019, 4.617083000000008, 4.27279200000001, - 4.40983300000002 - ], - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.1109580000000108, - "samples_ms": [ - 2.259457999999995, 2.1308340000000214, 2.4297909999999945, 2.086041999999992, - 2.143041000000011, 2.1062499999999886, 2.1049170000000004, 2.1277919999999995, - 2.1122500000000173, 2.1109580000000108, 2.0844579999999837, 2.3081249999999898, - 2.102833000000004, 2.1027500000000146, 2.2136250000000075, 2.156958000000003, - 2.0682079999999985, 2.0852079999999944, 2.094707999999997, 2.3471660000000156, - 2.1014999999999873, 2.113625000000013, 2.1239999999999952, 2.0958330000000274, - 2.106667000000016 - ], - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.045332999999971, - "samples_ms": [ - 2.1208330000000046, 2.033416999999986, 2.058125000000018, 2.0846670000000245, - 2.037916999999993, 2.0206249999999955, 1.9987090000000194, 2.045332999999971, - 2.014499999999998, 1.9997089999999957, 2.0348749999999995, 2.0331669999999917, - 2.050375000000031, 2.183999999999969, 2.042332999999985, 2.0143750000000296, - 1.9537920000000213, 1.9397500000000036, 2.106625000000008, 2.047917000000041, - 2.0891249999999673, 2.1138329999999996, 2.0954590000000053, 2.3439579999999864, - 2.0780829999999924 - ], - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.002625000000023192, - "samples_ms": [ - 0.0034579999999664324, 0.0031250000000113687, 0.0027499999999918145, 0.004334000000028482, - 0.0049999999999954525, 0.006917000000044027, 0.002625000000023192, 0.002625000000023192, - 0.002667000000030839, 0.002583000000015545, 0.002541000000007898, 0.0025840000000130203, - 0.0024999999999977263, 0.0025840000000130203, 0.007333000000016909, 0.004458999999997104, - 0.002958999999975731, 0.0027499999999918145, 0.0026669999999739957, 0.002583000000015545, - 0.0024999999999977263, 0.0024580000000469227, 0.0024579999999900792, - 0.0025840000000130203, 0.0024999999999977263 - ], - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - }, - { - "variant": "napi-o3", - "node": "v22.23.2", - "source_bytes": 141779, - "results": { - "parse": { - "median_ms": 4.365375, - "samples_ms": [ - 4.431916000000001, 4.283374999999992, 4.867000000000004, 4.526709000000011, - 4.366333999999995, 4.367207999999991, 4.392958000000007, 4.554457999999997, - 4.203249999999997, 4.25004100000001, 4.483958999999999, 4.108374999999995, - 4.607333000000011, 4.416416999999996, 4.338540999999992, 4.195791999999983, - 4.3387500000000045, 4.5224999999999795, 4.328749999999985, 4.32650000000001, - 4.354083000000003, 4.092959000000008, 4.729916000000003, 4.365375, 4.32487500000002 - ], - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.129917000000006, - "samples_ms": [ - 2.0963749999999948, 2.1114169999999888, 2.381833999999998, 2.1624590000000126, - 2.082250000000016, 2.250957999999997, 2.0313329999999894, 2.1840419999999767, - 2.241250000000008, 2.054708000000005, 1.9990420000000029, 2.351292000000001, - 2.1860419999999863, 2.10612500000002, 2.063208000000003, 2.086541000000011, - 2.2278750000000116, 2.0960000000000036, 2.128667000000007, 2.346624999999989, - 2.129917000000006, 2.129583999999994, 2.1370840000000157, 2.158834000000013, - 2.1760419999999954 - ], - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.0362910000000056, - "samples_ms": [ - 2.0539159999999583, 2.061499999999967, 2.0483750000000214, 2.0793749999999704, - 2.0996249999999463, 2.0434170000000336, 1.9894580000000133, 1.989417000000003, - 2.000249999999994, 2.0191670000000386, 2.03370799999999, 2.013749999999959, - 2.035624999999982, 2.067875000000015, 2.0659160000000156, 2.0233749999999873, - 2.0270830000000046, 2.02391700000004, 2.0131250000000023, 2.0179580000000215, - 2.0536670000000186, 2.0362910000000056, 2.0548749999999814, 2.3396249999999554, - 2.054417000000001 - ], - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.002583000000015545, - "samples_ms": [ - 0.00333299999999781, 0.002999999999985903, 0.002874999999960437, 0.004416999999989457, - 0.005041000000005624, 0.0027919999999994616, 0.002625000000023192, 0.002541000000007898, - 0.0025420000000053733, 0.002625000000023192, 0.0025420000000053733, 0.002541000000007898, - 0.0024589999999875545, 0.002583000000015545, 0.006416999999999007, 0.004333999999971638, - 0.0028750000000172804, 0.002625000000023192, 0.0025420000000053733, 0.0024579999999900792, - 0.0025829999999587017, 0.0024589999999875545, 0.0024999999999977263, - 0.0024169999999799074, 0.0024589999999875545 - ], - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - }, - { - "variant": "napi-compressed-o3", - "node": "v22.23.2", - "source_bytes": 141779, - "results": { - "parse": { - "median_ms": 4.309875000000005, - "samples_ms": [ - 4.309125000000009, 4.326708999999994, 4.425708999999998, 4.2052910000000026, - 4.283374999999992, 4.309875000000005, 4.302209000000005, 4.487458000000004, - 4.329166999999998, 4.342959000000008, 4.361750000000001, 4.30208300000001, - 4.478082999999998, 4.246791999999999, 4.240667000000002, 4.522375000000011, - 4.364000000000004, 4.511917000000011, 4.345291000000003, 4.30125000000001, - 4.176375000000007, 4.242665999999986, 4.5057079999999985, 4.251000000000005, - 4.302790999999985 - ], - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.1435000000000173, - "samples_ms": [ - 2.1253329999999835, 2.117333000000002, 2.319375000000008, 2.501249999999999, - 2.186292000000009, 2.1301249999999925, 2.0994170000000167, 2.108875000000012, - 2.1042500000000075, 2.171457999999973, 2.1533330000000035, 2.595416, 2.2108749999999873, - 2.0910410000000184, 2.087582999999995, 2.1630830000000003, 2.155083999999988, - 2.184457999999978, 2.1435000000000173, 2.467250000000007, 2.250416999999999, - 2.1322090000000173, 2.122540999999984, 2.138458000000014, 2.1253749999999627 - ], - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.05008399999997, - "samples_ms": [ - 2.2043750000000273, 2.0591249999999945, 2.016124999999988, 1.99837500000001, - 2.157541999999978, 2.05008399999997, 1.980374999999981, 1.9657499999999573, - 2.0075410000000034, 2.1175830000000246, 2.1467080000000465, 2.0159170000000017, - 2.035500000000013, 2.2956250000000296, 2.0889999999999986, 2.042541999999969, - 2.0839160000000447, 2.112792000000013, 2.0127499999999827, 1.9427919999999972, - 2.1620410000000447, 2.1390420000000177, 2.0287500000000023, 2.3214169999999967, - 1.9982090000000312 - ], - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.002625000000023192, - "samples_ms": [ - 0.0031250000000113687, 0.00304199999999355, 0.0027089999999816428, 0.00454199999995808, - 0.0047089999999911925, 0.0027499999999918145, 0.002625000000023192, 0.002541000000007898, - 0.002583999999956177, 0.002625000000023192, 0.0025420000000053733, 0.0025420000000053733, - 0.0024999999999977263, 0.002541000000007898, 0.006666999999993095, 0.005374999999958163, - 0.003333999999995285, 0.0034160000000156288, 0.003417000000013104, 0.0027919999999994616, - 0.002583000000015545, 0.0024579999999900792, 0.002417000000036751, 0.0024589999999875545, - 0.0024999999999977263 - ], - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - }, - { - "variant": "napi-o3", - "node": "v22.23.2", - "source_bytes": 141779, - "results": { - "parse": { - "median_ms": 4.41345800000002, - "samples_ms": [ - 4.496874999999989, 4.779167000000001, 4.721084000000005, 4.376416000000006, - 4.2853330000000085, 4.295374999999993, 4.234249999999989, 4.525667000000013, - 4.2059169999999995, 4.421541999999988, 4.460583, 4.229792000000003, 4.590000000000003, - 4.320042000000001, 4.299832999999978, 4.49754200000001, 4.5309999999999775, - 4.593290999999994, 4.333500000000015, 4.507249999999999, 4.41345800000002, - 4.248374999999982, 4.420709000000016, 4.163917000000026, 4.3925000000000125 - ], - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.1830420000000004, - "samples_ms": [ - 2.239500000000021, 2.0962089999999876, 2.4029580000000124, 2.1454999999999984, - 2.150584000000009, 2.099625000000003, 2.0641669999999976, 2.1874590000000182, - 2.20150000000001, 2.174792000000025, 2.2273750000000234, 2.343125000000015, - 2.2683750000000202, 2.193708999999984, 2.055708999999979, 2.0165000000000077, - 2.057292000000018, 2.151707999999985, 2.145959000000005, 2.461999999999989, - 2.1830420000000004, 2.138582999999983, 2.202500000000015, 2.193791000000033, - 2.208582999999976 - ], - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.0981669999999895, - "samples_ms": [ - 2.1090000000000373, 2.075333999999998, 2.092667000000006, 2.139250000000004, - 2.1190839999999866, 2.176708000000019, 2.047458000000006, 2.021792000000005, - 2.0213749999999777, 2.0201250000000073, 2.1555830000000356, 2.163458999999989, - 2.044750000000022, 2.0217499999999973, 2.085124999999948, 2.125959000000023, - 2.0981669999999895, 2.0929160000000024, 2.1224580000000515, 2.118333000000007, - 2.136374999999987, 2.112707999999998, 2.0575419999999554, 2.44241599999998, - 2.0667079999999487 - ], - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.002874999999960437, - "samples_ms": [ - 0.0032500000000368345, 0.00304199999999355, 0.0030830000000037217, 0.004917000000034477, - 0.005541000000050644, 0.0031670000000190157, 0.002666000000033364, 0.003207999999972344, - 0.00333299999999781, 0.0031669999999621723, 0.003165999999964697, 0.0026249999999663487, - 0.0025420000000053733, 0.0024999999999977263, 0.007041000000015174, 0.004208000000005541, - 0.002874999999960437, 0.0025420000000053733, 0.002667000000030839, 0.002459000000044398, - 0.002625000000023192, 0.0025000000000545697, 0.0024160000000392756, 0.0024160000000392756, - 0.0024579999999900792 - ], - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - } -] diff --git a/bench/binary-size/evidence/macos-napi-symbol-estimates.json b/bench/binary-size/evidence/macos-napi-symbol-estimates.json deleted file mode 100644 index dee5a93ac5..0000000000 --- a/bench/binary-size/evidence/macos-napi-symbol-estimates.json +++ /dev/null @@ -1,422 +0,0 @@ -{ - "path": "tmp/binary-size/napi-o3/napi.unstripped", - "raw": 49865416, - "gzip9_python_zlib": 19183301, - "sha256": "427cabc672fe58b221e914660db18b07671e22ceb5197ba5d2c057affe4ccdd3", - "sections": [ - { - "name": "__TEXT,__text", - "address": 3328, - "bytes": 20953536 - }, - { - "name": "__TEXT,__text_startup", - "address": 20956864, - "bytes": 46120 - }, - { - "name": "__TEXT,__stubs", - "address": 21002984, - "bytes": 3384 - }, - { - "name": "__TEXT,__stub_helper", - "address": 21006368, - "bytes": 3408 - }, - { - "name": "__TEXT,__const", - "address": 21012480, - "bytes": 20818512 - }, - { - "name": "__TEXT,__gcc_except_tab", - "address": 41830992, - "bytes": 14408 - }, - { - "name": "__TEXT,__cstring", - "address": 41845400, - "bytes": 288794 - }, - { - "name": "__TEXT,__unwind_info", - "address": 42134196, - "bytes": 80192 - }, - { - "name": "__TEXT,__eh_frame", - "address": 42214392, - "bytes": 51584 - }, - { - "name": "__DATA_CONST,__got", - "address": 42270720, - "bytes": 184 - }, - { - "name": "__DATA_CONST,__mod_init_func", - "address": 42270904, - "bytes": 24 - }, - { - "name": "__DATA_CONST,__const", - "address": 42270976, - "bytes": 784352 - }, - { - "name": "__DATA,__la_symbol_ptr", - "address": 43057152, - "bytes": 2256 - }, - { - "name": "__DATA,__ctor_force", - "address": 43059408, - "bytes": 1104 - }, - { - "name": "__DATA,_CTOR0_ISIZE_FN", - "address": 43060512, - "bytes": 2208 - }, - { - "name": "__DATA,__data", - "address": 43062720, - "bytes": 42272 - }, - { - "name": "__DATA,_CTR0GR_ISIZE_FN", - "address": 43104992, - "bytes": 1 - }, - { - "name": "__DATA,__thread_vars", - "address": 43105000, - "bytes": 1104 - }, - { - "name": "__DATA,__thread_data", - "address": 43106104, - "bytes": 496 - }, - { - "name": "__DATA,__thread_bss", - "address": 43106600, - "bytes": 1280 - }, - { - "name": "__DATA,__bss", - "address": 43107904, - "bytes": 47760 - }, - { - "name": "__DATA,__common", - "address": 43155712, - "bytes": 8336 - } - ], - "largest_symbol_extents": [ - { - "name": "dragonbox_ecma::cache::CACHE", - "section": "__TEXT,__const", - "bytes": 14591120 - }, - { - "name": "_ts_parse_table", - "section": "__TEXT,__const", - "bytes": 917262 - }, - { - "name": "_ts_parse_table", - "section": "__TEXT,__const", - "bytes": 897136 - }, - { - "name": "_ts_small_parse_table", - "section": "__TEXT,__const", - "bytes": 630150 - }, - { - "name": "serde_json::ser::Formatter::write_char_escape::HEX_DIGITS", - "section": "__TEXT,__const", - "bytes": 547792 - }, - { - "name": "oxc_sourcemap::decode::B64_DECODE", - "section": "__TEXT,__const", - "bytes": 442706 - }, - { - "name": "_ts_small_parse_table", - "section": "__TEXT,__const", - "bytes": 334742 - }, - { - "name": "_ts_small_parse_table", - "section": "__TEXT,__const", - "bytes": 332512 - }, - { - "name": "ring::ec::suite_b::ops::p384::p384_scalar_inv_to_mont::REMAINING_WINDOWS", - "section": "__TEXT,__const", - "bytes": 312063 - }, - { - "name": "::find_tsconfig_tracing::__CALLSITE::META", - "section": "__DATA_CONST,__const", - "bytes": 293320 - }, - { - "name": "_ts_parse_table", - "section": "__TEXT,__const", - "bytes": 292880 - }, - { - "name": "_ts_lex", - "section": "__TEXT,__text", - "bytes": 166076 - }, - { - "name": "_ecp_nistz256_precomputed", - "section": "__TEXT,__const", - "bytes": 151552 - }, - { - "name": "serde_json::read::HEX0", - "section": "__TEXT,__const", - "bytes": 150273 - }, - { - "name": "_ts_parse_actions", - "section": "__TEXT,__const", - "bytes": 136440 - }, - { - "name": "zmij::STATIC_DATA", - "section": "__TEXT,__const", - "bytes": 110992 - }, - { - "name": "::generate::{closure#0}::{closure#0}", - "section": "__TEXT,__text", - "bytes": 82064 - }, - { - "name": "_ts_parse_actions", - "section": "__TEXT,__const", - "bytes": 79280 - }, - { - "name": "_ts_parse_actions", - "section": "__TEXT,__const", - "bytes": 76728 - }, - { - "name": "::resolve_for_manager", - "section": "__TEXT,__text", - "bytes": 64084 - }, - { - "name": "::link", - "section": "__TEXT,__text", - "bytes": 55100 - }, - { - "name": "::split_chunks::{closure#0}", - "section": "__TEXT,__text", - "bytes": 53888 - }, - { - "name": "zlib_rs::deflate::algorithm::CONFIGURATION_TABLE", - "section": "__DATA_CONST,__const", - "bytes": 53464 - }, - { - "name": "regex_automata::meta::strategy::new", - "section": "__TEXT,__text", - "bytes": 49968 - }, - { - "name": "_aDigits", - "section": "__TEXT,__cstring", - "bytes": 47978 - }, - { - "name": ">::fetch_modules::{closure#0}::{closure#0}", - "section": "__TEXT,__text", - "bytes": 47864 - }, - { - "name": "_sqlite3VdbeExec", - "section": "__TEXT,__text", - "bytes": 47652 - }, - { - "name": "_ts_lex_modes", - "section": "__TEXT,__const", - "bytes": 45426 - }, - { - "name": " as core::convert::TryFrom>::try_from", - "section": "__TEXT,__text", - "bytes": 43776 - }, - { - "name": "oxc_traverse::generated::walk::walk_class::", - "section": "__TEXT,__text", - "bytes": 43336 - }, - { - "name": "::gen", - "section": "__TEXT,__text", - "bytes": 38144 - }, - { - "name": "::bind_imports_and_exports", - "section": "__TEXT,__text", - "bytes": 37904 - }, - { - "name": ", h2::client::Peer, hyper::proto::h2::SendBuf>>::poll", - "section": "__TEXT,__text", - "bytes": 36744 - }, - { - "name": "annotate_snippets::renderer::render::render", - "section": "__TEXT,__text", - "bytes": 36688 - }, - { - "name": "rolldown::utils::prepare_build_context::prepare_build_context", - "section": "__TEXT,__text", - "bytes": 35396 - }, - { - "name": "httparse::HEADER_VALUE_MAP", - "section": "__TEXT,__const", - "bytes": 34929 - }, - { - "name": ">::index::NULL", - "section": "__TEXT,__const", - "bytes": 33740 - }, - { - "name": "::visit_program", - "section": "__TEXT,__text", - "bytes": 31472 - }, - { - "name": "mime::parse::TOKEN_MAP", - "section": "__TEXT,__const", - "bytes": 30919 - }, - { - "name": "::build_with_scoping", - "section": "__TEXT,__text", - "bytes": 30820 - }, - { - "name": "::default::DEFAULT_FMT", - "section": "__TEXT,__const", - "bytes": 30743 - }, - { - "name": ">::compute_hmr_update_for_file_changes::{closure#0}", - "section": "__TEXT,__text", - "bytes": 30696 - }, - { - "name": "rolldown::stages::link_stage::tree_shaking::include_statements::include_side_effectful_dependencies::__CALLSITE::META", - "section": "__DATA_CONST,__const", - "bytes": 30088 - }, - { - "name": "::augment_subcommands", - "section": "__TEXT,__text", - "bytes": 29968 - }, - { - "name": "unicode_id_start::tables::LEAF", - "section": "__TEXT,__const", - "bytes": 29568 - }, - { - "name": "::get_matches_with", - "section": "__TEXT,__text", - "bytes": 29340 - }, - { - "name": "::instantiate_chunk::{closure#0}", - "section": "__TEXT,__text", - "bytes": 29084 - }, - { - "name": ">::run_inner::{closure#0}", - "section": "__TEXT,__text", - "bytes": 29040 - }, - { - "name": "_ts_small_parse_table_map", - "section": "__TEXT,__const", - "bytes": 28192 - }, - { - "name": "< as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Visitor>::visit_map::<&mut ::deserialize_map::MA>", - "section": "__TEXT,__text", - "bytes": 27724 - } - ], - "text_by_symbol_prefix": { - "[C or anonymous]": 2892068, - "core": 2010372, - "rolldown": 1426068, - "rolldown_binding": 723692, - "vp_pm_cli": 674912, - "hashbrown": 613344, - "alloc": 564012, - "oxc_ast": 529208, - "oxc_ast_visit": 512744, - "napi": 502616, - "oxc_transformer": 416000, - "tokio": 373772, - "vite_plus_cli": 327176, - "std": 325140, - "oxc_minifier": 321156, - "oxc_parser": 309568, - "rustls": 309340, - "vt": 288208, - "regex_automata": 275772, - "ast_grep_config": 267856, - "serde_json": 267536, - "h2": 253068, - "oxc_traverse": 240528, - "brush_parser": 226760, - "serde_saphyr": 219216, - "clap_builder": 200116, - "regress": 195860, - "oxc_resolver": 180720, - "granit_parser": 174004, - "wax": 146496, - "rayon_core": 145048, - "vp_migration": 143120, - "regex_syntax": 140540, - "rayon": 126488, - "rolldown_plugin": 124580, - "oxc_semantic": 109316, - "oxc_isolated_declarations": 99812, - "rolldown_common": 97212, - "hyper_util": 96136, - "aho_corasick": 95908, - "vt_workspace": 93436, - "vt_plan": 92132, - "reqwest": 91908, - "oxc_ecmascript": 84512, - "annotate_snippets": 82656, - "pnp": 69636, - "hyper": 69532, - "rolldown_utils": 68580, - "ring": 67692, - "rolldown_dev": 64904 - } -} diff --git a/bench/binary-size/evidence/macos-vp-symbol-estimates.json b/bench/binary-size/evidence/macos-vp-symbol-estimates.json deleted file mode 100644 index 588d79a9e2..0000000000 --- a/bench/binary-size/evidence/macos-vp-symbol-estimates.json +++ /dev/null @@ -1,392 +0,0 @@ -{ - "path": "tmp/binary-size/vp-o3/vp.unstripped", - "raw": 9705168, - "gzip9_python_zlib": 4290221, - "sha256": "6b0ec1389e4e6a47829ae293aa7593c486beae40b93a1c6f263bdc94db318b39", - "sections": [ - { - "name": "__TEXT,__text", - "address": 4294969792, - "bytes": 6313500 - }, - { - "name": "__TEXT,__stubs", - "address": 4301283292, - "bytes": 2544 - }, - { - "name": "__TEXT,__stub_helper", - "address": 4301285836, - "bytes": 2568 - }, - { - "name": "__TEXT,__const", - "address": 4301291520, - "bytes": 1055048 - }, - { - "name": "__TEXT,__gcc_except_tab", - "address": 4302346568, - "bytes": 8292 - }, - { - "name": "__TEXT,__cstring", - "address": 4302354860, - "bytes": 106087 - }, - { - "name": "__TEXT,__unwind_info", - "address": 4302460948, - "bytes": 25760 - }, - { - "name": "__TEXT,__eh_frame", - "address": 4302486712, - "bytes": 45168 - }, - { - "name": "__DATA_CONST,__got", - "address": 4302536704, - "bytes": 136 - }, - { - "name": "__DATA_CONST,__const", - "address": 4302536840, - "bytes": 301736 - }, - { - "name": "__DATA,__la_symbol_ptr", - "address": 4302848000, - "bytes": 1696 - }, - { - "name": "__DATA,__data", - "address": 4302849696, - "bytes": 8848 - }, - { - "name": "__DATA,__thread_vars", - "address": 4302858544, - "bytes": 504 - }, - { - "name": "__DATA,__thread_data", - "address": 4302859048, - "bytes": 248 - }, - { - "name": "__DATA,__thread_bss", - "address": 4302859296, - "bytes": 680 - }, - { - "name": "__DATA,__bss", - "address": 4302859976, - "bytes": 520 - } - ], - "largest_symbol_extents": [ - { - "name": "httparse::TOKEN_MAP", - "section": "__TEXT,__const", - "bytes": 245136 - }, - { - "name": "_ecp_nistz256_precomputed", - "section": "__TEXT,__const", - "bytes": 151552 - }, - { - "name": "serde_json::read::HEX0", - "section": "__TEXT,__const", - "bytes": 150743 - }, - { - "name": "::resolve_tracing::__CALLSITE::META", - "section": "__DATA_CONST,__const", - "bytes": 147928 - }, - { - "name": "utf8_iter::UTF8_DATA", - "section": "__TEXT,__const", - "bytes": 142720 - }, - { - "name": "::resolve_for_manager", - "section": "__TEXT,__text", - "bytes": 65304 - }, - { - "name": "vp::commands::env::execute::{closure#0}", - "section": "__TEXT,__text", - "bytes": 49824 - }, - { - "name": "zmij::STATIC_DATA", - "section": "__TEXT,__const", - "bytes": 48376 - }, - { - "name": "itoa::DECIMAL_PAIRS", - "section": "__TEXT,__const", - "bytes": 41703 - }, - { - "name": "vp::commands::global::install::install::{closure#0}", - "section": "__TEXT,__text", - "bytes": 40416 - }, - { - "name": "curve25519_dalek::backend::serial::u64::constants::ED25519_BASEPOINT_TABLE_INNER_DOC_HIDDEN", - "section": "__TEXT,__const", - "bytes": 35764 - }, - { - "name": "::augment_subcommands", - "section": "__TEXT,__text", - "bytes": 35512 - }, - { - "name": "::augment_subcommands", - "section": "__TEXT,__text", - "bytes": 33080 - }, - { - "name": "::augment_subcommands", - "section": "__TEXT,__text", - "bytes": 30700 - }, - { - "name": "::from_reader::<&mut pgp::composed::message::reader::packet_body::PacketBodyReader<&mut buffer_redux::BufReader<&mut pgp::armor::reader::Dearmor, &[u8]>>>>>", - "section": "__TEXT,__text", - "bytes": 29636 - }, - { - "name": "::get_matches_with", - "section": "__TEXT,__text", - "bytes": 29104 - }, - { - "name": "vp::commands::env::doctor::execute::{closure#0}", - "section": "__TEXT,__text", - "bytes": 28748 - }, - { - "name": "which::checker::exists::__CALLSITE::META", - "section": "__DATA_CONST,__const", - "bytes": 27520 - }, - { - "name": "::from_reader::<&mut pgp::composed::message::reader::packet_body::PacketBodyReader<&mut alloc::io::buffered::bufreader::BufReader>>>", - "section": "__TEXT,__text", - "bytes": 27424 - }, - { - "name": "vp_pm_cli::resolution::resolve::resolve_for_manager::", - "section": "__TEXT,__text", - "bytes": 26532 - }, - { - "name": "vp::commands::env::list_remote::execute::{closure#0}", - "section": "__TEXT,__text", - "bytes": 26436 - }, - { - "name": "vp::commands::env::pin::execute::{closure#0}", - "section": "__TEXT,__text", - "bytes": 25564 - }, - { - "name": "::resolve_for_manager", - "section": "__TEXT,__text", - "bytes": 25128 - }, - { - "name": "_ring_core_0_17_14__k25519Precomp", - "section": "__TEXT,__const", - "bytes": 24576 - }, - { - "name": ">::verify_prehashed", - "section": "__TEXT,__text", - "bytes": 23832 - }, - { - "name": "vp_js_runtime::pgp_verify::verify_clearsigned", - "section": "__TEXT,__text", - "bytes": 23396 - }, - { - "name": "vp_pm_cli::package_manager::download_package_manager_inner::{closure#0}", - "section": "__TEXT,__text", - "bytes": 23244 - }, - { - "name": "vp_pm_cli::resolution::resolve::resolve_for_manager::", - "section": "__TEXT,__text", - "bytes": 22552 - }, - { - "name": "::from_arg_matches_mut", - "section": "__TEXT,__text", - "bytes": 22072 - }, - { - "name": "vp::commands::env::setup::execute_for_binary::{closure#0}", - "section": "__TEXT,__text", - "bytes": 20276 - }, - { - "name": "::augment_subcommands", - "section": "__TEXT,__text", - "bytes": 19540 - }, - { - "name": "vp::cli::run_command_with_options::{closure#0}", - "section": "__TEXT,__text", - "bytes": 19404 - }, - { - "name": "vp::commands::env::which::execute_package_binary::{closure#0}", - "section": "__TEXT,__text", - "bytes": 19288 - }, - { - "name": ", >::connect_to::{closure#0}::{closure#1}::{closure#0}::{closure#0}>, >::connect_to::{closure#0}::{closure#1}::{closure#0}::{closure#1}> as core::future::future::Future>::poll", - "section": "__TEXT,__text", - "bytes": 18856 - }, - { - "name": "vp::commands::implode::execute", - "section": "__TEXT,__text", - "bytes": 18528 - }, - { - "name": "vp::shim::dispatch::dispatch::{closure#0}", - "section": "__TEXT,__text", - "bytes": 18464 - }, - { - "name": "vp_js_runtime::runtime::download_runtime_with_provider::::{closure#0}::{closure#0}::{closure#0}", - "section": "__TEXT,__text", - "bytes": 17796 - }, - { - "name": "vp::main::{closure#0}", - "section": "__TEXT,__text", - "bytes": 17580 - }, - { - "name": "::augment_args", - "section": "__TEXT,__text", - "bytes": 17408 - }, - { - "name": "ring::ec::suite_b::ecdsa::signing::ECDSA_P384_SHA384_ASN1_SIGNING", - "section": "__DATA_CONST,__const", - "bytes": 17320 - }, - { - "name": "pgp::packet::signature::de::subpacket::<&mut pgp::parsing_reader::Take>>>>>", - "section": "__TEXT,__text", - "bytes": 17288 - }, - { - "name": "vp::cli::run_package_manager_command::{closure#0}", - "section": "__TEXT,__text", - "bytes": 17220 - }, - { - "name": ">::send_request::{closure#0}", - "section": "__TEXT,__text", - "bytes": 17152 - }, - { - "name": "vp::commands::upgrade::execute::{closure#0}", - "section": "__TEXT,__text", - "bytes": 16960 - }, - { - "name": "::augment_subcommands", - "section": "__TEXT,__text", - "bytes": 16828 - }, - { - "name": "vp_js_runtime::download::extract_zip", - "section": "__TEXT,__text", - "bytes": 16396 - }, - { - "name": "crc32fast::table::CRC32_TABLE", - "section": "__TEXT,__const", - "bytes": 16384 - }, - { - "name": "vp::self_setup::run::{closure#0}", - "section": "__TEXT,__text", - "bytes": 16312 - }, - { - "name": "vp_js_runtime::runtime::download_runtime_with_provider::::{closure#0}", - "section": "__TEXT,__text", - "bytes": 16064 - }, - { - "name": ">::extract_internal::<&vt_path::absolute::AbsolutePath, for<'a> fn(&'a std::path::Path) -> bool>", - "section": "__TEXT,__text", - "bytes": 15464 - } - ], - "text_by_symbol_prefix": { - "vp": 820692, - "vp_pm_cli": 687140, - "core": 627556, - "pgp": 525116, - "rustls": 305728, - "[C or anonymous]": 239504, - "tokio": 224500, - "alloc": 195920, - "clap_builder": 191100, - "std": 171224, - "serde_json": 147948, - "vp_js_runtime": 141560, - "regress": 132136, - "oxc_resolver": 106624, - "reqwest": 71912, - "hyper_util": 70356, - "hashbrown": 67964, - "ring": 67756, - "vp_shared": 63232, - "pnp": 59928, - "k256": 57776, - "hyper": 49092, - "primeorder": 48744, - "indicatif": 48256, - "num_bigint_dig": 48252, - "http": 48012, - "webpki": 46984, - "url": 46720, - "chrono": 42980, - "clap_complete": 40952, - "gimli": 32604, - "futures_util": 31796, - "vp_toolchain": 30132, - "tar": 29784, - "js_semver": 29684, - "vp_setup": 29484, - "console": 28564, - "p521": 26324, - "flate2": 26264, - "zip": 25840, - "sha1_checked": 24656, - "p384": 24184, - "cx448": 21264, - "elliptic_curve": 20136, - "tracing_subscriber": 20072, - "rustc_demangle": 19480, - "sha2": 18896, - "smallvec": 18632, - "rsa": 16624, - "simd_json": 15804 - } -} diff --git a/bench/binary-size/evidence/rolldown-profile-benchmark.json b/bench/binary-size/evidence/rolldown-profile-benchmark.json deleted file mode 100644 index c1230bfd51..0000000000 --- a/bench/binary-size/evidence/rolldown-profile-benchmark.json +++ /dev/null @@ -1,978 +0,0 @@ -{ - "binary_source_commit": "a4e9c5932e069b5aea5b9c0136222ddada73bed0", - "runner_sha256": "d932ca2b717df5f09efdac842d4b0b460e2b77b4ab4a18b394a836e5f75db991", - "platform": "macOS-26.2-arm64-arm-64bit", - "cpu": "Apple M4 Max", - "binaries": { - "baseline": { - "bytes": 7991312, - "sha256": "8c7696daad2fcdb7842613fba238e5475eef6078b1ca8f8984899e49750b36b1" - }, - "candidate": { - "bytes": 4954496, - "sha256": "9b6a8879912330090415905119baed4e99eead050208271fe7200b1c44bb298d" - } - }, - "node": { - "version": "22.23.2", - "sha256": "0c61847de20184ae3f35c24be3a79682e25fccccccbcbd316b7e224e24fa8637" - }, - "toolchain": { - "schemaVersion": 1, - "nodes": [ - { - "id": "vite-plus", - "name": "vite-plus", - "version": "0.0.0-commit.a4e9c5932e069b5aea5b9c0136222ddada73bed0", - "kind": "package", - "delivery": ["dependency"], - "aliases": [] - }, - { - "id": "vite-plus-core", - "name": "@voidzero-dev/vite-plus-core", - "version": "0.0.0-commit.a4e9c5932e069b5aea5b9c0136222ddada73bed0", - "kind": "package", - "delivery": ["dependency"], - "aliases": ["vite-plus-core"] - }, - { - "id": "vite", - "name": "vite", - "version": "8.3.4", - "kind": "tool", - "delivery": ["bundled"], - "aliases": [] - }, - { - "id": "rolldown", - "name": "rolldown", - "version": "1.2.14", - "kind": "tool", - "delivery": ["bundled", "compiled"], - "aliases": [] - }, - { - "id": "vitest", - "name": "vitest", - "version": "5.0.5", - "kind": "tool", - "delivery": ["dependency"], - "aliases": [] - }, - { - "id": "oxlint", - "name": "oxlint", - "version": "1.88.0", - "kind": "tool", - "delivery": ["dependency"], - "aliases": [] - }, - { - "id": "oxfmt", - "name": "oxfmt", - "version": "0.73.0", - "kind": "tool", - "delivery": ["dependency"], - "aliases": [] - }, - { - "id": "oxlint-tsgolint", - "name": "oxlint-tsgolint", - "version": "7.0.2004", - "kind": "tool", - "delivery": ["dependency"], - "aliases": ["tsgolint"] - }, - { - "id": "tsdown", - "name": "tsdown", - "version": "0.23.1", - "kind": "tool", - "delivery": ["bundled"], - "aliases": [] - }, - { - "id": "vite-task", - "name": "vite-task", - "revision": "9ba4cc93379cf2d7a6c7e657285bb8a00e8339dc", - "builtAt": "2026-10-16T13:41:37Z", - "kind": "tool", - "delivery": ["compiled"], - "aliases": [] - }, - { - "id": "oxc", - "name": "oxc", - "version": "0.154.0", - "kind": "engine", - "delivery": ["compiled"], - "aliases": [] - }, - { - "id": "oxc-resolver", - "name": "oxc-resolver", - "version": "11.24.3", - "kind": "engine", - "delivery": ["compiled"], - "aliases": [] - } - ], - "edges": [ - { - "from": "vite-plus", - "to": "vite-plus-core", - "relationship": "depends-on" - }, - { - "from": "vite-plus-core", - "to": "vite", - "relationship": "bundles" - }, - { - "from": "vite", - "to": "rolldown", - "relationship": "uses" - }, - { - "from": "vite-plus-core", - "to": "rolldown", - "relationship": "bundles" - }, - { - "from": "rolldown", - "to": "oxc", - "relationship": "compiles" - }, - { - "from": "rolldown", - "to": "oxc-resolver", - "relationship": "compiles" - }, - { - "from": "vite-plus-core", - "to": "tsdown", - "relationship": "bundles" - }, - { - "from": "vite-plus", - "to": "vitest", - "relationship": "depends-on" - }, - { - "from": "vite-plus", - "to": "oxlint", - "relationship": "depends-on" - }, - { - "from": "vite-plus", - "to": "oxlint-tsgolint", - "relationship": "depends-on" - }, - { - "from": "vite-plus", - "to": "oxfmt", - "relationship": "depends-on" - }, - { - "from": "vite-plus", - "to": "vite-task", - "relationship": "compiles" - } - ] - }, - "cli_dist": { - "files": 208, - "bytes": 2305201, - "sha256": "d3519f0b04cc6ecc0fb13da6c2177a5a25e0dd3cbf6a2521ca87fda8bc22e7b6" - }, - "core_dist": { - "files": 108, - "bytes": 4283322, - "sha256": "8c874ad49a840f83138ff2bcd340ea003f8e854d578e2b6f2d3bfc25dd07e2fd" - }, - "three_source": { - "files": 609, - "bytes": 1474049, - "sha256": "072753625a06dc865edcc6b7671b136753440f9c00e2b5c587bcf26f9e3d51db" - }, - "seed": 20261017, - "method": "Fresh vp build process per sample; same JS, NAPI and Node for both profiles; balanced randomized adjacent pairs; three warmups per variant per round; output directory removed before each invocation; warm OS caches; no task cache. Wall time includes process launch, CLI/Node startup, bundling, minification, source maps and output writes as configured. Cleanup and output hash checks are outside the timer. Probe hooks run only in untimed preflight builds. Confidence interval bootstraps paired observations within each round.", - "sample_columns": ["wall_ms", "cpu_ms"], - "results": { - "three10x-bundle": { - "minify": false, - "sourcemap": false, - "probe": { - "node": "v22.23.2", - "rolldown": "1.2.14", - "modules": 3693, - "chunks": 1, - "dynamicChunks": 0, - "native_addons": ["d55572198e5ea18cb1d3f71a014b9b48c83fae8ad110b7ef139bb315d0e07e3b"] - }, - "rounds": [ - { - "samples": { - "baseline": [ - [531.583458, 1401.9380000000012], - [496.480709, 1372.2639999999994], - [504.678375, 1390.3979999999976], - [503.414583, 1390.4780000000017], - [509.644125, 1391.2720000000008], - [508.608542, 1393.3889999999992], - [521.84675, 1415.4320000000027], - [515.111, 1429.1470000000004], - [511.118709, 1399.8629999999962], - [522.493042, 1407.7540000000042], - [544.904291, 1406.1159999999973], - [617.908542, 1496.2000000000016], - [528.452542, 1447.064999999995], - [526.511917, 1425.1100000000038], - [510.339625, 1400.4400000000032], - [517.17175, 1410.032000000001], - [520.54275, 1407.2900000000031], - [522.113459, 1383.2260000000076], - [553.182333, 1412.417000000005], - [530.567833, 1418.040000000005] - ], - "candidate": [ - [533.156959, 1422.5049999999992], - [520.817083, 1396.8620000000005], - [515.902166, 1427.7440000000006], - [529.6235, 1424.931000000001], - [529.181416, 1417.9939999999967], - [520.095084, 1416.2430000000015], - [509.350291, 1392.7019999999998], - [534.524458, 1415.1029999999948], - [526.376667, 1415.269000000002], - [539.223583, 1419.636000000004], - [524.774125, 1414.088999999997], - [555.161375, 1435.955], - [550.10125, 1461.7780000000025], - [535.646291, 1442.0419999999935], - [534.55475, 1435.7900000000043], - [525.016083, 1408.2119999999989], - [517.601625, 1423.0929999999944], - [510.639125, 1394.2779999999857], - [534.27125, 1425.8049999999969], - [567.533792, 1450.8940000000052] - ] - }, - "baseline_first": [ - false, - true, - true, - true, - false, - false, - true, - true, - false, - true, - false, - false, - false, - true, - false, - false, - false, - true, - true, - true - ], - "wall_medians_ms": { - "baseline": 521.19475, - "candidate": 529.402458 - }, - "change_percent": 1.5747871596941465 - }, - { - "samples": { - "baseline": [ - [531.775125, 1428.9849999999974], - [533.75225, 1435.9190000000126], - [520.98825, 1414.0139999999947], - [525.011, 1376.421999999991], - [543.559667, 1436.4810000000007], - [525.009208, 1390.1010000000015], - [516.865792, 1374.780000000001], - [534.738834, 1444.1280000000063], - [519.931834, 1414.069000000012], - [530.556667, 1399.0949999999884], - [519.661208, 1390.529000000015], - [531.64175, 1448.7459999999999], - [533.604708, 1428.629000000015], - [521.007291, 1414.8030000000063], - [537.975375, 1415.1319999999998], - [529.644375, 1419.0640000000058], - [522.095875, 1401.8180000000057], - [528.15025, 1431.3180000000045], - [527.565458, 1419.9509999999975], - [524.310625, 1435.4960000000005] - ], - "candidate": [ - [520.429208, 1411.5260000000092], - [539.657125, 1444.0099999999916], - [536.546292, 1417.2310000000011], - [557.142916, 1467.2570000000037], - [541.635208, 1444.5379999999943], - [542.797375, 1424.4350000000027], - [524.869292, 1373.4039999999936], - [542.062708, 1449.1490000000056], - [526.893542, 1397.0059999999903], - [530.358333, 1407.8049999999962], - [529.683709, 1397.6619999999969], - [530.536417, 1431.5929999999923], - [527.237625, 1396.2789999999786], - [531.603625, 1421.3970000000131], - [523.809125, 1384.5599999999934], - [523.456542, 1406.8129999999996], - [523.191041, 1425.3049999999803], - [517.890709, 1427.0270000000096], - [514.403833, 1385.975000000002], - [512.084542, 1384.1879999999946] - ] - }, - "baseline_first": [ - false, - false, - false, - true, - true, - false, - true, - false, - false, - true, - true, - false, - true, - false, - true, - true, - true, - true, - false, - false - ], - "wall_medians_ms": { - "baseline": 527.8578540000001, - "candidate": 528.4606670000001 - }, - "change_percent": 0.11419987321055203 - }, - { - "samples": { - "baseline": [ - [527.334666, 1428.3390000000225], - [527.641375, 1421.6499999999996], - [543.265625, 1433.5570000000075], - [534.970416, 1429.3619999999976], - [537.616084, 1432.2709999999859], - [576.99825, 1479.0869999999927], - [595.087625, 1433.8280000000054], - [529.032708, 1402.087999999992], - [532.401, 1426.2030000000152], - [517.821042, 1418.4970000000021], - [521.244542, 1401.4410000000055], - [514.7115, 1403.131000000002], - [526.17075, 1428.7199999999984], - [512.92125, 1381.9289999999853], - [516.496333, 1410.084999999981], - [527.307083, 1414.289999999994], - [519.201792, 1416.9649999999763], - [518.846583, 1394.9770000000115], - [516.968209, 1409.2720000000156], - [512.467625, 1389.0289999999936] - ], - "candidate": [ - [522.956709, 1415.4869999999846], - [529.785708, 1407.8639999999893], - [549.311333, 1417.176999999981], - [532.997917, 1445.4049999999938], - [517.873333, 1414.5900000000324], - [551.767583, 1421.5230000000076], - [536.710208, 1409.388999999976], - [535.063, 1428.8000000000238], - [525.634917, 1399.5929999999817], - [537.129541, 1444.455000000005], - [522.905625, 1426.6629999999907], - [517.494667, 1412.8780000000063], - [531.508667, 1418.724999999995], - [522.976166, 1420.9180000000288], - [531.887459, 1450.476000000009], - [520.463167, 1422.190999999998], - [515.082542, 1403.5090000000139], - [513.229125, 1400.9880000000123], - [509.039375, 1405.3189999999631], - [518.051833, 1389.3940000000384] - ] - }, - "baseline_first": [ - false, - false, - true, - true, - false, - false, - true, - false, - true, - false, - false, - true, - false, - true, - true, - false, - false, - true, - true, - true - ], - "wall_medians_ms": { - "baseline": 526.7389165, - "candidate": 524.3055415 - }, - "change_percent": -0.46196985333244456 - } - ], - "summary": { - "baseline": { - "count": 60, - "wall_median_ms": 525.010104, - "cpu_median_ms": 1414.179500000003 - }, - "candidate": { - "count": 60, - "wall_median_ms": 528.2095205, - "cpu_median_ms": 1417.6124999999988 - }, - "change_percent": 0.6094009383103449, - "change_percent_95pct_bootstrap_ci": [-0.37301050642988276, 1.5439326167003609] - }, - "output": { - "files": 2, - "bytes": 10109278, - "sha256": "625ef2f67e91270b0a30f14e2acef624fca9cb4b9165c4c7ab244084beda227b" - } - }, - "three10x-minify-sourcemap": { - "minify": true, - "sourcemap": true, - "probe": { - "node": "v22.23.2", - "rolldown": "1.2.14", - "modules": 3693, - "chunks": 1, - "dynamicChunks": 0, - "native_addons": ["d55572198e5ea18cb1d3f71a014b9b48c83fae8ad110b7ef139bb315d0e07e3b"] - }, - "rounds": [ - { - "samples": { - "baseline": [ - [654.79025, 1583.3780000000388], - [681.682417, 1589.8569999999665], - [673.5905, 1590.851000000015], - [686.73775, 1612.624000000011], - [659.697375, 1617.0260000000098], - [653.678458, 1623.9530000000002], - [677.045041, 1612.7709999999809], - [676.960208, 1622.39900000003], - [674.226917, 1621.8389999999658], - [676.899292, 1626.8110000000036], - [676.710042, 1619.355999999982], - [750.399333, 1638.0740000000173], - [675.937125, 1605.9060000000045], - [725.491584, 1659.733000000017], - [674.793416, 1626.7309999999497], - [661.378042, 1611.6950000000543], - [651.943208, 1567.3039999999787], - [659.80675, 1617.2520000000077], - [656.435084, 1618.942000000004], - [658.790625, 1613.8119999999958] - ], - "candidate": [ - [661.668792, 1614.3359999999802], - [671.947042, 1615.6259999999918], - [687.015959, 1622.8710000000035], - [679.6685, 1622.401999999994], - [657.145, 1610.1919999999836], - [647.588917, 1584.2700000000036], - [670.268875, 1590.3800000000103], - [691.595208, 1640.388999999999], - [687.648833, 1653.2010000000241], - [666.826833, 1610.1659999999924], - [654.770292, 1561.5840000000105], - [682.076125, 1620.047999999997], - [663.240625, 1629.069999999956], - [689.379916, 1609.7920000000272], - [662.058791, 1608.9540000000397], - [675.534709, 1608.6019999999621], - [665.278542, 1604.1809999999828], - [656.607209, 1606.5960000000246], - [659.839, 1585.7429999999795], - [653.310459, 1583.2890000000361] - ] - }, - "baseline_first": [ - false, - false, - false, - true, - false, - false, - true, - false, - true, - false, - true, - true, - true, - true, - true, - false, - true, - false, - false, - true - ], - "wall_medians_ms": { - "baseline": 674.5101665, - "candidate": 666.0526875 - }, - "change_percent": -1.2538697591298553 - }, - { - "samples": { - "baseline": [ - [660.44125, 1584.0129999999704], - [647.756542, 1585.7809999999972], - [648.824334, 1563.8180000000261], - [650.794042, 1609.0770000000134], - [657.275584, 1630.6640000000243], - [646.596917, 1549.0110000000072], - [644.66, 1582.585999999992], - [657.030375, 1606.2279999999873], - [658.145584, 1586.636999999996], - [703.114583, 1636.4149999999995], - [699.763375, 1615.8980000000156], - [669.668834, 1613.9780000000314], - [649.702125, 1590.6039999999848], - [652.757709, 1579.2999999999893], - [651.758375, 1580.6120000000305], - [657.982208, 1599.0639999999985], - [657.430667, 1574.5360000000233], - [660.338916, 1594.2039999999906], - [683.237, 1613.8409999999794], - [671.594, 1618.4920000000034] - ], - "candidate": [ - [667.948208, 1623.7730000000283], - [648.354958, 1581.982000000039], - [659.04875, 1615.8349999999473], - [654.820125, 1607.5269999999477], - [647.131458, 1564.8020000000429], - [652.395625, 1594.3549999999505], - [658.890709, 1582.3550000000068], - [657.118459, 1609.6190000000092], - [667.870959, 1559.1890000000035], - [701.749583, 1641.5910000000054], - [666.136708, 1591.579999999965], - [654.587875, 1590.707000000009], - [655.165167, 1579.166999999984], - [659.941375, 1610.063000000025], - [656.302167, 1587.2399999999516], - [658.418875, 1626.228000000026], - [654.682083, 1598.370999999986], - [654.677917, 1594.8779999999942], - [686.2535, 1643.9570000000003], - [674.470459, 1594.8940000000107] - ] - }, - "baseline_first": [ - true, - true, - false, - true, - false, - false, - true, - true, - false, - false, - true, - false, - false, - true, - true, - false, - true, - true, - false, - false - ], - "wall_medians_ms": { - "baseline": 657.3531255, - "candidate": 657.768667 - }, - "change_percent": 0.06321434916491953 - }, - { - "samples": { - "baseline": [ - [664.641375, 1573.5579999999914], - [655.345083, 1592.8969999999936], - [658.062583, 1615.7650000000103], - [648.281875, 1591.7200000000093], - [659.384042, 1609.2160000000604], - [656.190333, 1572.623999999962], - [659.88425, 1610.4610000000434], - [672.683875, 1604.4029999999339], - [680.446916, 1596.0910000000013], - [685.3415, 1635.6310000000462], - [655.762042, 1551.7370000000028], - [692.972167, 1613.1930000000239], - [670.975917, 1618.9589999999612], - [660.000875, 1600.00500000001], - [675.41775, 1602.196000000049], - [689.93225, 1641.4209999999798], - [662.759834, 1597.2540000000208], - [670.687708, 1565.0569999999675], - [668.391084, 1573.709000000008], - [667.09075, 1606.7029999999818] - ], - "candidate": [ - [681.427667, 1627.4099999999976], - [658.146792, 1598.6369999999965], - [649.526125, 1602.1460000000047], - [660.894125, 1597.4180000000047], - [650.950833, 1589.399999999955], - [650.081583, 1575.6620000000225], - [666.648125, 1606.0269999999832], - [669.030917, 1614.417000000003], - [687.918083, 1612.2810000000527], - [697.762875, 1639.4219999999677], - [678.067291, 1593.4109999999464], - [665.6565, 1564.4470000000297], - [669.194375, 1626.2069999999653], - [674.377916, 1569.4179999999847], - [690.717584, 1612.0559999999955], - [680.84475, 1638.7880000000337], - [673.874875, 1618.812999999932], - [675.560583, 1583.983000000046], - [661.566292, 1583.9170000000422], - [666.849875, 1615.9719999999993] - ] - }, - "baseline_first": [ - false, - true, - true, - true, - false, - true, - false, - true, - true, - false, - false, - false, - true, - true, - false, - true, - false, - false, - false, - true - ], - "wall_medians_ms": { - "baseline": 665.8660625, - "candidate": 669.112646 - }, - "change_percent": 0.48757305452851174 - } - ], - "summary": { - "baseline": { - "count": 60, - "wall_median_ms": 660.9096460000001, - "cpu_median_ms": 1606.4654999999846 - }, - "candidate": { - "count": 60, - "wall_median_ms": 665.467521, - "cpu_median_ms": 1607.0614999999862 - }, - "change_percent": 0.6896366284840028, - "change_percent_95pct_bootstrap_ci": [-0.7029099873636424, 1.0160827443221887] - }, - "output": { - "files": 3, - "bytes": 25898779, - "sha256": "55d714eaca2e9e9e2669594c34f225377a8ca9e9980a2ea7be5179c4aa47f9cd" - } - }, - "typescript-code-split-minify-sourcemap": { - "minify": true, - "sourcemap": true, - "probe": { - "node": "v22.23.2", - "rolldown": "1.2.14", - "modules": 2025, - "chunks": 22, - "dynamicChunks": 20, - "native_addons": ["d55572198e5ea18cb1d3f71a014b9b48c83fae8ad110b7ef139bb315d0e07e3b"] - }, - "rounds": [ - { - "samples": { - "baseline": [ - [401.908792, 1556.2479999999823], - [404.352792, 1578.298000000018], - [399.336791, 1495.4729999999472], - [409.306208, 1561.341000000084], - [406.964875, 1592.0899999999847], - [422.884709, 1571.8109999999683], - [413.18825, 1617.3780000000306], - [414.352208, 1576.9799999999918], - [414.463709, 1612.417999999991], - [400.758667, 1590.7659999999737], - [414.158666, 1621.727000000078], - [403.157875, 1548.091999999997], - [436.091958, 1591.6049999999586], - [397.901584, 1578.0939999999646], - [394.244125, 1535.257999999999], - [413.852875, 1561.5809999999897], - [406.872, 1574.2740000000026], - [409.03175, 1625.6840000000352], - [424.804458, 1610.2619999999206], - [416.874917, 1576.058000000046] - ], - "candidate": [ - [400.978208, 1563.728000000026], - [398.479875, 1536.5319999999656], - [392.768584, 1529.896000000008], - [405.572167, 1556.9379999999455], - [428.323583, 1604.297000000031], - [411.773708, 1582.6680000000124], - [424.838625, 1548.104999999964], - [414.142208, 1623.4720000000493], - [414.309083, 1616.438999999957], - [410.116958, 1598.6330000000635], - [401.436375, 1634.9939999999492], - [413.156917, 1572.1810000000005], - [388.95, 1601.6290000000026], - [399.627041, 1579.2880000000196], - [395.861292, 1609.527000000071], - [397.447541, 1529.3739999999616], - [407.130292, 1491.5679999999725], - [411.929708, 1589.022], - [405.416917, 1573.3830000000353], - [405.434333, 1575.8389999999736] - ] - }, - "baseline_first": [ - true, - false, - false, - true, - true, - false, - false, - true, - true, - false, - false, - false, - true, - false, - true, - false, - true, - true, - false, - true - ], - "wall_medians_ms": { - "baseline": 409.16897900000004, - "candidate": 405.50325 - }, - "change_percent": -0.8958961182636616 - }, - { - "samples": { - "baseline": [ - [414.531667, 1620.8480000000236], - [397.443875, 1535.1980000000367], - [404.071166, 1607.8129999999646], - [401.977042, 1546.3119999999435], - [392.748416, 1562.0930000000044], - [401.318292, 1564.4130000000587], - [412.7255, 1601.7590000000155], - [396.043875, 1613.6510000000044], - [397.108709, 1586.1609999999473], - [396.488, 1623.4699999999975], - [389.469458, 1604.4000000000551], - [387.327583, 1612.749000000008], - [397.994459, 1592.0280000000275], - [389.494875, 1553.2269999999926], - [397.984458, 1622.9269999998905], - [390.68125, 1603.0539999999291], - [392.868125, 1598.3880000001136], - [398.880625, 1577.9179999999542], - [394.527833, 1546.2459999999965], - [391.614667, 1599.330000000009] - ], - "candidate": [ - [399.872292, 1596.2809999999763], - [400.043792, 1593.024000000014], - [397.437208, 1539.6319999999832], - [399.545792, 1611.3970000000108], - [401.168291, 1493.836999999985], - [398.015041, 1621.118000000024], - [393.051625, 1643.5940000000073], - [393.522792, 1544.6539999999231], - [396.779667, 1642.769000000044], - [393.174375, 1603.260999999975], - [397.814625, 1544.302000000016], - [397.8075, 1610.245999999961], - [391.90975, 1560.970999999995], - [397.478417, 1607.637000000068], - [393.190084, 1566.295000000082], - [398.197, 1617.0779999999922], - [400.981084, 1594.432999999981], - [390.595583, 1577.8099999999995], - [402.813833, 1578.8440000000037], - [393.018917, 1564.9899999999661] - ] - }, - "baseline_first": [ - false, - false, - true, - true, - false, - true, - false, - true, - true, - true, - false, - true, - false, - true, - true, - false, - false, - false, - true, - false - ], - "wall_medians_ms": { - "baseline": 396.79835449999996, - "candidate": 397.64295849999996 - }, - "change_percent": 0.2128547133377845 - }, - { - "samples": { - "baseline": [ - [389.677042, 1605.5239999999458], - [398.565417, 1573.6719999999877], - [399.324834, 1545.573000000104], - [396.818083, 1600.9179999999787], - [406.033041, 1564.4989999999552], - [398.306917, 1603.0009999999493], - [400.902667, 1513.9070000000174], - [420.108583, 1618.3979999999565], - [417.467375, 1616.2439999999378], - [405.816667, 1548.9519999999857], - [402.1575, 1621.1319999999887], - [404.221959, 1610.3430000000571], - [421.107541, 1564.9600000000419], - [407.955541, 1527.934000000073], - [397.384667, 1604.799000000071], - [401.087583, 1574.5909999999412], - [396.698416, 1606.5119999999524], - [407.05925, 1597.440000000006], - [403.855375, 1577.8249999999616], - [406.276417, 1564.2919999999094] - ], - "candidate": [ - [389.795125, 1567.0539999999846], - [404.09575, 1569.5140000000265], - [405.700916, 1582.4649999999565], - [399.867458, 1604.8829999999725], - [402.965916, 1612.4480000000858], - [413.152167, 1617.9029999999557], - [405.0325, 1573.5970000000634], - [453.341875, 1628.0679999999847], - [405.5855, 1599.3500000000722], - [410.363667, 1560.1350000000593], - [404.174167, 1580.699999999979], - [406.549292, 1556.5389999999297], - [405.345833, 1581.7049999999426], - [402.270875, 1596.388999999931], - [405.398, 1651.0130000000345], - [401.316792, 1594.5329999999558], - [407.99875, 1613.5810000000674], - [403.685, 1633.4140000000161], - [403.640584, 1620.8310000000665], - [399.678583, 1601.7970000000332] - ] - }, - "baseline_first": [ - false, - true, - false, - false, - true, - false, - true, - false, - false, - false, - false, - false, - true, - true, - true, - false, - true, - true, - true, - true - ], - "wall_medians_ms": { - "baseline": 403.0064375, - "candidate": 404.6033335 - }, - "change_percent": 0.39624577957269036 - } - ], - "summary": { - "baseline": { - "count": 60, - "wall_median_ms": 401.94291699999997, - "cpu_median_ms": 1588.4634999999605 - }, - "candidate": { - "count": 60, - "wall_median_ms": 401.37658350000004, - "cpu_median_ms": 1591.023000000007 - }, - "change_percent": -0.14089898740520246, - "change_percent_95pct_bootstrap_ci": [-0.85460009661944, 0.6420565255943034] - }, - "output": { - "files": 45, - "bytes": 16805101, - "sha256": "4b63439664120c0bda4402ea8be4471c25b186fe02cf2ffbb7363bebe4b57352" - } - } - } -} diff --git a/bench/binary-size/evidence/vp-help-smoke.json b/bench/binary-size/evidence/vp-help-smoke.json deleted file mode 100644 index a069ab152a..0000000000 --- a/bench/binary-size/evidence/vp-help-smoke.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "vp-o3": { - "help_median_ms": 4.6448745, - "help_samples_ms": [ - 4.773125000000003, 4.807583000000005, 4.6760829999999975, 4.845916000000006, - 4.613666000000002, 5.115124999999998, 5.151291999999988, 5.265917000000009, 5.245832999999991, - 4.335416999999994, 3.855916000000001, 4.218416999999988, 4.6997500000000025, - 5.332500000000017, 4.86241699999998, 4.872625000000019, 4.351875000000005, 4.179958000000012, - 4.329374999999996, 4.826957999999992, 4.6762079999999875, 4.578125000000016, - 4.375500000000004, 4.151500000000002, 3.888583000000001, 4.552749999999994, 4.410374999999994, - 4.872124999999977, 4.546124999999984, 4.297707999999983 - ] - }, - "vp-z": { - "help_median_ms": 5.495583500000068, - "help_samples_ms": [ - 5.3364160000000105, 4.7905409999999815, 5.102457999999976, 4.980041000000046, - 5.152874999999946, 6.120499999999973, 5.546709000000094, 5.549833000000004, 5.288583999999985, - 5.595375000000069, 5.429083999999973, 5.444458000000041, 5.689084000000011, - 5.9992500000000115, 5.277666999999986, 5.681790999999992, 5.62533300000001, 4.825250000000003, - 5.643291999999911, 8.309624999999986, 7.061542000000087, 6.708667000000057, 6.604708000000015, - 6.223375000000031, 5.986374999999988, 5.263958000000013, 5.024542000000021, 5.183124999999955, - 4.99137500000002, 5.2841659999999235 - ] - } -} diff --git a/bench/binary-size/measure.cjs b/bench/binary-size/measure.cjs deleted file mode 100644 index 7f09b8c4e1..0000000000 --- a/bench/binary-size/measure.cjs +++ /dev/null @@ -1,21 +0,0 @@ -// Use the same gzip implementation and level as vp-binary-size.yml. -const { createHash } = require('node:crypto'); -const { readFileSync } = require('node:fs'); -const { gzipSync } = require('node:zlib'); - -const artifacts = Object.fromEntries( - process.argv.slice(2).map((path) => { - const bytes = readFileSync(path); - return [ - path, - { - raw: bytes.length, - gzip: gzipSync(bytes, { level: 9 }).length, - sha256: createHash('sha256').update(bytes).digest('hex'), - }, - ]; - }), -); -process.stdout.write( - JSON.stringify({ node: process.version, zlib: process.versions.zlib, artifacts }, null, 2) + '\n', -); diff --git a/bench/binary-size/prototypes/embedded-artifact-compression.patch b/bench/binary-size/prototypes/embedded-artifact-compression.patch deleted file mode 100644 index d8179b541a..0000000000 --- a/bench/binary-size/prototypes/embedded-artifact-compression.patch +++ /dev/null @@ -1,227 +0,0 @@ -diff --git a/CHANGELOG.md b/CHANGELOG.md -index 7a8b613a..8db93097 100644 ---- a/CHANGELOG.md -+++ b/CHANGELOG.md -@@ -2,0 +3 @@ -+- **Perf** Reduce the installed binary size by compressing bundled task helpers. Helpers remain available offline and existing extracted copies are reused ([#???](https://github.com/voidzero-dev/vite-task/pull/???)). -diff --git a/Cargo.lock b/Cargo.lock -index 9e310399..32323c75 100644 ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -5122,0 +5123,2 @@ dependencies = [ -+ "xxhash-rust", -+ "zstd", -@@ -5132,0 +5135 @@ dependencies = [ -+ "zstd", -diff --git a/crates/vt_materialized_artifact/Cargo.toml b/crates/vt_materialized_artifact/Cargo.toml -index c3e96482..17db2aa4 100644 ---- a/crates/vt_materialized_artifact/Cargo.toml -+++ b/crates/vt_materialized_artifact/Cargo.toml -@@ -11,0 +12,4 @@ tempfile = { workspace = true } -+zstd = { workspace = true } -+ -+[dev-dependencies] -+xxhash-rust = { workspace = true, features = ["xxh3"] } -diff --git a/crates/vt_materialized_artifact/src/lib.rs b/crates/vt_materialized_artifact/src/lib.rs -index 175cd6b8..f18365a0 100644 ---- a/crates/vt_materialized_artifact/src/lib.rs -+++ b/crates/vt_materialized_artifact/src/lib.rs -@@ -6,3 +6,3 @@ --//! the file content as a `&'static [u8]` at compile time via the --//! [`artifact!`] macro (same as `include_bytes!`), and [`Materialize::at`] --//! writes it out to disk when first needed — that materialization step is -+//! the file content at compile time via the [`artifact!`] macro, compressed -+//! when that reduces its size. [`Materialize::at`] restores the original -+//! bytes to disk when first needed — that materialization step is -@@ -41,0 +42 @@ pub struct Artifact { -+ compressed: bool, -@@ -52 +53,12 @@ impl Artifact { -- Self { name, content, hash } -+ Self { name, content, hash, compressed: false } -+ } -+ -+ /// The hash identifies the original bytes, so compression does not change cache paths. -+ #[doc(hidden)] -+ #[must_use] -+ pub const fn __new_zstd( -+ name: &'static str, -+ content: &'static [u8], -+ hash: &'static str, -+ ) -> Self { -+ Self { name, content, hash, compressed: true } -@@ -169 +181,6 @@ impl Materialize<'_> { -- tmp.as_file_mut().write_all(self.artifact.content)?; -+ if self.artifact.compressed { -+ let mut decoder = zstd::stream::read::Decoder::new(self.artifact.content)?; -+ io::copy(&mut decoder, tmp.as_file_mut())?; -+ } else { -+ tmp.as_file_mut().write_all(self.artifact.content)?; -+ } -diff --git a/crates/vt_materialized_artifact_macros/Cargo.toml b/crates/vt_materialized_artifact_macros/Cargo.toml -index f7c0effe..7a3290cc 100644 ---- a/crates/vt_materialized_artifact_macros/Cargo.toml -+++ b/crates/vt_materialized_artifact_macros/Cargo.toml -@@ -18,0 +19 @@ xxhash-rust = { workspace = true, features = ["xxh3"] } -+zstd = { workspace = true } -diff --git a/crates/vt_materialized_artifact_macros/src/lib.rs b/crates/vt_materialized_artifact_macros/src/lib.rs -index 0f7bef0a..9f506ce5 100644 ---- a/crates/vt_materialized_artifact_macros/src/lib.rs -+++ b/crates/vt_materialized_artifact_macros/src/lib.rs -@@ -12,3 +12,3 @@ --//! The hash and the embedded bytes are two reads of the same file through --//! different mechanisms: this macro reads it to hash, and the emitted --//! `include_bytes!` reads it to embed. Today both stay in sync because -+//! The macro reads the file to hash and compress it. An emitted -+//! `include_bytes!` also registers the original file in dep-info. These -+//! reads stay in sync because -@@ -34 +34 @@ use syn::{ -- LitStr, Token, -+ LitByteStr, LitStr, Token, -@@ -47,2 +47,2 @@ use syn::{ --/// Expands to `Artifact::__new(name, include_bytes!(env!(env_var)), "")` --/// with the xxh3-128 hex of the file computed during expansion. The expansion -+/// Embeds a zstd frame when it is smaller than the original bytes, with the -+/// xxh3-128 hex of the original file computed during expansion. The expansion -@@ -73,24 +73,43 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { -- let (content, hash, guard) = if let Ok(file_path) = tracked::env_var(env_var.value()) { -- // Declare the file read before attempting it: the dependency must -- // be registered even if the read fails, so a later fix to the file -- // retriggers this macro. -- tracked::path(&file_path); -- let bytes = fs::read(&file_path).map_err(|err| { -- syn::Error::new( -- env_var.span(), -- format!( -- "`{}` points at {file_path}, which could not be read: {err}", -- env_var.value() -- ), -- ) -- })?; -- let hash = format!("{:x}", xxhash_rust::xxh3::xxh3_128(&bytes)); -- (quote!(::core::include_bytes!(::core::env!(#env_var))), hash, TokenStream::new()) -- } else { -- // Env var unset. Only the compilation context itself can tell -- // whether that is fine (rust-analyzer never has artifact-dep env -- // vars) or a real error (missing artifact dependency, build script -- // not emitting the var), so the guard lets the emitted tokens branch -- // on `cfg(rust_analyzer)` instead of guessing here. -- let message = format!( -- "`{}` is not set at compile time; declare the artifact as a Cargo artifact \ -+ let (content, hash, guard, compressed) = -+ if let Ok(file_path) = tracked::env_var(env_var.value()) { -+ // Declare the file read before attempting it: the dependency must -+ // be registered even if the read fails, so a later fix to the file -+ // retriggers this macro. -+ tracked::path(&file_path); -+ let bytes = fs::read(&file_path).map_err(|err| { -+ syn::Error::new( -+ env_var.span(), -+ format!( -+ "`{}` points at {file_path}, which could not be read: {err}", -+ env_var.value() -+ ), -+ ) -+ })?; -+ let hash = format!("{:x}", xxhash_rust::xxh3::xxh3_128(&bytes)); -+ let compressed = zstd::bulk::compress(&bytes, 19).map_err(|err| { -+ syn::Error::new(env_var.span(), format!("compressing {file_path}: {err}")) -+ })?; -+ if compressed.len() < bytes.len() { -+ let content = LitByteStr::new(&compressed, env_var.span()); -+ // Keep rustc's normal file/env dep-info as well as proc-macro tracking. -+ // This unused constant registers the input without emitting its bytes. -+ let guard = quote! { -+ const _: &[u8] = ::core::include_bytes!(::core::env!(#env_var)); -+ }; -+ (quote!(#content), hash, guard, true) -+ } else { -+ ( -+ quote!(::core::include_bytes!(::core::env!(#env_var))), -+ hash, -+ TokenStream::new(), -+ false, -+ ) -+ } -+ } else { -+ // Env var unset. Only the compilation context itself can tell -+ // whether that is fine (rust-analyzer never has artifact-dep env -+ // vars) or a real error (missing artifact dependency, build script -+ // not emitting the var), so the guard lets the emitted tokens branch -+ // on `cfg(rust_analyzer)` instead of guessing here. -+ let message = format!( -+ "`{}` is not set at compile time; declare the artifact as a Cargo artifact \ -@@ -99,5 +118,7 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { -- env_var.value() -- ); -- let guard = quote! { -- #[cfg(not(rust_analyzer))] -- ::core::compile_error!(#message); -+ env_var.value() -+ ); -+ let guard = quote! { -+ #[cfg(not(rust_analyzer))] -+ ::core::compile_error!(#message); -+ }; -+ (quote!(&[]), String::from("rust-analyzer-stub"), guard, false) -@@ -105,2 +125,0 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { -- (quote!(&[]), String::from("rust-analyzer-stub"), guard) -- }; -@@ -107,0 +127,5 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { -+ let constructor = if compressed { -+ quote!(::vt_materialized_artifact::Artifact::__new_zstd) -+ } else { -+ quote!(::vt_materialized_artifact::Artifact::__new) -+ }; -@@ -111 +135 @@ fn expand(input: proc_macro::TokenStream) -> syn::Result { -- ::vt_materialized_artifact::Artifact::__new(#name, #content, #hash) -+ #constructor(#name, #content, #hash) -diff --git a/crates/vt_materialized_artifact/tests/compression.rs b/crates/vt_materialized_artifact/tests/compression.rs -new file mode 100644 -index 00000000..476c1cb7 ---- /dev/null -+++ b/crates/vt_materialized_artifact/tests/compression.rs -@@ -0,0 +1,44 @@ -+use std::fs; -+ -+use vt_materialized_artifact::{Artifact, artifact}; -+ -+#[test] -+fn compressed_macro_preserves_content_and_cache_path() { -+ let original = include_bytes!(env!("CARGO_MANIFEST_PATH")); -+ let embedded = artifact!("manifest", "CARGO_MANIFEST_PATH"); -+ let dir = tempfile::tempdir().unwrap(); -+ let path = embedded.materialize().at(dir.path()).unwrap(); -+ assert_eq!(fs::read(&path).unwrap(), original); -+ let expected = format!("manifest_{:x}", xxhash_rust::xxh3::xxh3_128(original)); -+ assert_eq!(path.file_name().unwrap(), expected.as_str()); -+ let modified = fs::metadata(&path).unwrap().modified().unwrap(); -+ assert_eq!(embedded.materialize().at(dir.path()).unwrap(), path); -+ assert_eq!(fs::metadata(&path).unwrap().modified().unwrap(), modified); -+ assert_eq!(fs::read_dir(dir.path()).unwrap().count(), 1); -+} -+ -+#[test] -+fn corrupt_compressed_data_is_not_published() { -+ let embedded = Artifact::__new_zstd("broken", b"not a zstd frame", "hash"); -+ let dir = tempfile::tempdir().unwrap(); -+ assert!(embedded.materialize().at(dir.path()).is_err()); -+ assert_eq!(fs::read_dir(dir.path()).unwrap().count(), 0); -+} -+ -+#[test] -+fn raw_and_compressed_content_materialize_identically() { -+ let bytes = b"payload payload payload payload payload payload"; -+ let compressed = zstd::bulk::compress(bytes, 19).unwrap(); -+ let compressed = Box::leak(compressed.into_boxed_slice()); -+ let raw = Artifact::__new("raw", bytes, "hash"); -+ let compressed = Artifact::__new_zstd("compressed", compressed, "hash"); -+ let dir = tempfile::tempdir().unwrap(); -+ let raw_path = raw.materialize().executable().at(dir.path()).unwrap(); -+ let compressed_path = compressed.materialize().executable().at(dir.path()).unwrap(); -+ assert_eq!(fs::read(raw_path).unwrap(), fs::read(&compressed_path).unwrap()); -+ #[cfg(unix)] -+ { -+ use std::os::unix::fs::PermissionsExt; -+ assert_eq!(fs::metadata(compressed_path).unwrap().permissions().mode() & 0o777, 0o755); -+ } -+} diff --git a/bench/binary-size/prototypes/pm-cli-deduplication.patch b/bench/binary-size/prototypes/pm-cli-deduplication.patch deleted file mode 100644 index 4bf6f09c97..0000000000 --- a/bench/binary-size/prototypes/pm-cli-deduplication.patch +++ /dev/null @@ -1,80 +0,0 @@ -diff --git a/crates/vp_pm_cli/src/resolution/resolve.rs b/crates/vp_pm_cli/src/resolution/resolve.rs -index 3abb67dc4..d0d0606ba 100644 ---- a/crates/vp_pm_cli/src/resolution/resolve.rs -+++ b/crates/vp_pm_cli/src/resolution/resolve.rs -@@ -65,0 +66,11 @@ where -+ bind_manager_environment(manager, &mut resolution)?; -+ Ok(resolution) -+} -+ -+// This work is independent of the command's argument type. Keep one copy for -+// all command variants, including when release LTO can see the generic caller. -+#[inline(never)] -+fn bind_manager_environment( -+ manager: &PackageManager, -+ resolution: &mut Resolution, -+) -> Result<(), Error> { -@@ -97 +108 @@ where -- Ok(resolution) -+ Ok(()) -diff --git a/crates/vp_pm_cli/src/resolution/support.rs b/crates/vp_pm_cli/src/resolution/support.rs -index 448202cad..76fc54603 100644 ---- a/crates/vp_pm_cli/src/resolution/support.rs -+++ b/crates/vp_pm_cli/src/resolution/support.rs -@@ -68 +68 @@ pub(crate) struct VersionRule { -- original: String, -+ original: &'static str, -@@ -96 +96 @@ impl PmSupportRule { -- original: &str, -+ original: &'static str, -@@ -99,4 +99 @@ impl PmSupportRule { -- Self { -- name, -- version: Some(VersionRule { operator, original: original.to_string(), normalized }), -- } -+ Self { name, version: Some(VersionRule { operator, original, normalized }) } -@@ -138,0 +136,29 @@ mod tests { -+ #[test] -+ fn version_rules_keep_release_and_prerelease_boundaries() { -+ #[pm_args] -+ #[derive(clap::Args)] -+ struct VersionArgs { -+ #[arg(long, not_supported(bun < "1.4"))] -+ release: bool, -+ #[arg(long, not_supported(bun < "1.4.0-beta.2"))] -+ prerelease: bool, -+ } -+ -+ let args = VersionArgs { release: true, prerelease: true }; -+ for (version, messages) in [ -+ ( -+ "1.4.0-beta.1", -+ Some( -+ "bun < 1.4 does not support --release.\nbun < 1.4.0-beta.2 does not support --prerelease.", -+ ), -+ ), -+ ("1.4.0-beta.2", Some("bun < 1.4 does not support --release.")), -+ ("1.4.0", None), -+ ("1.4.1", None), -+ ] { -+ let mut diagnostics = Diagnostics::default(); -+ args.diagnose(&bun(version), &mut diagnostics); -+ assert_eq!(diagnostics.unsupported_options_error().as_deref(), messages, "{version}"); -+ } -+ } -+ -diff --git a/crates/vp_pm_cli_macros/src/lib.rs b/crates/vp_pm_cli_macros/src/lib.rs -index eaa4f72d3..fbbdd988c 100644 ---- a/crates/vp_pm_cli_macros/src/lib.rs -+++ b/crates/vp_pm_cli_macros/src/lib.rs -@@ -446,0 +447,7 @@ impl Clause { -+ let version = Version::parse(normalized).expect("validated version literal"); -+ let normalized = if version.pre.is_empty() && version.build.is_empty() { -+ let (major, minor, patch) = (version.major, version.minor, version.patch); -+ quote!(::semver::Version::new(#major, #minor, #patch)) -+ } else { -+ quote!(::semver::Version::parse(#normalized).expect("pm_args emitted a valid semver version")) -+ }; -@@ -452 +459 @@ impl Clause { -- ::semver::Version::parse(#normalized).expect("pm_args emitted a valid semver version"), -+ #normalized, diff --git a/bench/binary-size/results.json b/bench/binary-size/results.json deleted file mode 100644 index 28daa82ecf..0000000000 --- a/bench/binary-size/results.json +++ /dev/null @@ -1,611 +0,0 @@ -{ - "source_commit": "006e9700a62aab9d791889cdfaac31a67767e63d", - "reference_url": "https://github.com/voidzero-dev/vite-plus/pull/1783#issuecomment-5308800690", - "reference_head_commit": "1438b2b217b4ab48e9fa7a36feee61ebfc9fd41c", - "target": "At least 50% reduction for each individual binary; report raw and gzip separately.", - "ci_baselines": { - "x86_64-unknown-linux-gnu": { - "vp": { - "path": "target/x86_64-unknown-linux-gnu/release/vp", - "raw": 10709192, - "gzip": 4721549 - }, - "napi": { - "path": "packages/cli/binding/vite-plus.linux-x64-gnu.node", - "raw": 36207360, - "gzip": 14476751 - }, - "cliDist": { - "path": "packages/cli/dist", - "files": 208, - "raw": 2304913 - }, - "coreDist": { - "path": "packages/core/dist", - "files": 108, - "raw": 4282554 - } - }, - "aarch64-apple-darwin": { - "vp": { - "path": "target/aarch64-apple-darwin/release/vp", - "raw": 7991312, - "gzip": 4133413 - }, - "napi": { - "path": "packages/cli/binding/vite-plus.darwin-arm64.node", - "raw": 43540800, - "gzip": 18850341 - } - }, - "x86_64-pc-windows-msvc": { - "vp": { - "path": "target/x86_64-pc-windows-msvc/release/vp.exe", - "raw": 8687616, - "gzip": 3836041 - }, - "napi": { - "path": "packages/cli/binding/vite-plus.win32-x64-msvc.node", - "raw": 32083968, - "gzip": 13121406 - }, - "trampoline": { - "path": "target/x86_64-pc-windows-msvc/release/vp-shim.exe", - "raw": 13824, - "gzip": 7258 - }, - "installer": { - "path": "target/x86_64-pc-windows-msvc/release/vp-setup.exe", - "raw": 3808768, - "gzip": 1866173 - } - } - }, - "local_measurements": { - "node": "v22.23.2", - "zlib": "1.2.12", - "artifacts": { - "tmp/binary-size/vp-o3/vp": { - "raw": 7963056, - "gzip": 3955720, - "sha256": "35c91a3e34d8544f0cf50ab976b9cf9227855ec6d3573f8478985432d6a18716" - }, - "tmp/binary-size/vp-z/vp": { - "raw": 4943936, - "gzip": 2878525, - "sha256": "c9501b136ebf46377738080c51e5794d936c3e53c0f4405c68d467e443d1f02b" - }, - "tmp/binary-size/vp-z-std/vp": { - "raw": 4631296, - "gzip": 2721957, - "sha256": "d32a32c349541503aa9ae5ab852027999c4e1d74a42b13bfc5942140cfc1a6ff" - }, - "tmp/binary-size/napi-o3/vite-plus.node": { - "raw": 43305840, - "gzip": 17932754, - "sha256": "12f03ee0f194a9d3bfdf266fe15eda81738dded7afad7aa1016f54361ff8740e" - }, - "tmp/binary-size/vp-z-std-pm/vp": { - "raw": 4614576, - "gzip": 2711066, - "sha256": "6511ed7b5652d9dfd2113fce91f5475e252dcaccac0f5dfa3ec01daccf8091ec" - }, - "tmp/binary-size/windows-vp-o3/vp.exe": { - "raw": 8688640, - "gzip": 3752298, - "sha256": "09a38ae775e58f4463cc2daf03dcf907f217b8c5d206d2d44eccb11d37e2187c" - }, - "tmp/binary-size/windows-vp-z/vp.exe": { - "raw": 5436928, - "gzip": 2502076, - "sha256": "32db03d309f557221218d1ba971ffa810b030ff4b4aa356f8812e450fa7e3ccd" - }, - "tmp/binary-size/linux-vp-z-std/vp": { - "raw": 7229544, - "gzip": 3236902, - "sha256": "9a86e3252bd2d9a262a3b8d85ada8b78ab6919d386728fb4efcf3cc08140a8c9" - }, - "tmp/binary-size/windows-installer-o3/vp-setup.exe": { - "raw": 3808256, - "gzip": 1833351, - "sha256": "63de54eda776fd07f67427959532ef60f15c8c5d0d8aabb46cd45a0147cce862" - }, - "tmp/binary-size/windows-installer-z/vp-setup.exe": { - "raw": 2947072, - "gzip": 1476680, - "sha256": "e54afc33c9d1f5f98bd81b3d11f98bac285cf841e4cf465884392d2e3ecb8d94" - }, - "tmp/binary-size/trampoline-target/x86_64-pc-windows-msvc/release/vp-shim.exe": { - "raw": 13824, - "gzip": 7080, - "sha256": "d7e59b12000638ddfb0ad911650ea486bee1f2c6fe817cef6d7d997dbdf494f8" - }, - "tmp/binary-size/napi-z/vite-plus.node": { - "raw": 31779504, - "gzip": 13785606, - "sha256": "57cd56ba928f1b01fb31fb4e327ce06a72c682b66629e9aa8351b2da7b89bff8" - }, - "tmp/binary-size/napi-compressed-o3/vite-plus.node": { - "raw": 32980192, - "gzip": 16362251, - "sha256": "e939919465a16685da9867456bdb48931fc785ae09d77bbde907e011a2170f10" - }, - "tmp/binary-size/linux-vp-o3/vp": { - "raw": 10667136, - "gzip": 4596742, - "sha256": "3bce61ce18dc8064c4b27c59640bf82f22f6559d8db3b035496b223af6149ad1" - }, - "tmp/binary-size/linux-vp-z/vp": { - "raw": 7500528, - "gzip": 3379698, - "sha256": "edef36e23dc494f12fc53ea91cd543dc590634e8b1d9effe6243e4417b6d7416" - }, - "tmp/binary-size/vp-o3-pm/vp": { - "raw": 7897392, - "gzip": 3929795, - "sha256": "7e0b3781b07862b2be2a585e7d2834af25c43d3558e214948a303257b649864f" - }, - "tmp/binary-size/linux-napi-o3/vite-plus.node": { - "raw": 35672200, - "gzip": 13924515, - "sha256": "0a22ebb63b92bcbfd4742f648f1e2a7b42623bb2c1d05510d1d308c34cfde0af" - }, - "tmp/binary-size/windows-napi-o3/vite-plus.node": { - "raw": 32076288, - "gzip": 12825527, - "sha256": "92dfb2b0094ab7fdf4b4979e3379b476db61f53030eb107d52c41639669a2572" - }, - "tmp/binary-size/linux-napi-compressed-o3/vite-plus.node": { - "raw": 35016840, - "gzip": 13864549, - "sha256": "58c4ff98128eb411d3c8c0f7999b3e59668f35edb2438600523a1d5226cf3b18" - }, - "tmp/binary-size/windows-napi-compressed-o3/vite-plus.node": { - "raw": 31751680, - "gzip": 12798980, - "sha256": "0671edcd3b2bdcd9a0a3e25383640c985e048c8c2b9fd37efeffd392cb8a8fc7" - } - } - }, - "constraints": [ - "Preserve existing commands and offline task helpers.", - "Preserve signature verification and panic diagnostics.", - "Benchmark performance-sensitive Oxc/Rolldown code before changing its optimization level.", - "Splitting or moving payloads does not count as a reduction in total shipped bytes." - ], - "findings": [ - { - "id": "vp-opt-z", - "measured": true, - "raw_reduction_percent": 37.91408725494333, - "scope": "macOS ARM64 standalone vp; same local source and toolchain" - }, - { - "id": "vp-opt-z-build-std", - "measured": true, - "raw_reduction_percent": 41.84021812731192, - "scope": "macOS ARM64; backtrace and panic-unwind std features retained; optimize_for_size enabled" - }, - { - "id": "napi-opt-z", - "measured": true, - "raw_reduction_percent": 26.616123829949956, - "status": "Do not ship as a blanket profile: synthetic transform/minify kernels approximately 2.8x slower." - }, - { - "id": "embedded-artifacts", - "measured": true, - "raw_reduction_percent": 23.84354627459022, - "gzip_reduction_percent": 8.757734590013333, - "scope": "macOS ARM64 NAPI at original opt-level=3. Upstream patch in ../binary-size-vite-task." - }, - { - "id": "tree-sitter", - "measured": false, - "scope": "Three C grammars retained (Bash, TypeScript, TSX). TypeScript and TSX parser objects are approximately 1.4 MB each. Evaluate language specialization or Oxc migration; do not count static archive bytes as final binary savings." - }, - { - "id": "pm-cli-generics", - "measured": true, - "scope": "macOS ARM64 at original O3 profile. Extraction of shared environment setup plus compile-time construction of release semver rules. Adds 16,720 bytes of savings after z and size-oriented std. Sibling worktree: ../binary-size-pm-cli.", - "raw_reduction_bytes": 65664, - "raw_reduction_percent": 0.8246080399283873 - }, - { - "id": "linux-vp-opt-z", - "measured": true, - "raw_reduction_percent": 29.685643831671406, - "scope": "Linux x64 cross build with cargo-zigbuild; RUSTFLAGS=--cfg tokio_unstable omits unsupported GNU linker warning option." - }, - { - "id": "linux-vp-opt-z-build-std", - "measured": true, - "raw_reduction_percent": 32.22600705568956, - "scope": "Linux x64 cross build; not executed on Linux." - }, - { - "id": "windows-vp-opt-z", - "measured": true, - "raw_reduction_percent": 37.424867413081905, - "scope": "Windows x64 cross build; not executed on Windows." - }, - { - "id": "windows-installer-opt-z", - "measured": true, - "raw_reduction_percent": 22.613605808012906, - "scope": "Optimize installer dependencies for size as well as the installer crate. Cross build; not executed on Windows." - }, - { - "id": "windows-trampoline", - "measured": true, - "raw_reduction_percent": 0, - "scope": "Baseline reproduced at 13,824 bytes. No new reduction demonstrated." - }, - { - "id": "linux-napi-compressed-helpers", - "measured": true, - "raw_reduction_percent": 1.8371729245743151, - "gzip_reduction_percent": 0.4306505468951727, - "scope": "Matched x64 cross builds with original opt-level=3. Not executed on the target platform." - }, - { - "id": "windows-napi-compressed-helpers", - "measured": true, - "raw_reduction_percent": 1.0119874219859826, - "gzip_reduction_percent": 0.20698564667167574, - "scope": "Matched x64 cross builds with original opt-level=3. Not executed on the target platform." - } - ], - "not_complete": [ - "No individual artifact has a validated production-ready 50% reduction.", - "Full application performance and CLI regression tests have not been run.", - "Linux and Windows cross-built binaries have not been executed on their target platforms." - ], - "toolchain": "rustc 1.99.0-nightly (73dc9167f 2026-08-01)\nbinary: rustc\ncommit-hash: 73dc9167f1cd099e525c9ade2e068d1907b78564\ncommit-date: 2026-08-01\nhost: aarch64-apple-darwin\nrelease: 1.99.0-nightly\nLLVM version: 22.1.8", - "upstream_patch_base": "9ba4cc93379cf2d7a6c7e657285bb8a00e8339dc", - "caveats": [ - "Local artifacts are not byte-identical to the canonical CI artifacts. Percentages use matched local builds, never CI-to-local comparisons.", - "Unstripped symbol extents include alignment and anonymous data. Large constant extents cannot be attributed wholly to the preceding named symbol.", - "All profile variants preserve panic abort hooks; no fmt-debug suppression or immediate-abort strategy was used.", - "Profile and compression savings must not be added: no combined NAPI variant has been measured. The global size profile fails the synthetic performance screen." - ], - "compression_benchmark_medians_ms": { - "napi-o3": { - "parse": 4.362104499999987, - "transform": 2.1320625000000035, - "minify": 2.0724164999999743, - "invalidSyntax": 0.002728999999987991 - }, - "napi-compressed-o3": { - "parse": 4.376646000000001, - "transform": 2.1449790000000064, - "minify": 2.0550839999999653, - "invalidSyntax": 0.002625000000023192 - } - }, - "compression_output_hashes_match": true, - "validation": { - "compression": "3 materialization tests, 2 shebang tests, 1 spawn test, targeted clippy passed on macOS. Linux and Windows x64 NAPI cross builds also passed; target-platform runtime tests remain outstanding.", - "pm_prototype": "724 resolution tests, 10 macro tests, targeted clippy passed on macOS.", - "vp_smoke": "Four native help outputs and exit codes match baseline, z, z+std, z+std+PM.", - "napi": "Synthetic parse/transform/minify/invalid-syntax output hashes match. Eight interleaved process runs compare baseline with compression." - }, - "napi_profile_benchmark": { - "napi-o3": { - "parse": { - "median_ms": 4.6273330000000215, - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 2.1946250000000873, - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 2.1785419999998794, - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.0027919999999994616, - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - }, - "napi-z": { - "parse": { - "median_ms": 8.688375000000065, - "output_sha256": "8f0cefe1734ec38969d896c9deaf9129d35f8aaba6b7bb616ed70470a0bc449a", - "output_bytes": 480411 - }, - "transform": { - "median_ms": 6.041207999999983, - "output_sha256": "df91b38d73152c9e12ceb1ae508f4aa857e2a989286428624f71d6ac8cfe41b9", - "output_bytes": 559715 - }, - "minify": { - "median_ms": 6.149583000000121, - "output_sha256": "e7fbc927fd470a4c103077b2a2654f0427e0e43a2f99921afc4151f550752d72", - "output_bytes": 301699 - }, - "invalidSyntax": { - "median_ms": 0.005958999999847947, - "output_sha256": "0de6b95128f6de6b315da6a4e7eda46ba5de2835c2be7c4630b7a95739d6bcf8", - "output_bytes": 287 - } - } - }, - "prototypes": { - "compression": { - "repository": "https://github.com/voidzero-dev/vite-task", - "base": "9ba4cc93379cf2d7a6c7e657285bb8a00e8339dc", - "branch": "perf/compress-embedded-artifacts", - "worktree": "../binary-size-vite-task", - "patch": "prototypes/embedded-artifact-compression.patch" - }, - "pm_cli": { - "repository": "https://github.com/voidzero-dev/vite-plus", - "base": "006e9700a62aab9d791889cdfaac31a67767e63d", - "branch": "perf/pm-cli-size-prototype", - "worktree": "../binary-size-pm-cli", - "patch": "prototypes/pm-cli-deduplication.patch" - } - }, - "remaining_budgets": [ - { - "artifact": "macOS ARM64 vp", - "baseline_raw": 7963056, - "candidate_raw": 4614576, - "raw_reduction_percent": 42.050187767108504, - "target_raw": 3981528, - "additional_bytes_to_remove": 633048, - "additional_fraction_of_candidate_percent": 13.71844347129617 - }, - { - "artifact": "Linux x64 vp", - "baseline_raw": 10667136, - "candidate_raw": 7229544, - "raw_reduction_percent": 32.22600705568956, - "target_raw": 5333568, - "additional_bytes_to_remove": 1895976, - "additional_fraction_of_candidate_percent": 26.225388489232515 - }, - { - "artifact": "Windows x64 vp", - "baseline_raw": 8688640, - "candidate_raw": 5436928, - "raw_reduction_percent": 37.424867413081905, - "target_raw": 4344320, - "additional_bytes_to_remove": 1092608, - "additional_fraction_of_candidate_percent": 20.096054242395706 - }, - { - "artifact": "macOS ARM64 NAPI", - "baseline_raw": 43305840, - "candidate_raw": 32980192, - "raw_reduction_percent": 23.84354627459022, - "target_raw": 21652920, - "additional_bytes_to_remove": 11327272, - "additional_fraction_of_candidate_percent": 34.345682402334106 - }, - { - "artifact": "Linux x64 NAPI", - "baseline_raw": 35672200, - "candidate_raw": 35016840, - "raw_reduction_percent": 1.8371729245743151, - "target_raw": 17836100, - "additional_bytes_to_remove": 17180740, - "additional_fraction_of_candidate_percent": 49.064221671629994 - }, - { - "artifact": "Windows x64 NAPI", - "baseline_raw": 32076288, - "candidate_raw": 31751680, - "raw_reduction_percent": 1.0119874219859826, - "target_raw": 16038144, - "additional_bytes_to_remove": 15713536, - "additional_fraction_of_candidate_percent": 49.488833346770946 - }, - { - "artifact": "Windows x64 installer", - "baseline_raw": 3808256, - "candidate_raw": 2947072, - "raw_reduction_percent": 22.613605808012906, - "target_raw": 1904128, - "additional_bytes_to_remove": 1042944, - "additional_fraction_of_candidate_percent": 35.38915913829048 - }, - { - "artifact": "Windows x64 trampoline", - "baseline_raw": 13824, - "candidate_raw": 13824, - "raw_reduction_percent": 0.0, - "target_raw": 6912, - "additional_bytes_to_remove": 6912, - "additional_fraction_of_candidate_percent": 50.0 - } - ], - "cli_profile_benchmark": { - "source_commit": "a4e9c5932e069b5aea5b9c0136222ddada73bed0", - "evidence": "evidence/cli-profile-benchmark.json", - "cpu": "Apple M4 Max", - "platform": "macOS-26.2-arm64-arm-64bit", - "binaries": { - "baseline": { - "bytes": 7991312, - "sha256": "8c7696daad2fcdb7842613fba238e5475eef6078b1ca8f8984899e49750b36b1" - }, - "candidate": { - "bytes": 4954496, - "sha256": "9b6a8879912330090415905119baed4e99eead050208271fe7200b1c44bb298d" - } - }, - "results": { - "help": { - "baseline": { - "count": 360, - "wall_median_ms": 4.0816875, - "cpu_median_ms": 3.954499999999861 - }, - "candidate": { - "count": 360, - "wall_median_ms": 4.156166499999999, - "cpu_median_ms": 3.9955000000000407 - }, - "change_ms": 0.0744789999999993, - "change_percent": 1.824710980446187 - }, - "env-current": { - "baseline": { - "count": 360, - "wall_median_ms": 4.350229000000001, - "cpu_median_ms": 4.251000000000005 - }, - "candidate": { - "count": 360, - "wall_median_ms": 4.497354, - "cpu_median_ms": 4.386999999999919 - }, - "change_ms": 0.14712499999999906, - "change_percent": 3.382005866817561 - }, - "env-current-deep": { - "baseline": { - "count": 360, - "wall_median_ms": 4.952729, - "cpu_median_ms": 4.771500000000373 - }, - "candidate": { - "count": 360, - "wall_median_ms": 5.130375, - "cpu_median_ms": 4.979500000000137 - }, - "change_ms": 0.1776460000000002, - "change_percent": 3.586830613990788 - }, - "env-which": { - "baseline": { - "count": 360, - "wall_median_ms": 4.3614795, - "cpu_median_ms": 4.210999999999743 - }, - "candidate": { - "count": 360, - "wall_median_ms": 4.4957705, - "cpu_median_ms": 4.413500000000958 - }, - "change_ms": 0.13429100000000016, - "change_percent": 3.0790239871584912 - }, - "node-startup": { - "baseline": { - "count": 360, - "wall_median_ms": 32.9604375, - "cpu_median_ms": 31.20450000000119 - }, - "candidate": { - "count": 360, - "wall_median_ms": 33.063417, - "cpu_median_ms": 31.37150000000144 - }, - "change_ms": 0.10297950000000355, - "change_percent": 0.3124336562583707 - }, - "npm-version": { - "baseline": { - "count": 360, - "wall_median_ms": 70.225958, - "cpu_median_ms": 66.86099999999584 - }, - "candidate": { - "count": 360, - "wall_median_ms": 70.22149999999999, - "cpu_median_ms": 66.94549999999566 - }, - "change_ms": -0.00445800000001384, - "change_percent": -0.006348080007700929 - }, - "install-cached": { - "baseline": { - "count": 360, - "wall_median_ms": 4.231, - "cpu_median_ms": 4.147999999993601 - }, - "candidate": { - "count": 360, - "wall_median_ms": 4.3736455, - "cpu_median_ms": 4.249500000007345 - }, - "change_ms": 0.14264550000000042, - "change_percent": 3.3714370125266013 - }, - "install-fresh": { - "baseline": { - "count": 30, - "wall_median_ms": 1067.9336875, - "cpu_median_ms": 1036.4390000000085 - }, - "candidate": { - "count": 30, - "wall_median_ms": 1127.104625, - "cpu_median_ms": 1103.9085000000027 - }, - "change_ms": 59.170937500000036, - "change_percent": 5.540693976843958 - } - }, - "scope": "Standalone CLI only. Three interleaved rounds on macOS ARM64 with warm OS caches; fresh Node installations use loopback HTTP with signature and checksum verification. These workloads do not measure bundling or Linux/Windows performance; see rolldown_build_performance for full build measurements." - }, - "rolldown_build_performance": { - "binary_source_commit": "a4e9c5932e069b5aea5b9c0136222ddada73bed0", - "evidence": "evidence/rolldown-profile-benchmark.json", - "baseline_profile": "Standalone opt-level=3, fat LTO; NAPI opt-level=3, fat LTO", - "candidate_profile": "Standalone opt-level=z, fat LTO; identical NAPI opt-level=3, fat LTO", - "results": { - "three10x-bundle": { - "baseline": { - "count": 60, - "wall_median_ms": 525.010104, - "cpu_median_ms": 1414.179500000003 - }, - "candidate": { - "count": 60, - "wall_median_ms": 528.2095205, - "cpu_median_ms": 1417.6124999999988 - }, - "change_percent": 0.6094009383103449, - "change_percent_95pct_bootstrap_ci": [-0.37301050642988276, 1.5439326167003609] - }, - "three10x-minify-sourcemap": { - "baseline": { - "count": 60, - "wall_median_ms": 660.9096460000001, - "cpu_median_ms": 1606.4654999999846 - }, - "candidate": { - "count": 60, - "wall_median_ms": 665.467521, - "cpu_median_ms": 1607.0614999999862 - }, - "change_percent": 0.6896366284840028, - "change_percent_95pct_bootstrap_ci": [-0.7029099873636424, 1.0160827443221887] - }, - "typescript-code-split-minify-sourcemap": { - "baseline": { - "count": 60, - "wall_median_ms": 401.94291699999997, - "cpu_median_ms": 1588.4634999999605 - }, - "candidate": { - "count": 60, - "wall_median_ms": 401.37658350000004, - "cpu_median_ms": 1591.023000000007 - }, - "change_percent": -0.14089898740520246, - "change_percent_95pct_bootstrap_ci": [-0.85460009661944, 0.6420565255943034] - } - }, - "scope": "Full vp build commands through bundled Rolldown 1.2.14 and Vite 8.3.4 on Apple M4 Max, macOS ARM64, Node 22.23.2. Sixty samples per variant per workload, warm filesystem caches, fresh processes and clean output directories. No consistent slowdown in these workloads. Disabling fat LTO, changing NAPI optimization, cold caches, and Linux/Windows performance are not measured." - } -} From b3c1a0836481b7c4173fe8adfe6eebdc15547854 Mon Sep 17 00:00:00 2001 From: MK Date: Sun, 18 Oct 2026 17:50:35 +0800 Subject: [PATCH 11/11] test(cli): replace watched pack config atomically --- .../fixtures/pack_watch_config/verify.mjs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/pack_watch_config/verify.mjs b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/pack_watch_config/verify.mjs index 8bfa997002..b045e1f9cc 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/pack_watch_config/verify.mjs +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/pack_watch_config/verify.mjs @@ -1,13 +1,17 @@ import assert from 'node:assert/strict'; import { fork } from 'node:child_process'; import { once } from 'node:events'; -import { readFile, readdir, writeFile } from 'node:fs/promises'; +import { readFile, readdir, rename, writeFile } from 'node:fs/promises'; import { createRequire } from 'node:module'; import { dirname, join } from 'node:path'; const require = createRequire(import.meta.url); const cli = join(dirname(require.resolve('vite-plus/package.json')), 'dist/pack-bin.js'); const child = fork(cli, ['--watch'], { silent: true }); +const childExited = new AbortController(); +child.once('exit', (code, signal) => { + childExited.abort(new Error(`pack --watch exited before completing a build: ${signal ?? code}`)); +}); let logs = ''; child.stdout.on('data', (data) => { logs += data; @@ -16,17 +20,24 @@ child.stderr.on('data', (data) => { logs += data; }); +function waitForBuild() { + return once(child, 'message', { + signal: AbortSignal.any([childExited.signal, AbortSignal.timeout(20000)]), + }); +} + try { // The onSuccess IPC message synchronizes edits with completed builds on every platform. - await once(child, 'message', { signal: AbortSignal.timeout(20000) }); + await waitForBuild(); const output = join('dist', (await readdir('dist')).find((file) => /\.m?js$/.test(file))); const before = await readFile(output, 'utf8'); assert.match(before, /\n/); - const rebuilt = once(child, 'message', { signal: AbortSignal.timeout(20000) }); const config = await readFile('vite.config.ts', 'utf8'); - await writeFile('vite.config.ts', config.replace('minify: false', 'minify: true')); - await rebuilt; + // Replace the complete file so the watcher cannot reload a temporarily empty config. + await writeFile('vite.config.ts.tmp', config.replace('minify: false', 'minify: true')); + const rebuilt = waitForBuild(); + await Promise.all([rebuilt, rename('vite.config.ts.tmp', 'vite.config.ts')]); const after = await readFile(output, 'utf8'); assert.notEqual(after, before, 'the rebuilt output must use the updated pack configuration');