GithubHelp home page GithubHelp logo

arkadiuszsz / zstd-codec Goto Github PK

View Code? Open in Web Editor NEW

This project forked from yoshihitoh/zstd-codec

0.0 1.0 0.0 2.76 MB

Zstandard codec for Node.js and Web, powered by Emscripten

License: MIT License

Shell 0.64% Lua 0.77% C++ 91.73% JavaScript 6.21% Python 0.65%

zstd-codec's Introduction

zstd-codec

Zstandard codec for Node.js and Web, powered by Emscripten.

Languages

Description

zstd-codec is a binding of Zstandard for Node.js and Browsers, includes JavaScript port of Zstandard compiled with Emscripten.

Installation

npm

npm install zstd-codec

yarn

yarn add zstd-codec

Usage

require module, and instantiate api objects.

const ZstdCodec = require('zsztd-codec').ZstdCodec;
const simple = new ZstdCodec.Simple();
const streaming = new ZstdCodec.Streaming();
  • Use Simple API for small data
  • Use Streaming API for large data

Simple API

  • Using Zstandard's Simple API
    • ZSTD_compress for compress
    • ZSTD_decompress for decompress
  • Store whole input/output bytes into Emscripten's heap
    • Available Emscripten's heap size is 16MiB
    • (input.length + output.length) should be less than 12MiB

compress(content_bytes, compression_level)

  • content_bytes: data to compress, must be Uint8Array.
  • compression_level: (optional) compression level, default value is 3
// prepare data to compress
const data = ...;

// compress
const level = 5;
const compressed = simple.compress(data, level);

// handle compressed data
do_something(compressed);

decompress(compressed_bytes)

  • compressed_bytes: data to decompress, must be Uint8Array.
// prepare compressed data
const compressed = ...;

// decompress
const data = simple.decompress(compressed);

// handle decompressed data
do_something(data);

Streaming APIs

  • Using Zstandard's Streaming API
    • ZSTD_xxxxCStream APIs for compress
    • ZSTD_xxxxDStream APIs for decompress
  • Store partial input/output bytes into Emscripten's heap
const streaming = new ZstdCodec.Streaming();

You can use custom Iterable object on compressChunks / decompressChunks.

compress(content_bytes, compression_level)

  • content_bytes: data to compress, must be 'Uint8Array'
  • compression_level: (optional) compression level, default value is 3
const compressed = streaming.compress(data); // use default compression_level 3

compressChunks(chunks, size_hint, compression_level)

  • chunks: data chunks to compress, must be Iterable of Uint8Array
  • size_hint: (optional) size hint to store compressed data (to improve performance)
  • compression_level: (optional) compression level, default value is 3
const chunks = [dataPart1, dataPart2, dataPart3, ...];
const size_hint = chunks.map((ar) => ar.length).reduce((p, c) => p + c);
const compressed = streaming.compressChunks(chunks, size_hint); // use default compression_level 3

decompress(compressed_bytes, size_hint)

  • compressed_bytes: data to decompress, must be Uint8Array.
  • size_hint: (optional) size hint to store decompressed data (to improve performance)
const data = streaming.decompress(data); // can omit size_hint

decompressChunks(chunks, size_hint)

  • chunks: data chunks to compress, must be Iterable of Uint8Array
  • size_hint: (optional) size hint to store compressed data (to improve performance)
const chunks = [dataPart1, dataPart2, dataPart3, ...];
const size_hint = 2 * 1024 * 1024; // 2MiB
const data = streaming.decompressChunks(chunks, size_hint);

Dictionary API

const zstd_codec = require('zstd-codec');

// compress using trained dictionary
const cdict = new zstd_codec.ZstdCompressionDict(dict_bytes, compression_level);
const compressed = simple.compressUsingDict(data, cdict);

// decompress using trained dictionary
const ddict = new zstd_codec.ZstdDecompressionDict(dict_bytes);
const data = simple.decompressUsingDict(compressed, ddict);

Example

Browser

See the document.

Node.js

TODO: add an example for Node.js.

TODO

  • add CI (Travis CI or Circle CI?)
  • improve APIs
  • write this document
  • add how to build zstd with Emsxcripten
  • add how to test
  • performance test
  • add more tests

zstd-codec's People

Contributors

yoshihitoh avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.