paroga / cbor-js

The Concise Binary Object Representation (CBOR) data format (RFC7049) implemented in pure JavaScript.
MIT License
310 stars 51 forks source link

Optimize byte array encoding #23

Open mvollrath opened 6 years ago

mvollrath commented 6 years ago

Copy the entire byte array instead of iterating over one byte at a time. This makes CBOR much much faster at encoding messages with large binary blobs.

Benchmarking on this data, a ROS2 sensor_msgs/Image of 640x480 RGB:

var benchmarkData = {
  header: {
    stamp: {
      sec: 1,
      nanosec: 1e8
    },
    frame_id: ""
  },
  height: 480,
  width: 640,
  encoding: "RGB",
  is_bigendian: 0,
  step: 640,
  data: Uint8Array.from(Array.from({length: 640 * 480 * 3}, () => 128))
};

master

CBOR encode: 20.234ms

fast_byte_array_encoding

CBOR encode: 1.288ms

coveralls commented 6 years ago

Coverage Status

Coverage increased (+0.003%) to 99.265% when pulling 1a6de156903322c39734c613def5f19e00d1a934 on mvollrath:fast_byte_array_encoding into 65dc49611107db83aff8308a6b381f4d7933824b on paroga:master.