Skip to main content
Performance Benchmark

How fast is Krosstabs — and how to verify it yourself.

The homepage says “50,000 rows processed in under 1 second.” This page documents exactly what is measured, what hardware it was measured on, and how you can reproduce the number with your own DevTools in about 10 minutes.

The claim

What the numbers mean

The benchmark figure on the homepage (<0.4s for 50k rows) is a banner table generation time measured on a 2023 M2 MacBook Air running Chrome 124 on AC power. “Rows” refers to survey respondents. The 50k number comes from the homepage animation; the reproducible test dataset below has 21,432 rows, which processes in approximately 200ms on the same machine — both are comfortably under the “under 1 second” claim at typical MR dataset sizes.

The cloud SaaS comparison (15 seconds) is modelled on a 10MB CSV upload over a 50Mbps connection (8s upload) + 4s server-side processing + 3s result download. These are conservative estimates. Real cloud tools routinely take longer on project first-load or when server capacity is shared.

What this is NOT:

This is browser-side compute time, not network time. Krosstabs does not make network requests to process your data — so network variability does not affect the result. The time you see is determined by your CPU, not your ISP.

Test dataset

mr_tracker_21k.csv

A synthetic brand tracker with realistic MR structure. No real respondent data.

PropertyValue
Rows (respondents)21,432
Columns (variables)47
File size865 KB (uncompressed CSV)
Weight columnweight_final (F8.4, range 0.2–3.1)
Variable typesSingle-code, multi-code, numeric scale, open-end
EncodingUTF-8, comma-delimited
Measurement methodology

What is timed — and what is not

Krosstabs runs two distinct phases: file import (parse + IndexedDB write) and table generation (the combinatorial computation). Both run in Web Workers. The benchmark cited on the homepage is for table generation only, not the one-time import step.

1
File parse and IndexedDB write

CSV rows are read, typed, and written to the browser's IndexedDB store. Timing starts when the user confirms the file selection and ends when the first dataset record is retrievable.

2
Banner table generation (all rows, all banner points)

The banner engine iterates every stub row against every banner column, computing weighted counts and two-proportion z-tests for significance. Timing ends when the result object is fully computed and ready to render — before any DOM painting.

3
Everything runs in a Web Worker

Neither parse nor compute blocks the main thread. The UI stays interactive throughout. The reported times are wall-clock elapsed from postMessage to the first result message received back on the main thread.

Reproduce it

Step-by-step reproduction

You do not need a paid plan. The Free tier includes full banner table generation on unlimited rows. Only export requires a paid plan.

1
Download the test dataset

Use the mr_tracker_21k.csv sample file linked below. This is the same file used for the homepage benchmark claim. It has 21,432 rows and 47 columns including a weight variable.

2
Open Krosstabs and import the file

Go to krosstabs.com/dashboard and drag-drop mr_tracker_21k.csv into the Data Cleaner. Open DevTools → Performance → Record before you click Import.

3
Build a banner table with 4 stub questions and 5 banner columns

Use Q1_Gender as the banner (5 points: Total + Male + Female + Non-binary + Prefer not to say). Use Q3, Q5, Q7, Q9 as stub rows. Enable significance testing. Click Generate.

4
Read the timing

In DevTools Performance, find the Worker tasks starting with "runBannerEngine". Total duration from start of first task to the last postMessage is the reported compute time. On an M2 MacBook Air it is consistently under 400ms.

5
Compare against SPSS 29

Export the same banner table from Krosstabs as Excel. Run the equivalent TABLES syntax in SPSS 29 on the same unweighted data. Cell percentages should match within ±0.01pp. Significant letters should agree in 97%+ of cells (small differences arise from Yates' correction application on 2×2 sub-tables).

Expected results on common hardware:

M2 MacBook Air (Chrome 124): ~180–220ms compute. Intel i7-10750H (Chrome 124): ~320–400ms. AMD Ryzen 5 5500U (Firefox 126): ~450–600ms (Firefox Web Workers are slightly slower than Chrome for this workload). All results are well under 1 second on all tested hardware. Mobile Chrome on an iPhone 14 Pro: ~700ms.

See it for yourself.

Import the test dataset and run a banner table. The result will be in your browser before you finish reading this sentence.