Diskuze: Machr na PHP - Optimizer CSS stylů
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Vlastník

Zobrazeno 26 zpráv z 26.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Jinak kdy by neměl nějaké css, tak můžete použít moje z webu
misaz.moxo.cz
Ve složce styles jsou styly (viz. obr). U těchto stylů si však doplňte
komentáře pro zkoušení.
Vypadá zajímavě
Dáváš za tohle i placku na algoritmy nebo jen na PHP ?
pokud nepoužiješ regex tak asi jo.
Hezké. Ještě by se to ale dalo vylepšit. Kupříkladu <code>nav ul</code> se ti optimalizuje jako <code>navul</code>.
content: 'V textu jsou /* komentáře chápany jako text... */';
...a mezery v textu to také odstraní...
Tak přidávám sem svůj výtvor: http://misaz.moxo.cz/…ptimizer.zip Pokud se vám bude jevit výsledek nezoptimalizovaný, zakomentujte/odkomentujte řádek 70 v souboru CSSOptimizer.php. Používá se to jednoduše.
Naimportujete si soubor CSSOptimizer.php, vytvoříte instanci třídy CSSOptimizer.php, volitelně ji předáte pole stringů se styly. Dále můžete naimportovat všechny csska ze složky metodou loadStylesFromFolder("složka"). Výsledek vypíšete (nečekaně) metodou Vypis() .
Ukázka použití (soubor style.php):
require_once("CSSOptimizer.php");
$styl = new CSSOptimizer();
$styl->loadStylesFromFolder("css");
$styl->Vypis();
Ok. Moje první objektová aplikace a první soutěž. Čekám hlavně kritiku, díky které se budu moci příště zlepšit.
http://www.itnetwork.cz/dev-lighter/228
Teď jsem zjistil, že procházení složek mi nefunguje, takže se s tím ani nezatěžujte, umí to zpracovat pouze samostatné css.
Ještě jsem to upravil, což je zřejmě proti pravidlům. Takže už to zpracovává samostatný css, složku s css a pole s názvy css. Komentáře jsem fakt nestihl přidat.
Ještě čekám na kód od Neaktivní uživatela. U tebe úplně nechápu, proč "zachraňuješ" text mezi uvozovkami?
Protože hned poté vyhazuju bílé znaky a při větším počtu mezer je zkracuji na 1. Tím bych ovšem ovlivnil i text v uvozovkách. Snažil jsem se to napsat tak, aby veškerý obsah v uvozovkách zůstal v původním tvaru. Takže nejdřív si vše z uvozovek vytáhnu do pole, pak zbytek pročistím a potom do těch uvozovek ten text vrátím v původním tvaru.
Např. kdyby někdo zešílel a napsal třeba p:before { content:"A H O J"; } tak se snažím mu vrátit p:before{content:"A H O J"} a nikoliv p:before{content:"A H O J"}
Snad jsem to srozumitelně vysvětlil
Nenapadá mě proč bych do uvozovek v CSS psal mezeru?
Ani mě ne. Ale přesto si myslím že by ten skript neměl nijak upravovat obsah v uvozovkách, možná jsem jenom uvedl špatný příklad.
někdo může použít v content třeba hvězdičku a u ní mezeru, která by se jinak odstranila
Máš pravdu, blbnu, mezera tam samozřejmě může být, třeba u názvů fontů. Řešil bych ale spíše kdy mezeru můžu vymazat než je vymazat všude a pak vrátit obsah uvozovek. Smazat je potřeba vlastně jen více mezer zasebou nebo mezery za : a před {.
Mezery zkracuju na jeden znak v kódu, v uvozovkách se snažím nechat vše na místě.
Je to prasárna, ale když někdo udělá dvě mezery " " tak se mu snažím vyhovět tím, že je tam nechám. Jen k tomu jsou funkce saveText a recoverText. Pokud někdo nepíše jako prase a nemá třeba "/*", tak je může vypustit.
Každopádně už jsme tedy asi všichni.
Danovi to maže mezery všude. Snaha se cení, ale již jsem ti říkal asi
tisíckrát, že "Uprav" není vhodný název pro třídu Třída je objekt, ne akce.
Misaz pěkně načítá vše ze složky, kód se zdá objektový. Splitování na selektory mi přijde trochu zbytečné.
FastNode na to šel poměrně brutální metodou saveText, kde je kód dost redundantní a hlavně by to určitě zvládl regulární výraz. deleteUselessChar() se mi naopak líbí, je dobře kompaktní. Škoda té zmatenosti s uvozovkami, která asi není ani potřeba a také neexistující možnosti procházet více souborů.
Zrovna to implemnetuji na devbooku a myslím, že by mělo bohatě stačit tohle:
// Odstranění komentářů
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
// Odstranění některých mezer
$buffer = str_replace(': ', ':', $buffer);
$buffer = str_replace(' {', '{', $buffer);
$buffer = str_replace(', ', ',', $buffer);
// Odstranění konců řádků
$buffer = str_replace(array("\r\n", "\t", "\r", "\n"), '', $buffer);
Ještě to testuji, ale vypadá to ostylované dobře
Nějak se nemohu rozhodnout mezi Michal Žůrek - misazem a FastNode, tak
vám ji pošlu oběma Adresu
prosím pošlete x do PM a FastNode si nějak upraví ty for cykly
Skvělé, děkuji. S tím kódem si ještě nějak pohraju, dneska to bylo
narychlo (ráno v 1:00 -> poté v autě -> metru -> autobuse a u
večeře už jsem finišoval ).
Tak já už jednu fyzickou placku na PHP mám a nenapadá mě žádná, která by se k tomu hodila a ještě ji nemám. Fyzickou placku mi ted posílat nemusíte, staří mi když mi ji napíšete do profilu.
Jinak já jsem na svém webu taky script implementoval.
Zobrazeno 26 zpráv z 26.