Nette minificator/compactator

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
DocX
Člen | 154
+
0
-

Diskuse k Nette Minifier

Podrobnosti a download v Nette/Extras/Nette-minifier


Ahoj,

protože jsem dělal pár úprav do vlastní kopie Nette a chtěl jsem ji „zabalit“ do minified verze a oficiální nástroj jsem nenašel, rozhodl jsem se udělat vlastní „minificator“. Musím samozřejmě zmínit, že jsem vycházel z ukázky na https://phpfashion.com/…-php-skripty . Mám ho zatím upraven přímo pro Nette, ale v podstatě jde jen o to, jak získat seznam souborů, jinak je víceméně univerzální ;) není to až tak úplně pravda ;)

Testováno na Nette 0.9 pro PHP 5.2 i pro PHP 5.3 :)

Enjoy ;)

Editoval DocX (21. 9. 2009 15:35)

sodae
Nette Evangelist | 250
+
0
-

Dobrá a pěkná práce ! Snad se David již pochlubí s oficiálním :)

Editoval sodae (18. 8. 2009 23:57)

Honza Kuchař
Člen | 1662
+
0
-

Do extras s tím! (do sekce Nástroje)

DocX
Člen | 154
+
0
-

honzakuchar napsal(a):

Do extras s tím! (do sekce Nástroje)

To je to skutečně tak dokonalé?

Ok v průběhu dneška to tam hodím ;) Už to tam je: Nette Minifier

BTW: Teď mi to došlo, nemělo by to být správně minifier než minificator? xD

Editoval DocX (20. 9. 2009 11:26)

ic
Člen | 430
+
0
-

Dělat nějaké úpravy přímo v nette musí být nevděčné když každý druhý den vychází nová verze ne?

DocX
Člen | 154
+
0
-

ic napsal(a):

Dělat nějaké úpravy přímo v nette musí být nevděčné když každý druhý den vychází nová verze ne?

No to vychází, ale moje úpravy v něm samozřejmě nejsou. Updaty ale provádím, zatím se o všechno postaral svn diff sám ;)

PS: Jinak jsem minifier dělal i z vlastní zvědavosti, jestli to dokáži :)

Editoval DocX (20. 8. 2009 19:45)

na1k
Člen | 288
+
0
-

Určitě raději „minifier“ :-)

(důkaz místo slibů)

Jinak práce pěkná, ale vhodná opravdu jen pro vás, co si Nette ohýbáte :-p

David Grudl
Nette Core | 8228
+
0
-

DocX napsal(a):

Mimochodem, nechi se chlubit, ale můj minificator generuje soubor o ~15kB menší než oficiální Davidova verze v balení Nette.

Zkus tam ještě přihodit šablony z adresáře Debug.templates ;)

Ale dobrá práce!

DocX
Člen | 154
+
0
-

David Grudl napsal(a):

Zkus tam ještě přihodit šablony z adresáře Debug.templates ;)

Ale dobrá práce!

No jo :) Toho jsem si nevšiml. Minified verzi používám jen v produkčním prostředí, kde se laděnka neukazuje. Každopádně zkusim se na to časem kouknout.

//EDIT: už vim jak na to :)

Editoval DocX (20. 8. 2009 21:56)

Honza Kuchař
Člen | 1662
+
0
-

DocX napsal(a):

honzakuchar napsal(a):

Do extras s tím! (do sekce Nástroje)

To je to skutečně tak dokonalé?

Nemusí to být dokonalé. (nic není dokonalé) Stačí když to bude fungovat a někdo se v tom vyzná. ;) Kdyby jsi to tady nechal, tak to tady na fóru asi za chvíli zapadne. A už to nikdo nenajde.

Blizzy
Člen | 149
+
0
-

Pár komentářů v kódu by neuškodilo. :)

btw. v extras nefunguje link na stažení.

DocX
Člen | 154
+
0
-

