Komprimované JS a CSS v distribuci?
- David Grudl
- Nette Core | 8227
Zkusil jsem do poslední distribuce verze 1.0 (tj. nejen minified) dát všechny CSS a JS zkomprimované. Důvod? Chtěl bych, aby Debug Bar v kódu co nejméně překážel. Aby se nevyhodilo 1200 řádků, ale třeba jen 5.
Je samozřejmě potřeba „komprimovat“ i vygenerované HTML. Takže celý Bar vykreslit do bufferu, poté vypustit všechny zbytečné mezery a výsledek poslat na výstup. Vypustit mezery v HTML nebo CSS lze poměrně snadno, naopak v JS je to oříšek. Kupodivu kvůli jediné věci, špatně se rozezná dělení od regulárního výrazu:
neco / 20 / neco; // tohle je dělení
return / 20 / g; // tohle je regulární výraz
Tudíž JS chci komprimovat už v distribuci. A protože vývojář bude spíš používat plnou (ne minified) verzi, měl by JS být komprimovaný už v ní. Zároveň tam komprimuju i CSS.
Říkám si, že pokud někoho zajímá framework na úrovni vývoje, spíš si ho bude stahovat z GITu, takže by to nemuselo nikomu vadit, ale raději se ptám.
Ještě si pohrávám s myšlenkou plnit Debug Bar ajaxově, takže by se stahovala jen skořápka, ale je to možná blbost, realizace má hodně úskalí.
- Ondřej Mirtes
- Člen | 1536
Všiml jsem si toho a tuhle minifikaci v InstantClientScript.phtml jsem hned nahlásil, protože jsem myslel, že je to bug :o)
Konkrétně mi to znemožnilo ne až tak hezký workaround, který ovšem potřebuji :) Ale co, stáhnul jsem si z GitHubu „raw“ verzi toho souboru, upravil a hold ho nemám minifikovaný :)
Nebylo by ovšem vhodné minifikovat ty soubory až v nějakém compile-time (a umisťovat do cache)?
- jasir
- Člen | 746
Bug: mám jeden panel, který vypisuje poměrně hodně dat – jedná se
o strom komponent + zdrojové kódy. Vygenerovaný zdrojový kód má klidně
přes 100 KB. Po updatu na novou verzi, konkrétně v komitu
25e84956d
je minifikace panelu pomocí preg_replace_callback. Ta pro takto velký vstup
vrací NULL. K tomu php.net v jednom komentáří říká
preg_replace_callback returns NULL when pcre.backtrack_limit is reached; this sometimes occurs faster then you might expect. No error is raised either; so don't forget to check for NULL yourself
Co s tím nevím, zřejmě by to chtělo změnit kód minifikace. Nebo kontrolovat výsledek NULL a v tom případě minifikaci neprovádět.