# fast-fifo A fast fifo implementation similar to the one powering nextTick in Node.js core ``` npm install fast-fifo ``` Uses a linked list of growing fixed sized arrays to implement the FIFO to avoid allocating a wrapper object for each item. ## Usage ``` js const FIFO = require('fast-fifo') const q = new FIFO() q.push('hello') q.push('world') q.shift() // returns hello q.shift() // returns world ``` ## API #### `q = new FIFO()` Create a new FIFO. #### `q.push(value)` Push a value to the FIFO. `value` can be anything other than undefined. #### `value = q.shift()` Return the oldest value from the FIFO. #### `q.clear()` Remove all values from the FIFO. #### `bool = q.isEmpty()` Returns `true` if the FIFO is empty and false otherwise. #### `value = q.peek()` Return the oldest value from the FIFO without shifting it out. #### `len = q.length` Get the number of entries remaining in the FIFO. ## Benchmarks Included in bench.js is a simple benchmark that benchmarks this against a simple linked list based FIFO. On my machine the benchmark looks like this: ``` fifo bulk push and shift: 2881.508ms fifo individual push and shift: 3248.437ms fast-fifo bulk push and shift: 1606.972ms fast-fifo individual push and shift: 1328.064ms fifo bulk push and shift: 3266.902ms fifo individual push and shift: 3320.944ms fast-fifo bulk push and shift: 1858.307ms fast-fifo individual push and shift: 1516.983ms ``` YMMV ## License MIT