-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathbench.ts
More file actions
53 lines (43 loc) · 11.4 KB
/
bench.ts
File metadata and controls
53 lines (43 loc) · 11.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { open, makeCursor, read } from "./rx";
import { readFileSync } from "fs";
function bench(name: string, fn: () => void, iterations = 1000) {
for (let i = 0; i < 10; i++) fn();
const start = performance.now();
for (let i = 0; i < iterations; i++) fn();
const elapsed = performance.now() - start;
const perOp = (elapsed / iterations).toFixed(3);
console.log(` ${name}: ${perOp}ms/op`);
}
const buf = new Uint8Array(readFileSync("/Users/tim/Code/rex/large-sample.rexc"));
console.log(`File size: ${(buf.length / 1024).toFixed(0)} KB`);
const c = makeCursor(buf);
read(c);
console.log(`Root: tag=${c.tag}, ixWidth=${c.ixWidth}, ixCount=${c.ixCount}\n`);
const KEYS = ["/_next/static/build-TfctsWXpff2fKS/_buildManifest.js", "/_next/static/chunks/63b4a9a7997e818a.js", "/_next/static/chunks/cf97eeb48024010b.js", "/_next/static/media/argon-ai-light.8ef23dec.svg", "/_next/static/media/chevron-up-small.f5c11a24.svg", "/_next/static/media/eight-vc-dark.fcd6494c.svg", "/_next/static/media/graph-cms-dark.a2e84b60.svg", "/_next/static/media/KaTeX_Size1-Regular.05ccfb2d.woff2", "/_next/static/media/logo-python-color-light.c87538f0.svg", "/_next/static/media/moo-dark.f9160728.svg", "/_next/static/media/pipe-dark.2bd7a84f.svg", "/_next/static/media/shotgun-light.3e01402a.svg", "/_next/static/media/tiger-global-dark.5ddf0d90.svg", "/_next/static/media/whop-light.436f9659.svg", "/home/[homeFlagsCode]/cheaper", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._g.N1f6Zv80UkaRFRNiMW5MpF0mlOe4Kp7FJQK4M1FWxhQ/models/codex-mini.segments/_full.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._g.N1f6Zv80UkaRFRNiMW5MpF0mlOe4Kp7FJQK4M1FWxhQ/models/gemini-2.5-flash-preview-09-2025.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode/models/$d$model/__PAGE__.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._g.N1f6Zv80UkaRFRNiMW5MpF0mlOe4Kp7FJQK4M1FWxhQ/models/gpt-4o-mini", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._g.N1f6Zv80UkaRFRNiMW5MpF0mlOe4Kp7FJQK4M1FWxhQ/models/grok-4.segments/_full.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._g.N1f6Zv80UkaRFRNiMW5MpF0mlOe4Kp7FJQK4M1FWxhQ/models/llama-3.2-11b.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._g.N1f6Zv80UkaRFRNiMW5MpF0mlOe4Kp7FJQK4M1FWxhQ/models/morph-v3-fast.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._g.N1f6Zv80UkaRFRNiMW5MpF0mlOe4Kp7FJQK4M1FWxhQ/models/qwen3-embedding-4b.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode/models.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._g.N1f6Zv80UkaRFRNiMW5MpF0mlOe4Kp7FJQK4M1FWxhQ/models/titan-embed-text-v2.segments/_full.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/claude-3.5-sonnet.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/flux-2-klein-4b.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode/models/$d$model/__PAGE__.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/glm-4.6v-flash.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode/models/$d$model/__PAGE__.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/gpt-5.2-codex.segments/_tree.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/imagen-4.0-generate-001", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/mercury-coder-small.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/o3-deep-research.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode/models/$d$model/__PAGE__.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/recraft-v3.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode/models/$d$model.segment.rsc", "/ai-gateway/eyJhbGciOiJIUzI1NiJ9._Q.6NZbPoDBZimfIs5ZnBHefWTFmo5G-khr_CO46r5iSd4/models/voyage-code-2.segments/!KHNpdGUp/!KGFpLWdhdGV3YXktbWFya2V0aW5nKQ/ai-gateway/$d$aiGatewayFlagsCode/models/$d$model/__PAGE__.segment.rsc", "/blog/agents-at-work-a-partnership-with-salesforce-and-slack.segments/_head.segment.rsc", "/blog/aws-databases-are-now-live-on-the-vercel-marketplace-and-v0.segments/_head.segment.rsc", "/blog/building-secure-and-performant-web-applications-on-vercel.segments/!KHNpdGUp/!KGRlZmF1bHQp.segment.rsc", "/blog/commerceui-headless-shopify-nextjs.segments/_tree.segment.rsc", "/blog/designing-the-vercel-virtual-product-tour.segments/_full.segment.rsc", "/blog/fluid-how-we-built-serverless-servers", "/blog/how-consensys-rebuilt-metamask-io-with-vercel-and-next-js.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ.segment.rsc", "/blog/how-supabase-elevated-their-developer-experience-with-turborepo.segments/_full.segment.rsc", "/blog/how-whop-improved-their-real-experience-score-by-200-with-the-next-js-app.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/blog.segment.rsc", "/blog/introducing-next-js-commerce-2-0.rsc", "/blog/just-another-black-friday.segments/_head.segment.rsc", "/blog/mongodb-and-vercel-from-idea-to-global-fullstack-app-in-seconds.segments/_full.segment.rsc", "/blog/nick-bogaty-joins-vercel-as-chief-revenue-officer.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ.segment.rsc", "/blog/recap-next-js-conf-2024", "/blog/simpler-pricing.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/blog/$d$slug.segment.rsc", "/blog/the-second-wave-of-mcp-building-for-llms-not-developers.segments/_tree.segment.rsc", "/blog/using-sveltekit-1-0-on-vercel.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/blog/$d$slug/__PAGE__.segment.rsc", "/blog/vercel-collaborates-with-openai-for-gpt-5-launch.segments/!KHNpdGUp.segment.rsc", "/blog/vercel-storage.segments/!KHNpdGUp/!KGRlZmF1bHQp.segment.rsc", "/blog/xai-and-vercel-partner-to-bring-zero-friction-ai-to-developers.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ.segment.rsc", "/changelog/activity-date-filtering-now-available.segments/_head.segment.rsc", "/changelog/anomaly-alerts-now-available-via-email.rsc", "/changelog/axiom-is-joining-the-vercel-marketplace.segments/!KHNpdGUp/!KGRlZmF1bHQp.segment.rsc", "/changelog/bun-install-is-now-supported-with-zero-configuration.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp.segment.rsc", "/changelog/claude-opus-4-5-now-available-in-vercel-ai-gateway.segments/_full.segment.rsc", "/changelog/corepack-experimental-is-now-available.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/changelog.segment.rsc", "/changelog/cve-2025-57822.segments/_index.segment.rsc", "/changelog/devin-raycast-windsurf-and-goose-now-supported-on-vercel-mcp.segments/_head.segment.rsc", "/changelog/enterprise-customers-can-now-transfer-projects.rsc", "/changelog/faster-defaults-for-vercel-function-cpu-and-memory.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp.segment.rsc", "/changelog/free-botid-deep-analysis.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ.segment.rsc", "/changelog/gpt-oss-20b-and-gpt-oss-120b-are-now-supported-in-vercel-ai-gateway.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/changelog.segment.rsc", "/changelog/improved-cdn-performance.segments/_tree.segment.rsc", "/changelog/improved-support-for-gatsby-sites", "/changelog/install-marketplace-integrations-from-the-vercel-cli.segments/!KHNpdGUp.segment.rsc", "/changelog/introducing-vercel-firewall-notifications.segments/!KHNpdGUp/!KGRlZmF1bHQp.segment.rsc", "/changelog/longer-history-available-in-speed-insights.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp.segment.rsc", "/changelog/mongodb-atlas-joins-the-vercel-marketplace.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/changelog.segment.rsc", "/changelog/new-instant-rollback-flow.segments/_tree.segment.rsc", "/changelog/node-js-12-is-being-deprecated", "/changelog/one-click-linking-from-usage-to-vercel-observability-dashboards.segments/_head.segment.rsc", "/changelog/preview-urls-optimized-for-multi-tenant-platforms.rsc", "/changelog/python-3-13-and-3-14-are-now-available.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ.segment.rsc", "/changelog/reduced-log-drains-costs-with-smaller-billable-increments.segments/_full.segment.rsc", "/changelog/run-scheduled-jobs-with-vercel-cron-jobs-and-vercel-functions.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/changelog/$d$slug.segment.rsc", "/changelog/session-tracing-now-available", "/changelog/statsig-joins-the-vercel-marketplace.segments/_head.segment.rsc", "/changelog/switch-between-branches-directly-from-deployments.rsc", "/changelog/updated-default-retention-policy-for-canceled-deployments.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp.segment.rsc", "/changelog/vercel-analytics-api-is-now-available-for-all-frameworks.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/changelog/$d$slug/__PAGE__.segment.rsc", "/changelog/vercel-flags-are-now-optimized-for-agents.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/changelog.segment.rsc", "/changelog/vercel-python-sdk-in-beta.segments/!KHNpdGUp/!KGRlZmF1bHQp/!KGJsb2cp/!KGFydGljbGVzKQ/changelog/$d$slug.segment.rsc", "/changelog/view-advanced-function-metrics-with-observability", "/changelog/zero-config-fastapi-backends.segments/!KHNpdGUp.segment.rsc", "/customers/commerceui-headless-shopify-nextjs", "/customers/how-makeswift-improved-ci-speed-by-65-with-turborepo.segments/_tree.segment.rsc", "/customers/mintlify-scaling-a-powerful-documentation-platform-with-vercel.segments/_head.segment.rsc", "/guides-playground/topic/ai-cloud", "/home/eyJhbGciOiJIUzI1NiJ9.Ag.4uQkZ9VUn2bX7mKVW7qgNYqWTXRViMJs7FsPZPwFr_I/bWFya2V0aW5nLWhvbWUtcGFnZS1oZWFkaW5ncz1jb250cm9sJm1hcmtldGluZy1ob21lLXBhZ2UtYnVuaz1vZmYmbWFya2V0aW5nLWhvbWUtcGFnZS1zdGFja3M9b24.segments/_head.segment.rsc", "/i.segments/_full.segment.rsc", "/legal/support-terms", "/resources/collections/ai", "/resources/curated/glide-apps.segments/_tree.segment.rsc", "/resources/curated/web-directions-ai-2023.segments/_head.segment.rsc", "/resources/speed-is-the-new-seo.segments/!KHNpdGUp/!KGRlZmF1bHQp/resources/$d$slug/__PAGE__.segment.rsc", "/shipped/dia.segments/!KHNpdGUp/!KGRlZmF1bHQp/shipped/$d$slug.segment.rsc", "/shipped/openai.rsc", "/shipped/whop.segments/!KHNpdGUp/!KGRlZmF1bHQp.segment.rsc"];
for (let i = 0; i < 10; i++) {
console.log()
console.log(`35K-key real dataset, 100 random lookups per iteration:`);
bench("open + 100 lookups", () => {
const root = open(buf) as any;
for (const k of KEYS) root[k];
}, 100);
bench("open + 1 lookup", () => {
(open(buf) as any)[KEYS[50]!];
}, 500);
bench("open only", () => {
open(buf);
}, 500);
// Object.keys (forces full enumeration)
bench("open + Object.keys", () => {
Object.keys(open(buf) as any);
}, 20);
// JSON comparison
const root = open(buf) as any;
const jsonStr = JSON.stringify(Object.fromEntries(Object.entries(root)));
console.log(`\nJSON equivalent: ${(jsonStr.length / 1024).toFixed(0)} KB vs rexc: ${(buf.length / 1024).toFixed(0)} KB`);
bench("JSON.parse", () => { JSON.parse(jsonStr); }, 20);
bench("JSON.parse + 100 lookups", () => {
const obj = JSON.parse(jsonStr);
for (const k of KEYS) obj[k];
}, 20);
}