phpser benchmarks

A decoder-optimized binary serializer for read-heavy PHP cache workloads, measured against igbinary (the reference), PHP's native serialize(), and msgpack across cache-shaped payloads. Lower is better on every metric. igbinary is the baseline; each percentage is that column's delta vs. igbinary: green beats igbinary, red loses to it.

PHP 8.4.25 arch aarch64 os Linux 6.17.0-1019-oracle iters 1000 median of 35 warmup 100 phpser 0.6.2 igbinary 3.2.16 msgpack 3.0.1 date 2026-09-29

Bars are normalized per row to the largest value (longer = slower / bigger).best in rowphpser column

SIZEbytes; lower is better

shape phpser igbinary * serialize msgpack
rowset_100
2,287
-50%
4,570
21,046
+361%
9,593
+110%
rowset_1000
22,988
-52%
47,459
214,949
+353%
98,509
+108%
rowset_distinct_1000
25,993
-56%
59,447
214,949
+262%
98,509
+66%
packed_1k
7
-100%
5,495
11,789
+115%
2,619
-52%
packed_10k
7
-100%
59,495
137,790
+132%
29,619
-50%
packed_rand_10k
29,826
-62%
78,389
157,762
+101%
48,637
-38%
deep_50
425
+1%
419
1,512
+261%
457
+9%
dto_100
5,186
-27%
7,083
28,190
+298%
14,909
+110%
dto_1000
53,787
-27%
73,372
285,891
+290%
152,725
+108%
dto_mixed
14,214
-34%
21,644
85,395
+295%
46,433
+115%

ENCODEns / op; lower is better

shape phpser igbinary * serialize msgpack
rowset_100
9.9k ±24
-45%
18.0k ±32
64.2k ±900
+256%
39.6k ±37
+120%
rowset_1000
99.6k ±177
-61%
254.6k ±372
701.2k ±1.2k
+175%
403.3k ±292
+58%
rowset_distinct_1000
120.6k ±219
-63%
327.9k ±505
702.4k ±5.8k
+114%
410.9k ±494
+25%
packed_1k
1.5k ±9
-84%
9.6k ±11
23.4k ±54
+144%
12.6k ±50
+32%
packed_10k
14.3k ±22
-85%
93.1k ±34
245.3k ±83
+163%
127.8k ±180
+37%
packed_rand_10k
71.0k ±46
-32%
104.5k ±39
293.5k ±125
+181%
133.7k ±98
+28%
deep_50
1.9k ±12
-28%
2.7k ±20
3.2k ±9
+17%
6.6k ±16
+144%
dto_100
22.7k ±67
-19%
28.2k ±84
37.9k ±38
+34%
47.6k ±44
+69%
dto_1000
249.9k ±668
-20%
311.6k ±895
387.8k ±543
+24%
506.8k ±1.1k
+63%
dto_mixed
82.9k ±187
-23%
107.5k ±635
213.3k ±671
+99%
164.9k ±293
+53%

DECODEns / op; lower is better

shape phpser igbinary * serialize msgpack
rowset_100
9.3k ±15
-56%
21.1k ±47
68.6k ±95
+225%
67.3k ±135
+219%
rowset_1000
100.4k ±123
-52%
209.2k ±217
721.1k ±1.1k
+245%
696.8k ±7.8k
+233%
rowset_distinct_1000
142.1k ±301
-52%
294.3k ±471
743.5k ±1.6k
+153%
728.2k ±6.2k
+147%
packed_1k
1.4k ±4
-91%
15.7k ±15
37.0k ±71
+135%
17.8k ±17
+13%
packed_10k
12.6k ±15
-92%
154.0k ±421
398.5k ±1.9k
+159%
178.3k ±118
+16%
packed_rand_10k
39.7k ±26
-77%
173.6k ±97
434.6k ±1.4k
+150%
185.4k ±184
+7%
deep_50
2.7k ±17
-24%
3.5k ±20
6.0k ±11
+71%
7.4k ±8
+108%
dto_100
21.5k ±30
-61%
54.9k ±111
126.9k ±294
+131%
156.3k ±411
+184%
dto_1000
215.0k ±154
-65%
606.7k ±1.4k
1600.4k ±2.8k
+164%
1641.6k ±1.3k
+171%
dto_mixed
81.4k ±96
-64%
227.1k ±334
527.1k ±1.4k
+132%
566.0k ±1.1k
+149%