| # 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 |