Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

PHP: pomalé switch a case

Nedávno psal Jakub Vrána o tom, jak zjistit příslušnost prvku v seznamu. Zmínil se také o variantě Switch & Case, kterou lze nahradit sérii podmínek if.

switch ($a) {
case 'a':
case 'b':
case 'c':
case 'd':
default:
}

Tato konstrukce může být v určitých jazycích a za určitých situací nesmírně rychlá. Bohužel v PHP tomu tak není. V časově kritických rutinách se jí raději vyhněte (tedy této konstrukci, případně PHP vůbec).

Pro rekapitulaci, zjistit příslušnost prvku lze nejméně pěti způsoby:

If série

Nejpomalejší metoda, vhodná tehdy, pokud se „formát“ podmínky případ od případu liší (pokud se neopakuje jen $ch==...). Viz demo č. 1.

if ($ch=="\x00") { /* ... */ continue; }
if ($ch=="\x01") { /* ... */ continue; }
...

Switch & Case

Rychlejší a přehlednější varianta. Viz demo č. 2.

switch ($ch) {
case "\x00": /* ... */ break;
case "\x01": /* ... */ break;
...
}

in_array

Připravíme si pole hodnot a pak už jen testujeme (ne)přítomnost prvku v tomto poli. Viz demo č. 3.

if (in_array($ch, $arr)) {
  // ...
} else {
  // ...
}

array_key_exists

Opět pracuje nad polem, tentokrát se však netestuje přítomnost hodnot, alébrž klíčů (indexů). To je obecně velmi rychlé a tato metoda patří mezi nejrychlejší. Viz demo č. 4.

if (array_key_exists($ch, $arr)) {
  // ...
} else {
  // ...
}

isset

Zoptimalizovaná předchozí varianta. Využívá se jazykové konstrukce isset. Ta je rychlejší než funkce array_key_exists, narozdíl od ní však nedokáže zjistit přítomnost klíče NULL v poli. Viz demo č. 5.

if (isset($arr[$ch])) {
  // ...
} else {
  // ...
}

Srovnání

Rychlostní srovnání hovoří myslím jasně (větší hodnota znamená delší dobu zpracování).

Graf trvání jednotlivých benchmarků

Optimalizovat kód pro isset je obvykle velmi výhodné. A netýká se to jen polí, lze kupříkladu testovat i délku řetězce (isset($str{14}) namísto strlen($str)>14) atd. Ale to už hraničí s horší čitelností kódu.

clock 2. 10. 2005 pencil PHP comments Komentáře: 12


Color mixer aneb míchátko

Právě jsem vytvořil dvě jednoduchá míchátka barev. Jsou určena pro uživatele webových aplikací (nikoliv webdesignéry, jako třeba Pixyho generátor schémat). Slouží tedy k interaktivní volbě barvy. Dávám je volně k dispozici pod licencí GPL.

Download ColorMixer Michatko:

Míchátka používají několik fikaných kouzel pro manipulaci s barvami. Díky nim jsem v DHTML dosáhl podobné funkčnosti, jaká je známá spíše z desktopových aplikací. Tedy nechci se tu naparovat, jen že jsem nic podobného na webu zatím neviděl.

Míchátko s barevným proužkem

Připomíná „Color Picker“ z Adobe Photoshopu. Funguje pod IE 6, Mozillou a Operou (ostatní prohlížeče jsem neměl možnost ověřit, můžete zkusit sami a poslat report). (odkaz)

(aktualizováno: s míchátkem na stejném principu přišel už o měsíc dříve Dalton Lloyd, patří mi tedy krásné druhenství)

Míchátko s barevným prstencem

Ovšem tady si snad prvenství obhájím. Co ty na to, Daltone?

Implementace

Pro implementaci stačí nalinkovat do stránky příslušný CSS a JS soubor (viz jednotlivé příklady) a poté vytvořit a nakonfigurovat objekt mixéru.

<link rel="stylesheet" type="text/css"
   href="dgxcolormixer.css" />

<script type="text/javascript"
   src="dgxcolormixer.js"></script>

<script type="text/javascript">

// definujeme obsluhu událostí
function myChangeColorHandler(mixer) { ... }
function myConfirmHandler(mixer) { ... }

// vytvoříme objekt
var mixer = new DGXColorMixer();

// nastavíme handlery
// pro změnu barvy
mixer.onChange = myChangeColorHandler;
// pro povrzení změny
mixer.onConfirm = myConfirmHandler;

// barva
mixer.setColor('FF0030');
// nebo
mixer.setColor(new RGBColor(10, 20, 30));
// nebo
mixer.setColor(new HSVColor(280, 100, 50));

// případně včlenit do existujícího elementu
mixer.setParent('main1');
// nebo
el = document.getElementById('main1');
mixer.setParent(el);

