Komprimované JS a CSS v distribuci?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8227
+
0
-

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
+
0
-

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
+
0
-

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.