4 ms·
> Parsers have become so fast that I feel they might even have the opportunity to be faster than a protobuf based solution. Not even close. Event new JSON seri
by maltalex 7y ago
> Parsers have become so fast that I feel they might even have the opportunity to be faster than a protobuf based solution.
Not even close. Event new JSON serializers/deserializers aren't magic. Protobuf is a LOT easier to parse, so it's naturally a LOT faster.
First two duck results for "json vs protobuf benchmark":
https://auth0.com/blog/beating-json-performance-with-protobuf/ https://auth0.com/blog/beating-json-performance-with-protobu...
https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers-a4247f8bda6f https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers...
- ricardobeat 7y agoThe first link shows a mere 4% margin when talking to a JavaScript VM. Even at a 5x improvement, most projects will never reach a point where the transport encoding is a bottleneck. Protobuf has a lot going for it (currently using in a project) but can’t be sold on speed alone.
- denormalfloat 7y agoIs the JSON parser implemented natively, or in JS? It may not be apples-to-apples.
- connor4312 7y agoYea, the V8 json parser is implemented naively and optimized alongside the engine in a way that other serialization methods in Javascript, and JSON in other languages, is generally not.
- fanf2 7y agoMy guess would be that most of the cost is creating the JS objects and the parsing is a relatively small part of the cost, so optimizing it would not help much.
- scottlamb 7y ago> Is the JSON parser implemented natively, or in JS? It may not be apples-to-apples. True, but if you're wanting an implementation you can use in Javascript running in the browser, it may accurately reflect reality. You have a high-quality browser-supplied (presumably native) implementation of JSON available. For a protobuf parser, you've just got Javascript. (You can call into webassembly, but given that afaik it can't produce Javascript objects on its own, it's not clear to me there's any advantage in doing so unless you're moving the calling code into webassembly also.) I don't think browser-based parsing speed is important though. It's probably not a major contributor to display/interaction latency, energy use, or any other metric you care about. If it is, maybe you're wasting bandwidth by sending a bunch of data that's discarded immediately after parsing.