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í).

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.
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.
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
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.
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.
Databázové tabulky: singulár nebo plurál?
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()?


novější články