// dosud je mixér skrytý, tak jej zobrazíme
mixer.show();

</script>

Mixér lze propojit s editačním políčkem input a také nastavit, zda bude fungovat jako vyskakovací okénko (automaticky se umístí hned vedle editačního políčka). Tady se můžete podívat na příklad.

// create mixer
mixer = new DGXColorMixer();

// propoj s prvkem s id 'color1'
// druhý parametr nastavuje popup režim
mixer.attachInput('color1', true);

Ovládání přes URL

V URL můžete zadat barvu. Pro RGB lze použít tří nebo šestiznakový HEX formát, dekadický zápis nebo dokonce slovní označení:

Podporován je též HSV (HSB) vstup, kde Hue je v rozsahu 0..360 a Saturation + Brightness v rozsahu 0..100

clock 26. 9. 2005 pencil HTML & CSS comments Komentáře: 41


Statistika používání HTML značek

Která značka je nejpoužívanější? Je více formulářů POST nebo GET? A jak vypadá běžná událost onclick?

Pracuji na projektu, kvůli kterému jsem si vytvořil statistiku používání HTML značek, jejich atributů a hodnot. Výsledky jsou celkem zajímavé, takže se s vámi o ně podělím. Topten nejpoužívanějších značek vypadá následovně:

Jak v tabulce číst? V prvním řádku vidíme, že 18% značek v průměrném dokumentu představuje kotva <a>. Celých 99% kotev má uveden atribut href, 22% atribut title atd. Druhá nejpoužívanější značka je <td>, na obrázku vidíme i přehled nejčastějších hodnot atributu class (zobrazí se v moderních browserech po najetí myšky na buňku tabulky).

Dlouho jsem přemýšlel, jak pro měření získat objektivní vzorek dat. Nakonec jsem analyzoval prvních deset odkazů, které vrací Jyxo pro každé slovo z Top 1000. Po promazání atypických souborů vznikl různorodý vzorek cca 10.000 stránek. Pro zajímavost jsem vytvořil druhou statistiku, která zahrnuje titulní stránky všech webů umístěných v galerii CSS Vault (bohužel vzorek je docela malý).

Tady jsou:

Co lze vyčíst

Zajímavé je zejména srovnání obou tabulek. Rozdíly v popularitě značek asi neprozradí nic překvapivého, ale velmi krásně demonstrují odlišnost zastaralého a moderního pojetí webdesignu. Co dále… všimněte si, že obvyklé šířky tabulek jsou kolem 98% (jestlipak víte proč?). Kódování windows-1250 je cca 4× častější, než iso-8859–2. Velká spousta webů chybně uvádí kód jazyka ‚cz‘ namísto správného ‚cs‘. Perličkou je, že tučné písmo rádi barvíme do tmavě modré či červené.

A tak bych mohl pokračovat. Najdete-li sami něco zajímavého, můžete se zmínit v komentářích.

clock 21. 9. 2005 pencil HTML & CSS comments Komentáře: 34


http://user:pass@example.com pro SP2

Pokud vás štve, že po nainstalování Service Pack 2 pro Windows XP (případně jiného patche) nefunguje v Internet Exploreru zjednodušené přihlašování ve formě http://username:password@example.com, dá se to řešit úpravou registrů.

Vytvořte si soubor iefix.reg s tímto obsahem a pak jej spusťte:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE]
"iexplore.exe"=dword:00000000
"explorer.exe"=dword:00000000

Změna se bude týkat všech uživatelů počítače. Pokud ji chcete omezit jen na aktuálního uživatele, zaměňte klíč HKEY_LOCAL_MACHINE za HKEY_CURRENT_USER.

clock 16. 9. 2005 pencil HTML & CSS comments Komentáře: 19


Databázové tabulky: singulár nebo plurál?

Vzpomínka na krásné chvíle na www.synthesia.cz Rád bych se zeptal všech ctěných programátorů, jestli pro databázové tabulky volí názvy v jednotném nebo množném čísle? Tedy používáte User, Password, Order nebo Users, Passwords, Orders? Nebo se dokonce přikláníte k českým názvům (uzivatele, hesla, objednavky)?

Jak nazýváte tabulky obsahující jen cizí klíče? A pole s těmito klíči?

A co v případě programovacích jazyků: dáváte polím názvy v singuláru nebo plurálu? Tedy $modules = array() nebo $module = array()?

clock 16. 8. 2005 pencil PHP comments Komentáře: 56


phpFashion © 2004, 2012 David Grudlo webu

Pokud není uvedeno jinak, podléhá obsah těchto stránek licenci Creative Commons BY-NC-ND Creative Commons License BY-NC-ND

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.