loopwerk/bonsai
An HTML minifier in pure Swift.
Usage
Include Bonsai in your Package.swift:
let package = Package(
dependencies: [
.package(url: "https://github.com/loopwerk/Bonsai", from: "1.0.0"),
],
targets: [
.target(
name: "MyProject",
dependencies: ["Bonsai"]),
]
)Using it is a simple import and function call:
import Bonsai
let result = Bonsai.minifyHTML("<html>")There are no options or settings to configure.
Performance
Benchmarked on a ~143 KB HTML page (1000 iterations, release build), using a M1 Max Macbook Pro:
| Tool | Avg time per operation | Throughput | |---|---|---| | html-minifier (Node.js) | 12.1 ms | 83 ops/sec | | html-minifier-terser (Node.js) | 14.3 ms | 70 ops/sec | | html-minifier-next (Node.js) | 0.6 ms | 1,817 ops/sec | | Bonsai (Swift) | 0.9 ms | 1,149 ops/sec |
The speed difference between Bonsai and html-minifier-next only becomes noticeable at scale; for individual pages, both finish under a millisecond.
To run the benchmark yourself:
# Swift (release mode)
swift run -c release BonsaiBenchmarkPackage Metadata
Repository: loopwerk/bonsai
Default branch: main
README: README.md