FuelBanchmarks
Fuel also has a benchmark suite. Since StOMP does not support platform-specific objects like BlockClosure, CompiledMethods, etc., we were not able to run all benchmarks. Basic samples were tested as below:
bench := FLBenchmarks new
samples: (FLBenchmarkSample basicSamples);
runners: {FLStompBenchmarkRunner new. FLFuelBenchmarkRunner new};
useMemoryStream;
yourself.
bench run.
On Pharo 1.2.1:
FuelBench
Serializes: StOMP and Fuel 1.4.
OS: Windows 7 professional 32bit, CPU: Core i5 M560, RAM: 4GB
Stomp Serialization sample: completeBinaryTree size: 1 ms: 6104
Stomp Materialization sample: completeBinaryTree size: 1 ms: 5975
Stomp Serialization sample: strings size: 65536 ms: 320
Stomp Materialization sample: strings size: 65536 ms: 383
Stomp Serialization sample: smallIntegers size: 131072 ms: 802
Stomp Materialization sample: smallIntegers size: 131072 ms: 465
Stomp Serialization sample: floats size: 65536 ms: 565
Stomp Materialization sample: floats size: 65536 ms: 397
Stomp Serialization sample: pairs size: 32768 ms: 1190
Stomp Materialization sample: pairs size: 32768 ms: 959
Stomp Serialization sample: points size: 32768 ms: 907
Stomp Materialization sample: points size: 32768 ms: 664
Stomp Serialization sample: rectangles size: 16384 ms: 585
Stomp Materialization sample: rectangles size: 16384 ms: 415
Stomp Serialization sample: byteArrays size: 65536 ms: 997
Stomp Materialization sample: byteArrays size: 65536 ms: 445
Stomp Serialization sample: wideStrings size: 1000 ms: 2116
Stomp Materialization sample: wideStrings size: 1000 ms: 5397
Fuel Serialization sample: completeBinaryTree size: 1 ms: 10538
Fuel Materialization sample: completeBinaryTree size: 1 ms: 890
Fuel Serialization sample: strings size: 65536 ms: 1831
Fuel Materialization sample: strings size: 65536 ms: 192
Fuel Serialization sample: smallIntegers size: 131072 ms: 5609
Fuel Materialization sample: smallIntegers size: 131072 ms: 311
Fuel Serialization sample: floats size: 65536 ms: 1875
Fuel Materialization sample: floats size: 65536 ms: 277
Fuel Serialization sample: pairs size: 32768 ms: 2407
Fuel Materialization sample: pairs size: 32768 ms: 218
Fuel Serialization sample: points size: 32768 ms: 2060
Fuel Materialization sample: points size: 32768 ms: 177
Fuel Serialization sample: rectangles size: 16384 ms: 3433
Fuel Materialization sample: rectangles size: 16384 ms: 278
Fuel Serialization sample: byteArrays size: 65536 ms: 1888
Fuel Materialization sample: byteArrays size: 65536 ms: 198
Fuel Serialization sample: wideStrings size: 1000 ms: 2944
Fuel Materialization sample: wideStrings size: 1000 ms: 119
As you can see, Fuel's materialization(deserialization) speed is superb. Fuel uses an optimized format for speeding up deserialization. On the other hand, StOMP materialization speed is high because it uses simple one-pass recursion.
There is no one-size-fit-all serializer. If your application often read big object data, I can recommend Fuel. If you are conscious about interoperability, and your application reads/writes small/medium sized objects frequently, StOMP can be used.