@vlasky/quoted-printable
Version:
Fast, robust RFC 2045 (Quoted-Printable) and RFC 2047 (Q-Encoding) encoder/decoder for Buffers in pure Javascript with an optional C++ binding. A fork of @ronomon/quoted-printable that supports Node.js 8+.
127 lines (100 loc) • 4.08 kB
Markdown
# quoted-printable
Fast, robust RFC 2045 (Quoted-Printable) and RFC 2047 (Q-Encoding) encoder/decoder for Buffers in pure Javascript with an optional C++ binding. Avoids intermediary string allocations and regular expressions. Reduces branching through the use of lookup tables. This is a fork of [@ronomon/quoted-printable](https://github.com/ronomon/quoted-printable/) that supports Node.js 8+.
## Requirements
- Node.js 8 or higher
## Installation
#### Linux, OS X
This will compile the native binding automatically:
```
npm install @vlasky/quoted-printable
```
#### Windows
This will skip compiling the native binding automatically:
```
npm install --ignore-scripts @vlasky/quoted-printable
```
## Performance
```
CPU: Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz
Cores: 8
Threads: 1
============================================================
Encode: 32768 x 32 Bytes
Javascript: Latency: 0.003ms Throughput: 8.59 MB/s
Native: Latency: 0.003ms Throughput: 10.81 MB/s
Encode: 8192 x 128 Bytes
Javascript: Latency: 0.006ms Throughput: 19.42 MB/s
Native: Latency: 0.003ms Throughput: 33.83 MB/s
Encode: 2048 x 512 Bytes
Javascript: Latency: 0.017ms Throughput: 28.34 MB/s
Native: Latency: 0.008ms Throughput: 58.25 MB/s
Encode: 512 x 2048 Bytes
Javascript: Latency: 0.063ms Throughput: 31.78 MB/s
Native: Latency: 0.025ms Throughput: 80.66 MB/s
Encode: 128 x 8192 Bytes
Javascript: Latency: 0.244ms Throughput: 33.83 MB/s
Native: Latency: 0.091ms Throughput: 95.33 MB/s
Encode: 32 x 32768 Bytes
Javascript: Latency: 0.970ms Throughput: 33.83 MB/s
Native: Latency: 0.352ms Throughput: 95.33 MB/s
============================================================
Decode: 32768 x 32 Bytes
Javascript: Latency: 0.003ms Throughput: 19.89 MB/s
Native: Latency: 0.002ms Throughput: 25.34 MB/s
Decode: 8192 x 128 Bytes
Javascript: Latency: 0.005ms Throughput: 61.42 MB/s
Native: Latency: 0.003ms Throughput: 90.99 MB/s
Decode: 2048 x 512 Bytes
Javascript: Latency: 0.011ms Throughput: 107.33 MB/s
Native: Latency: 0.005ms Throughput: 205.72 MB/s
Decode: 512 x 2048 Bytes
Javascript: Latency: 0.037ms Throughput: 129.93 MB/s
Native: Latency: 0.015ms Throughput: 308.59 MB/s
Decode: 128 x 8192 Bytes
Javascript: Latency: 0.148ms Throughput: 130.03 MB/s
Native: Latency: 0.054ms Throughput: 352.93 MB/s
Decode: 32 x 32768 Bytes
Javascript: Latency: 0.575ms Throughput: 137.31 MB/s
Native: Latency: 0.210ms Throughput: 353.07 MB/s
```
## Native Binding (Optional)
The native binding will be installed automatically when installing `@vlasky/quoted-printable` without the `--ignore-scripts` argument. The Javascript binding will be used if the native binding could not be compiled or is not available. To compile the native binding manually after installing, install [node-gyp](https://www.npmjs.com/package/node-gyp) globally:
```
sudo npm install node-gyp -g
```
Then build the binding from within the `@vlasky/quoted-printable` module directory:
```
cd node_modules/@vlasky/quoted-printable
node-gyp rebuild
```
## Usage
#### Encoding
```javascript
var QuotedPrintable = require('@vlasky/quoted-printable');
var string = ' = ';
var options = { qEncoding: false };
var buffer = Buffer.from(string, 'utf-8');
var bufferEncoded = QuotedPrintable.encode(buffer, options);
console.log(bufferEncoded.toString('ascii'));
// " =3D=20"
```
#### Decoding
```javascript
var QuotedPrintable = require('@vlasky/quoted-printable');
var string = ' =3D=20';
var options = { qEncoding: false };
var bufferEncoded = Buffer.from(string, 'ascii');
var buffer = QuotedPrintable.decode(bufferEncoded, options);
console.log(buffer.toString('utf-8'));
// " = "
```
## Tests
To test the native and Javascript bindings:
```
node test.js
```
## Benchmark
To benchmark the native and Javascript bindings:
```
node benchmark.js
```