JavaScript Data Buffer

Written 3 years and 9 months ago

Buffers are typically used when processing data is slower than the rate at which it is received.

Not to be confused with…

Node.js implements a Buffer for the purpose of working with binary streams.

JavaScript implements an ArrayBuffer which is a fixed size raw binary data buffer to be used with typed arrays.

My DataBuffer

class DataBuffer extends EventEmitter {
    constructor (options={}) {
        super();
        const {
            size = 10,
        } = options;
        this.buffer = [];
        this.size = size;
    }

    insert(data) {
        this.buffer.push(data);
        if (this.buffer.length >= this.size) {
            this.flush();
        }
    }

    flush() {
        const result = this.buffer;
        this.emit('flush', result)
        this.buffer = [];
        return result;
    }
}

Usage

const dataBuffer = new DataBuffer({ size: 5 });
dataBuffer.on('flush', console.log);

dataBuffer.insert('one');
dataBuffer.insert('two');
dataBuffer.insert('three');
dataBuffer.insert('four');
dataBuffer.insert('five');
// 'flush' is emitted with ['one', 'two', 'three', 'four', 'five']

dataBuffer.insert('six');
dataBuffer.insert('seven');
dataBuffer.flush();
// => ['six', 'seven']
// 'flush' is emitted with ['six', 'seven']