Extremely fast utf8 only stream implementation
Extremely fast utf8-only stream implementation to write to files and file descriptors.
This implementation is partial, but support backpressure and
.pipe()in is here. However, it is 2-3x faster than Node Core
fs.createWriteStream():
benchSonic*1000: 1916.904ms benchSonicSync*1000: 8605.265ms benchSonic4k*1000: 1965.231ms benchSonicSync4k*1000: 1588.224ms benchCore*1000: 5851.959ms benchConsole*1000: 7605.713ms
Note that sync mode without buffering is slower than a Node Core WritableStream, however this mode matches the expected behavior of
console.log().
Note that if this is used to log to a windows terminal (
cmd.exeor powershell), it is needed to run
chcp 65001in the terminal to correctly display utf-8 characters, see chcp for more details.
npm i sonic-boom
'use strict'const SonicBoom = require('sonic-boom') const sonic = new SonicBoom({ fd: process.stdout.fd }) // or { dest: '/path/to/destination' }
for (let i = 0; i < 10; i++) { sonic.write('hello sonic\n') }
Creates a new instance of SonicBoom.
The options are:
fd: a file descriptor, something that is returned by
fs.openor
fs.openSync.
dest: a string that is a path to a file to be written to (mode
'a').
minLength: the minimum lenght of the internal buffer that is required to be full before flushing.
sync: perform writes synchronously (similar to
console.log).
For
sync:falsea
SonicBoominstance will emit the
'ready'event when a file descriptor is available. For
sync:truethis is not relevant because the
'ready'event will be fired when the
SonicBoominstance is created, before it can be subscribed to.
Writes the string to the file. It will return false to signal the producer to slow down.
Writes the current buffer to the file if a write was not in progress. Do nothing if
minLengthis zero or if it is already writing.
Reopen the file in place, useful for log rotation.
Example:
const stream = new SonicBoom('./my.log') process.on('SIGUSR2', function () { stream.reopen() })
Flushes the buffered data synchronously. This is a costly operation.
Closes the stream, the data will be flushed down asynchronously
Closes the stream immediately, the data is not flushed.
MIT