Benchmark

 avatar
unknown
javascript
5 months ago
1.2 kB
6
Indexable
const protobuf = require("protobufjs");
const { performance } = require('perf_hooks');

const root = protobuf.Root.fromJSON({
  nested: {
    EventData: {
      fields: {
        evt: { type: "string", id: 1 },
        timestamp: { type: "int64", id: 2 }
      }
    }
  }
});
const EventData = root.lookupType("EventData");

const jsonPayload = JSON.stringify({ evt: "click", timestamp: 29310392031 });
const stringPayload = "click|29310392031";
const protobufPayload = EventData.encode(EventData.create({ evt: "click", timestamp: 29310392031 })).finish();

function parseJSON(data) {
  return JSON.parse(data);
}

function parseString(data) {
  const [evt, timestamp] = data.split("|");
  return { evt, timestamp: Number(timestamp) };
}

function parseProtobuf(data) {
  return EventData.decode(data);
}

const iterations = 1_000_000;
console.time("JSON Parse");
for (let i = 0; i < iterations; i++) {
  parseJSON(jsonPayload);
}
console.timeEnd("JSON Parse");

console.time("String Split");
for (let i = 0; i < iterations; i++) {
  parseString(stringPayload);
}
console.timeEnd("String Split");

console.time("Protobuf Decode");
for (let i = 0; i < iterations; i++) {
  parseProtobuf(protobufPayload);
}
console.timeEnd("Protobuf Decode");
Editor is loading...
Leave a Comment