JSPM

cirbuf

1.0.2
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 421
    • Score
      100M100P100Q91185F
    • License MIT

    A tiny and fast circular buffer

    Package Exports

    • cirbuf
    • cirbuf/dist/index.js

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (cirbuf) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    cirbuf

    A tiny and fast circular buffer

    • Minimal API
    • Tiny size fit for the browser
    • Fast

    Install

    npm install --save cirbuf

    Usage

    // Import CircularBuffer
    import { CircularBuffer } from "cirbuf"
    
    // Create a buffer with a capacity of 10,000
    let buffer = new CircularBuffer(10_000)
    
    // Push 100,000 items
    for (let i = 0; i < 100_000; i++) {
        buffer.push(i)
    }
    
    // Get the last 10,000 items as an array
    let result = buffer.toArray()
    // Note: `toArray` does not drain the buffer.

    Perf

    Testing in comparison to a similar array implementation with Array#push and Array#shift:

    array.push(i)
    if (array.length > max) {
        array.shift()
    }
    # 100_000 iterations, max size 10_000
    ./benchmarks/array.js:      367.8 ops/sec (±2.5, p=0.001, o=5/100) severe outliers=3
    ./benchmarks/cirbuf.js:     5’984.3 ops/sec (±31.6, p=0.001, o=7/100) severe outliers=5
    
    # 10_000_000 iterations, max size 1_000_000
    ./benchmarks/cirbuf-big.js: 47.7 ops/sec (±1.1, p=0.001, o=2/100)

    Note: Attempting to iterate 10,000,000 items in a 1,000,000 item array runs way too long, so I gave up benchmarking it