Skip to content

Linux (x86-64) CLI tool to encode static assets with Gzip and Brotli.

License

Notifications You must be signed in to change notification settings

Blobfolio/channelz

Repository files navigation

ChannelZ

ci deps.rs
license contributions welcome

ChannelZ is a CLI tool for x86-64 Linux machines that simplifies the common task of encoding static web assets with Gzip and Brotli for production environments.

Features

  • gzip and brotli are compiled into channelz; their binaries do not need to be separately installed;
  • The maximum compression settings are applied; the end results will often be smaller than running native gzip or brotli thanks to various optimizations;
  • It can be set against one or many files, one or many directories;
  • Paths can be specified as trailing command arguments, and/or loaded via text file (with one path per line) with the -l option;
  • Directory processing is recursive;
  • Processing is done in parallel with multiple threads for major speedups;
  • Appropriate file types are automatically targeted; no thinking involved!

The "appropriate" file types are:

  • appcache
  • atom
  • bmp
  • css
  • csv
  • doc(x)
  • eot
  • geojson
  • htc
  • htm(l)
  • ico
  • ics
  • js
  • json
  • jsonld
  • (web)manifest
  • md
  • mjs
  • otf
  • pdf
  • rdf
  • rss
  • svg
  • ttf
  • txt
  • vcard
  • vcs
  • vtt
  • wasm
  • xhtm(l)
  • xls(x)
  • xml
  • xsl
  • y(a)ml

Installation

Debian and Ubuntu users can just grab the pre-built .deb package from the latest release.

This application is written in Rust and can alternatively be built from source using Cargo:

# Clone the source.
git clone https://github.com/Blobfolio/channelz.git

# Go to it.
cd channelz

# Build as usual. Specify additional flags as desired.
cargo build \
    --bin channelz \
    --release

(This should work under other 64-bit Unix environments too, like MacOS.)

Usage

It's easy. Just run channelz [FLAGS] [OPTIONS] <PATH(S)>….

The following flags and options are available:

Short Long Value Description
--clean Remove all existing *.br *.gz files before starting.
--clean-only Same as --clean, but exit immediately afterward.
--force Try to encode all files regardless of file extension, except those already ending in .br/.gz.
-h --help Print help information and exit.
-l --list <FILE> Read (absolute) file and/or directory paths to compress from this text file — or STDIN if "-" — one entry per line, instead of or in addition to <PATH(S)>.
--no-br Skip Brotli encoding.
--no-gz Skip Gzip encoding.
-p --progress Show progress bar while minifying.
-V --version Print program version and exit.

For example:

# Generate app.js.gz and app.js.br:
channelz /path/to/app.js

# Tackle a whole folder at once with a nice progress bar:
channelz -p /path/to/assets

# Do the same thing, but clear out any old *.gz or *.br files first:
channelz --clean -p /path/to/assets

# Or load it up with a lot of places separately:
channelz /path/to/css /path/to/js …

Benchmarks

These benchmarks were performed on a Intel® Core™ i7-10610U with four discrete cores, averaging 100 runs.

Test:  ChannelZ Documentation
Files: 35/47
Size:  226,456 bytes (encodable)
Program Time (ms) GZ (b) BR (b)
ChannelZ 1,050 66,394 55,099
Find + Gzip + Brotli 3,212 68,946 55,246
Test:  WordPress Core
Files: 815/1,980
Size:  43,988,358 bytes (encodable)
Program Time (s) GZ (b) BR (b)
ChannelZ 10.5045 7,539,948 6,522,810
Find + Gzip + Brotli 43.9917 7,856,120 6,557,240

About

Linux (x86-64) CLI tool to encode static assets with Gzip and Brotli.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published