Blizzy napsal(a):
btw. v extras nefunguje link na stažení.

Už by to mělo jít ;)

Editoval DocX (21. 8. 2009 20:59)

DocX
Člen | 154
+
0
-

Po dlouhé době jsem se dostal znovu k Nette Minifieru. Opravil jsem jedinou známou chybu a vylepšil několik věcí:

  • zabaluje šablony pro Nette\Debug
  • celý kód jsem přepsal do třídy
  • ke kódu jsem připsal pár komentářů
  • jediná verze pro obě PHP 5.3 a 5.2 varianty Nette

Zkoušel jsem to teď na všech variantách Nette 0.9.1. Tu pro PHP 5.3 jsem zkusil v provozu i na několika vlastních aplikacích.

Stahovat můžete v extras


Jediné co nemohu vyzkoušet je jak skript funguje pod PHP 5.2 (mám totiž všude jen 5.3).

Mohl bych někoho poprosit, ať si stáhne zipy s nejnovějším Nette a zkusí je minifikovat a otestavat spuštěním v PHP? Díky.

Editoval DocX (19. 9. 2009 22:59)

DocX
Člen | 154
+
0
-

Najde se někdo kdo zkusí minify.php pod PHP 5.2? Díky

Editoval DocX (21. 9. 2009 13:31)

vlki
Člen | 218
+
0
-

Tak jsem to vyzkoušel pod PHP 5.2.9.

Log:

$> php minify.php [...]
Parsed files: 204
Minified version saved as loader.minified.php

$> php loader.minified.php

Fatal error: Cannot redeclare class ArgumentOutOfRangeException in loader.minified.php on line 430

Zmenšoval jsem revizi Nette 9668a2a pro PHP 5.2.

Minifikované Nette: loader.minified.php52.zip

DocX
Člen | 154
+
0
-

Díky za report. Tak jsem na to koukal a něco jsem upravil.

Nejdřív jsem myslel, že jsi na Windows, kde jsou lomítka v adrese opačně a hledal jsem, kde by to mohlo dělat problém. Tak jsem všude přidělal realpath (někde už byl). Ale pak jsem si všiml, že to co si napsal vypadá jako Linux shell :o) Nicméně chyba se jevila jako špatné rozpoznávání/ukládání již minifikovaných souborů (v Nette je celkem něco kolem 140).

Pak jsem zjistil, že si vlastně můžu PHP 5.2 zkompilovat a spustit bez instalace, takže jsem to mohl vyzkoušet. Nová verze funguje u mě v pořádku. Zkusil jsem původní (tu kterou jsi ty zkoušel) a ta u mě vygenerovala také správný kód. Tak nevím, kde pak byla chyba.

Přidělal jsem proto volbu --debug, která vypíše snad dostatek informací, aby se dalo zjistit kde je chyba. Tak jestli tě můžu ještě poprosit, aby jsi to zkusil s touto volbou (raději použij php minify.php ... > minify.log), pokud to tedy bude stále generovat špatný kód.

Editoval DocX (21. 9. 2009 0:28)

vlki
Člen | 218
+
0
-

Sice log vypadá jako shell, ale byla to command line win7. Jen jsem tak příkazy z konzole zvyklý psát ;)

Každopádně teď už minifikace dopadla úspěšně. Debug log ani posílat nebudu, když to nevykazuje žádné anomálie. Spacifikovalo to nějakých 147 souborů a minifikovaný kód vyhovuje pravidlům php 5.2.9.

Pěkná práce!

Pár nápadů:

  • odstranit ty komentáře obsahující název souboru, který se v „balíčku“ nachází. Nepředpokládám, že by to chtěl někdo zpětně rekonstruovat – stejně by to bylo bez komentářů. Nebo mají nějaký účel, který nevidím?
  • minifikovat i šablony. Třeba takové CSS je zbytečně roztahané. Nějaká spolupráce s WebLoaderem?;)

Třeba bys s tím trumfl i ten Davidův nástroj:)

