mirror of
https://github.com/0x5eal/rbxts-pako.git
synced 2025-04-11 06:10:57 +01:00
103 lines
2.4 KiB
Markdown
103 lines
2.4 KiB
Markdown
pako - zlib port to javascript, very fast!
|
|
==========================================
|
|
|
|
[](https://travis-ci.org/nodeca/pako)
|
|
|
|
__Why pako is cool:__
|
|
|
|
- Almost as fast in modern JS engines as C implementation (see benchmarks).
|
|
- Works in browsers, you can browserify any separate component.
|
|
- Both Sync & streamable (for big blobs) interfaces.
|
|
- It's fresh - ports the latest zlib version (now 1.2.8), results are binary equal.
|
|
|
|
This project was done to understand how fast JS can be and is it necessary to
|
|
develop native C modules for CPU-intensive tasks. Enjoy the result!
|
|
|
|
__Benchmarks:__
|
|
|
|
```
|
|
node v0.10, 10mb sample:
|
|
|
|
deflate-gildas x 4.62 ops/sec ±1.93% (15 runs sampled)
|
|
deflate-imaya x 3.82 ops/sec ±1.31% (13 runs sampled)
|
|
! deflate-pako x 9.09 ops/sec ±0.42% (26 runs sampled)
|
|
deflate-zlib x 14.16 ops/sec ±3.33% (63 runs sampled)
|
|
|
|
node v0.11, 10mb sample:
|
|
|
|
deflate-gildas x 5.10 ops/sec ±4.94% (16 runs sampled)
|
|
deflate-imaya x 3.42 ops/sec ±4.11% (12 runs sampled)
|
|
! deflate-pako x 11.28 ops/sec ±0.42% (32 runs sampled)
|
|
deflate-zlib x 14.17 ops/sec ±3.34% (64 runs sampled)
|
|
```
|
|
|
|
If you doubt, that zlib is slow because of marshalling, try benchmark with `level 0`.
|
|
You will see, that node bindings don't add noticeable slowdown.
|
|
|
|
__Install:__
|
|
|
|
node.js:
|
|
|
|
```
|
|
npm install pako
|
|
```
|
|
|
|
browser:
|
|
|
|
```
|
|
bower install pako
|
|
```
|
|
|
|
|
|
Example & API
|
|
-------------
|
|
|
|
[Full docs](http://nodeca.github.io/pako/).
|
|
|
|
```javascript
|
|
var pako = require('pako');
|
|
|
|
// Deflate
|
|
//
|
|
var input = new Uint8Array();
|
|
//... fill input data here
|
|
var output = pako.deflate(input);
|
|
|
|
// Inflate
|
|
//
|
|
var compressed = new Uint8Array();
|
|
//... fill data to uncompress here
|
|
var result = pako.inflate(compressed);
|
|
if (result.err) {
|
|
console.log(result.err, result.msg);
|
|
}
|
|
var uncompressed = result.data;
|
|
|
|
```
|
|
|
|
|
|
Notes
|
|
-----
|
|
|
|
Pako does not contains some very specific zlib functions.
|
|
|
|
- __deflate__ - writing bustom gzip headers and methods `deflateSetDictionary`,
|
|
`deflateParams`, `deflateSetHeader`, `deflateBound`, `deflatePending`.
|
|
- __inflate__ - TBD.
|
|
|
|
|
|
Authors
|
|
-------
|
|
|
|
- Andrey Tupitsin [@anrd83](https://github.com/andr83)
|
|
- Vitaly Puzrin [@puzrin](https://github.com/puzrin)
|
|
|
|
Personal thanks to Vyacheslav Egorov ([@mraleph](https://github.com/mraleph))
|
|
for his awesome tutoruals about optimising JS code for v8,
|
|
[IRHydra](http://mrale.ph/irhydra/) tool and his advices.
|
|
|
|
|
|
License
|
|
-------
|
|
|
|
MIT
|