bpezip: Komprese krátkých řetězců v JavaScriptu

16. 5. 2025 18:36 (aktualizováno) Tomas Matějíček

Pokud jste někdy chtěli komprimovat textová data přímo v prohlížeči nebo optimalizovat přenos krátkých řetězců v aplikaci, je tu pro vás lehká knihovna: bpezip.

Je napsaná v čistém JavaScriptu, bez závislostí, a kombinuje několik efektivních technik:

  • Byte Pair Encoding (BPE) – efektivní tokenizace podslov pro kompresi textu,

  • Bit-packing / Frame-of-reference – ultraúsporné kódování čísel,

  • Varint kódování – variabilní délka celých čísel pro token streamy.

Proč vznikl bpezip?

Typické kompresní algoritmy jako Gzip nebo Brotli jsou navrženy pro velké datové toky. Ale co když potřebujete komprimovat stovky malých řetězců, jako jsou textové popisky, nebo adresy (poštovní či URL adresy)?

bpezip je řešení pro tyto případy, které:

  • funguje přímo v prohlížeči,

  • nevyžaduje žádné binárky ani knihovny,

  • umožňuje trénink modelu na vlastních textech,

  • podporuje načtení různých slovníků (např. podle jazykového kódu jako "cz", "de""fr" …).

Trénování připravené jako součást zdrojových kódů proběhlo na databázi názvů ulic z více jak 110 zemí světa, a každá země má svých max 16 000 tokenů pro kompresi.

Defaultní nastavení obsahuje všechny jazykové moduly, a z toho důvodu má knihovna necelé 3MB. Jednoduše je však možné v textovém editoru vymazat jazyky které nepotřebujete (úplně na konci .js souboru), takže například při zachování jen amerických a českých modulů se snadno dostanete pod 128KB.

Příklady komprese jsou uvedeny níže

Unpacked: 47B Packed: 25B Compression: 53% Emily Watson, 47 Wattle Crescent, 2602 Ainslie
Unpacked: 59B Packed: 46B Compression: 77% 蒋青莲, 云岩区燕雀巷17号碧霄楼, 550002 贵阳
Unpacked: 47B Packed: 28B Compression: 59% Rigmor Kjeldsen, Møllestien 14, 8000 Aarhus C
Unpacked: 75B Packed: 41B Compression: 54% عائشة محروس, زقاق المدابغ ٣, ١١٦٢٢ الجيزة
Unpacked: 48B Packed: 30B Compression: 62% Unto Kuusisto, Paimenenpolku 7 A 4, 66950 Jurva
Unpacked: 77B Packed: 36B Compression: 46% Léontine Perrault, 4 Impasse des Rossignols, 17110 Saint-Georges-de-Didonne
Unpacked: 52B Packed: 29B Compression: 55% Ulrich Wiesengrund, Finkenrain 9, 79199 Kirchzarten
Unpacked: 44B Packed: 26B Compression: 59% Zsombor Holló, Rákóczi-rét 3, 3300 Eger
Unpacked: 51B Packed: 35B Compression: 68% Helga Skaptadóttir, Ránargata 14, 101 Reykjavík
Unpacked: 108B Packed: 69B Compression: 63% र ुक ्म िण ी च ौह ान, 12 खज ूर म ार ्ग, 305001 अजम ेर
Unpacked: 51B Packed: 33B Compression: 64% Ratna Pramudita, Gg. Sedap Malam 4, 80235 Denpasar
Unpacked: 76B Packed: 43B Compression: 56% 水野 ちとせ, 京都市左京区鹿ケ谷桜谷町25-7, 606-8443 京都
Unpacked: 65B Packed: 45B Compression: 69% زاہد حسین, گلی برسات ۵۲, ۵۴۰۰۰ لاہور
Unpacked: 58B Packed: 35B Compression: 60% Maite Cifuentes, Calle Camarones 6234, C1419 Buenos Aires
Unpacked: 48B Packed: 26B Compression: 54% Wouter Baks, Noorderdwarsstraat 2, 3513 Utrecht
Unpacked: 58B Packed: 36B Compression: 62% Tomáš Konečný, Lesní 14, 739 81 Bystřice nad Olší
Knihovna bpezip nabízí jednoduchý a efektivní způsob, jak komprimovat krátké texty přímo v prohlížeči – bez složitých závislostí nebo serverových operací. Díky podpoře více jazyků a snadné přizpůsobitelnosti je ideální volbou pro aplikace vyžadující úsporné ukládání řetězců.
Vyzkoušejte si bpezip ve svém projektu a dejte vědět, jaké výsledky jste dosáhli – jakékoli připomínky nebo nápady na vylepšení jsou vítány!

Sdílet