DocX
Člen | 154
+
0
-

vlki napsal(a):

Pěkná práce!

Díky :)

  • odstranit ty komentáře obsahující název souboru, který se v „balíčku“ nachází. Nepředpokládám, že by to chtěl někdo zpětně rekonstruovat – stejně by to bylo bez komentářů. Nebo mají nějaký účel, který nevidím?

Tohle tam je jen při zapnutém --debug.

  • minifikovat i šablony. Třeba takové CSS je zbytečně roztahané. Nějaká spolupráce s WebLoaderem?;)

Třeba bys s tím trumfl i ten Davidův nástroj:)

Asi by to nějak šlo. Davidův minifier bych tím jistě trumfl, protože on tam má také jen zkopírované to, co je v původních souborech. Otázka ale je, jestli by to už nešlo chápat jako změnu chování Nette.

DocX
Člen | 154
+
0
-

Napadá mě pár TODO, které by se mohli ještě časem udělat. Nevím, ale kdy a jestli se k tomu dostanu (může to ale zkusit někdo jiný :o)

  • Přidělat automatickou kontrolu minifikovaného souboru (klasicky přes include). K tomu je ale potřeba:
    • Odstranit require Loaders/NetteLoader.php a zjišťovat seznam souborů normálně z FS.
    • Verzi Nette lze zjistit parsováním souboru Framework.php (ale ne includem)
  • Přidat možnost komprimace „vestavěných“ šablon pro laděnku.
  • Možná časem trochu zobecnit a udělat možnost minifikace např. presenterů. (Jak vyřešit, když se používá RobotLoader?, nepředvídatelné includování?, apod.)

Napadá někoho něco dalšího? :)

PS: Mohl bych požádat někoho, kdo má tu moc, změnit title vlákna na „Nette Minifier“? Případně přesunutí vlákna do komponent, jestli je to vhodné. Dík.

Editoval DocX (21. 9. 2009 10:26)

Tomik
Nette Evangelist | 485
+
0
-

DocX napsal(a):

Mohl bych poprosit …

Sice nejsem žádný z původních autorů příspěvků, ale diskuzi jsem na Tvoji žádost promazal…

DocX
Člen | 154
+
0
-

Jenom tak čistě ze zvědavosti (a taky kvulí prostému uložení zde na wiki):

Používáte to někdo? :-)

ViliamKopecky
Nette hipster | 230
+
0
-

já se to brzy chystám použít :) zatím jsem se k tomu ještě nedostal :)

Matúš Matula
Člen | 257
+
0
-

no ja som to dnes pouzil a vyzera to, ze to slape. Dobra robotka ;-)

Filip Procházka
Moderator | 4668
+
0
-

Já jsem to zrovna chtěl použít, ale nesežralo mi to dibi :(

škoda, doufal jsem že to bude trochu víc univerzální :(

DocX
Člen | 154
+
0
-

HosipLan napsal(a):

Já jsem to zrovna chtěl použít, ale nesežralo mi to dibi :(

škoda, doufal jsem že to bude trochu víc univerzální :(

No tak dělal jsem to na Nette, ale myslim že by nebylo složité si to přepsat aby to vzalo i dibi.

Tam je asi hlavní to jak to získa seznam souborů a to, že v každém souboru smí být jen jedna třída a mít requiry na potřebný třídy.

Filip Procházka
Moderator | 4668
+
0
-

Vím že to není složité :) Jenom jsem doufal že dibi to sežere taky, toš až bude chvilka tak si to vylepším :)

Honza Marek
Člen | 1664
+
0
-

Dibi sem tam má víc tříd v jednom souboru.

BigCharlie
Člen | 283
+
0
-

Zkoušel jsem dnes minifier a neuspěl jsem – hned po spouštění jsem narazil na hlášku, že není možné najít třídu AutoLoader (v souboru NetteLoader). Kdepak dělám chybu?