27. 5. 2008

Komprimace JavaScriptu a CSS

Uvolňujeme do open source nástroj pro komprimaci postavený na gramatice jazyka.

Jak si mnozí z vás jistě všimli, veškeré zdrojové soubory obsahující JavaScript a kaskádové styly máme na našich službách v komprimované podobě. Tedy bez zbytečných bílých znaků, konců řádků a komentářů. Také naše Javascriptová knihovna JAK je uvolněna i v komprimované formě. Nyní chceme uvolnit jako OpenSource i nástroj, kterým tuto komprimaci děláme.

Na komprimaci se v historii seznamu používalo několik různých interních nástrojů, ale každý měl nějaké problémy, díky nimž bylo nutno si dávat velký pozor na výsledek komprimace. Chyby se však v komprimované verzi hledají těžko.

Během několika obědů strávených s kodéry, jsem se v rámci tučňákových dnů rozhodl, že vyzkouším napsat nový komprimátor JavaScriptu postavený na gramatice jazyka. Tak aby komprimátor parsoval jazyk jak se má a nědelal chyby. Po chvíli hledání a několika pokusech jsem nakonec použil knihovnu KHTML a vytáhl z ní potřebné kusy. Za pomocí několika málo úprav vznikla první implementace již funkčního komprimátoru. No a protože jsem měl v ruce jednoduchý kód,  nedalo mi to a vyzkoušel jsem si udělat i obfuskaci. Jedná se sice jen o pokus, ale třeba to někdo použije :).

Původní kód komprimátor pro kaskádové styly napsal náš produktový ředitel Chosé, když se chtěl seznámit s Céčkem. Jak to dopadlo se můžete všichni podívat :). Protože u komprimace kaskádových stylů je potřeba myslet na podporu různých háčků, tento komprimátor zachovává všechny komentáře a další věci. Vynechávají se pouze přesně specifikované komentáře (viz. manuál).

Protože jsme chtěli oba komprimátory mít pohromadě, tak jsme je dali do jednoho balíčku a udělali jsme pro ně jednotné rozhraní a už je vesele používáme. Kód je napsán v C/C++ a najdete ho včetně binárních balíčků pro debian na kjscompress.sourceforge.net.

'Michal
Michal