Skip to main content

Benchmarks

These numbers come from the in-repo benches under bench/, measured on an Apple M4. Absolute times vary by hardware, Studio build, and load; use the ratios and relative ordering as the main takeaway.

Each operation is timed with BenchHelper: 50 warm-up calls, then 10 timed batches. Reported Avg is mean microseconds per call across those batches.

VoidSentryUltimate throughput​

Source: benchresults/benchresult.txt
Harness: LuauBench + RobloxBench
Iterations: 10,000 per timed batch

Values are average microseconds per call (μs). Lower is faster.

Scalars and strings​

TypeSerializeDeserializeRoundTrip
U80.050.020.06
U400.050.020.07
I400.050.020.07
U480.050.020.07
I480.050.020.07
UInt (1 byte)0.050.020.06
Int (1 byte)0.050.020.07
UInt (4 byte)0.050.020.07
Int (4 byte)0.050.020.08
F320.050.020.06
F640.050.020.06
Bool0.050.020.06
String (100 chars)0.080.060.14

Vectors, buffers, and Roblox types​

TypeSerializeDeserializeRoundTrip
Vector0.050.020.06
VectorF160.070.030.09
BufferFixed (32b)0.070.050.12
Buffer8 (33b payload)0.080.050.13
Color30.090.050.08
UDim2Quant0.070.040.10
CFrame0.090.050.14
QCFrame0.100.050.16
CFrameF160.140.080.23
CFrameQuantF160.110.090.21
CFrameQuant8F160.110.100.22
Instance0.050.020.07
SerInstance0.190.881.10

Collections​

TypeSerializeDeserializeRoundTrip
Array (10 × U8)0.140.140.29
Array (100 × U8)0.901.021.93
Map (10 × U8→U8)0.230.330.56
Map (100 × U8→U8)1.602.203.93
Schema (10 × U8)0.180.320.51
Schema (100 × U8)1.532.834.47

Primitive nodes stay near 0.05 μs serialize and 0.02 μs deserialize. The 40-bit and 48-bit integer nodes, and both the 1-byte and 4-byte UInt / Int paths, remain in that range. Cost grows mainly with collection size and with compressed / property-driven types such as CFrameF16 and SerInstance.

Versus Sera​

Source: benchresults/seravssentryresult.txt
Harness: bench/SeraVsVoidSentry/Comparator.luau
Iterations: 10,000 per timed batch

Sera only serializes through schemas. For primitives, vectors, and CFrames the comparator wraps Sera values in a single-field schema, while VoidSentryUltimate uses bare nodes. Schema rows compare Sera.Schema vs VoidSentryUltimate.Schema. Delta rows compare Sera.DeltaSerialize / DeltaDeserialize vs VoidSentryUltimate.Schema.DeltaSerialize / DeltaDeserialize. Push compares Sera.Push / DeltaPush vs VoidSentryUltimate.Schema.Push / Schema.DeltaPush.

Speedup is Sera Avg ÷ VoidSentry Avg. Values above 1.00x mean VoidSentry was faster.

Overall (suite averages)​

CategorySerializeDeserializeTotal / RoundTrip
Primitives1.51x VS2.13x VS1.77x VS
Schemas1.25x VS1.01x VS1.09x VS
Deltas1.38x VS1.14x VS1.24x VS
Push (avg μs)VS 1.169 / Sera 1.086——

Floats, vectors, and CFrames​

OperationSera (μs)VoidSentry (μs)Speedup
F32 Serialize0.090.051.80x
F32 Deserialize0.050.022.50x
F32 RoundTrip0.140.062.33x
Vector3 Serialize0.090.051.80x
Vector3 Deserialize0.050.022.50x
Vector3 RoundTrip0.140.072.00x
CFrame Serialize0.140.101.40x
CFrame Deserialize0.090.051.80x
CFrame RoundTrip0.230.151.53x
LossyCFrame vs QCFrame Serialize0.140.111.27x
LossyCFrame vs QCFrame Deserialize0.110.052.20x

Schemas (U8 fields)​

OperationSera (μs)VoidSentry (μs)Speedup
1 field Serialize0.090.061.50x
1 field Deserialize0.050.051.00x
10 fields Serialize0.230.181.28x
10 fields Deserialize0.320.321.00x
100 fields Serialize1.821.471.24x
100 fields Deserialize2.822.801.01x
100 fields RoundTrip4.734.391.08x

Deltas (Schema.DeltaSerialize vs Sera delta)​

OperationSera (μs)VoidSentry (μs)Speedup
10 fields, all present Serialize0.260.191.37x
10 fields, all present Deserialize0.360.331.09x
100 fields, all present Serialize2.201.601.38x
100 fields, only 1 present Serialize0.090.071.29x
255 fields, only 1 present Serialize0.090.061.50x

Push​

OperationSera (μs)VoidSentry (μs)Speedup
Schema Push (100 fields)1.701.451.17x
DeltaPush (100 fields, only 1 present)0.060.051.20x

Summary​

  • Primitives are VoidSentry’s clearest win (~1.5× serialize, ~2.1× deserialize, ~1.8× round-trip on the suite averages; bare F32 / Vector3 deserialize is 2.5×).
  • Schemas stay close: VoidSentry leads serialize (1.25×) and total (1.09×); deserialize is even.
  • Deltas favor VoidSentry (~1.38× serialize, ~1.14× deserialize, ~1.24× total), including sparse “only 1 present” cases.
  • Push suite average slightly favors Sera (1.086 μs vs 1.169 μs). Individual rows still vary: 100-field Schema.Push and sparse DeltaPush favor VoidSentry.
  • Prefer schema tables for schema-to-schema comparisons; prefer primitive tables when comparing each library’s natural single-value API.

LuauBench also includes a VoidSentryUltimate.Schema section for the pure-Luau package.

Reproducing​

-- VoidSentry-only throughput (Luau subset + Roblox types)
local LuauBench = require(path.to.bench.LuauBench)
local RobloxBench = require(path.to.bench.RobloxBench)
LuauBench(true, 10_000)
RobloxBench(true, 10_000)

-- VoidSentry vs Sera
local Comparator = require(path.to.bench.SeraVsVoidSentry.Comparator)
Comparator(true, 10_000)

Raw logs used for this page live in benchresults/.