Nette minificator/compactator
- DocX
- Člen | 154
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)
- DocX
- Člen | 154
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)
- DocX
- Člen | 154
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
Určitě raději „minifier“ :-)
Jinak práce pěkná, ale vhodná opravdu jen pro vás, co si Nette ohýbáte :-p
- David Grudl
- Nette Core | 8228
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
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
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.
- DocX
- Člen | 154
Po dlouhé době jsem se dostal znovu k Nette Minifieru. Opravil jsem jedinou známou chybu a vylepšil několik věcí:
- už 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)
- vlki
- Člen | 218
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
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
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
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
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)
- Odstranit
- 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)
- ViliamKopecky
- Nette hipster | 230
já se to brzy chystám použít :) zatím jsem se k tomu ještě nedostal :)
- Filip Procházka
- Moderator | 4668
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
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
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 :)
- BigCharlie
- Člen | 283
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?