Skip to content
jsonblocks

Large JSON performance: benchmark method and limits

Large JSON performance depends on text size, document shape, the browser, and device speed. Use the downloadable synthetic fixtures and repeatable benchmark command to evaluate your own environment.

Local lab results — 5 October 2026

Measured on an Apple M1 laptop, macOS (Darwin 25.5.0 arm64), Chromium 153.0.8010.12, with a 4× CPU slowdown. Desktop used 1440 × 1000 and mobile emulation used 390 × 844. Each fixture ran three times. The mobile profile is emulation on the same laptop, not a physical phone. Timings include automated file selection and waiting for complete node statistics; they are not pure parse times or field INP.

File selection to complete node statistics. Bytes are the minified synthetic input size. All timings are milliseconds.
ViewportFixtureBytesRuns (ms)Median (ms)
desktopflat-50005920801238, 1092, 11051105
desktopflat-2500030380802132, 1958, 20242024
desktopnested-50007665801397, 1139, 11301139
mobile-emulatedflat-5000592080680, 1085, 641680
mobile-emulatedflat-2500030380802033, 1967, 29212033
mobile-emulatednested-50007665801266, 1165, 11861186

Long main-thread tasks remain: observed maximums across runs ranged from 200 to 1,774 ms, including test instrumentation. The worker does not eliminate transfer, rendering, or browser memory costs. These results describe these fixtures and this environment only; they do not establish unlimited file capacity or superiority over another viewer.

How the viewer handles large data

Above 200,000 characters, parsing and search run in a Web Worker. The editor initially displays only the first 20,000 characters to avoid laying out megabytes of text. The full document remains available for viewing, search, copying, and formatting. Long sibling lists render in windows; deeply nested views stop at 100 levels.

What to measure

  1. Generate the deterministic fixtures with npm run fixtures. Each has a known shape and node count.

  2. Build the production site, then start npm run serve. Measure production rather than the Vite development server.

  3. Run npm run benchmark. The runner loads each fixture three times in desktop and mobile viewport profiles using 4× CPU throttling.

  4. Compare the median file-to-statistics time, every individual run, and the longest observed main-thread task. Record browser, OS, CPU, fixture bytes, and the commit.

  5. Repeat on physical desktop and mobile devices before making broad speed or capacity claims. Emulation does not reproduce device memory, thermals, or network conditions.

Important limits

  • Synthetic file-to-statistics timing is not a field Core Web Vital or a maximum supported file size.
  • Workers still transfer parsed values to the main thread. Large object graphs use memory in both contexts.
  • Search returns at most 200 match paths while reporting the full match count. Expand all can still render substantial work.
  • Edit full document opts back into the complete textarea, which can require expensive layout.
  • Numbers follow JavaScript number semantics. Converters and formatting should not be used to preserve exact unsafe integers.

Reproduce instead of assuming

bash
npm ci
npm run fixtures
npm run build
npm run serve
# In another terminal:
npm run benchmark

Download the synthetic fixtures