npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@bytedance/tar-wasm

v0.1.7

Published

An experimental wasm-based tar implementation for browsers.

Downloads

134

Readme

@bytedance/tar-wasm

A faster* experimental wasm-based tar implementation for browsers and Node.js.

*50-160x faster, see benchmarks below.

Usage

Install

npm install @bytedance/tar-wasm

Example

import { TarBuilder } from "@bytedance/tar-wasm";

// Create a new tar builder
const tarBuilder = new TarBuilder();

// Optionally enable gzip compression
// tarBuilder.set_gzip(true);
// However, I recommend using the Compression Streams API instead when possible:
// https://developer.mozilla.org/en-US/docs/Web/API/Compression_Streams_API

for (const file of files) {
  // Add files to the tar
  tarBuilder.add_file(file.name, file.content);
}

// Finish building the tar and get the result
const tar: UInt8Array = tarBuilder.finish();

// Optionally convert the tar to a Blob or whatever
const tarBlob = new Blob([tar], { type: "application/x-tar" });

Performance Notes

This library is optimized for performance via WebAssembly. However, WebAssembly runs in the main thread by default and can be computationally expensive by nature depending on the size of the tar.

We recommend using Web Worker or Worker Threads to run the tar building in a separate thread. You may want to refer to Greenlet for a lightweight implementation.

Benchmarks

According to my benchmark, it can be 50-160x faster than existing JavaScript implementations on NPM, depending on the browser and the file size.

Results on my machine (Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz):

Running benchmark...
Generated 1001 random files to test in 191.13816452026367ms
@bytedance/tar-wasm: 24.62919044494629ms (baseline)
tar-js: 3943.49857711792ms (160.11482740095886x slower than @bytedance/tar-wasm)
tarts: 1251.595199584961ms (50.817553357373065x slower than @bytedance/tar-wasm)

See ./examples/nodejs-benchmark folder for more details.

TODO

  • [ ] Include a Promise API working from a separate worker thread.
  • [ ] Add support for reading and writing tar files.
  • [x] Support of Node.js environment
  • [x] Tests
  • [x] Benchmarks