Diskuze: Redukce DB dotazů
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 10 zpráv z 10.
//= 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.
strlen() je rychlejší než select -> použít podmínku a neposílat do
databáze data zbytečně.
I kdyby (teoreticky) strlen a select měly trvat stejnou dobu, nebo dokonce
kdyby strlen byl o něco pomalejší, stejně je vhodnější řešení se
vyhnout zbytečné komunikaci s databází.
-> není důvod aby tam nebyla podmínka pokud je výsledek jasný.
Ale platí to samozřejmě pouze pokud nepovoluješ vyhledávání čísti řetězce - chci vyhledat uživatele a vím že měl v nicku aktuální rok, v tom případě jsem v háji.
PS. mb_strlen
Mně šlo spíše o to, zda takovou podmínku používáš, abys ten dotaz
ušetřil. Je mně jasné, že je strlen() rychlejší než komunikace s DB.
Co se týká vyhledání dle části řetězce, pak OK - v tomto příkladu mi
šlo o vyhledání dle přesného stringu.
A mb_strlen() nebude třeba, když uživatelské jméno nebude moct mít diakritiku, ale pro příklad jsem nezacházel do detailů
Ahoj,
být tebou, tak bych určitě použil tu podmínku.
Možná trochu z jiného soudku, možná ne, ale to samé dělám i když
ověřuji identitu uživatele přes prihlašování. Pokud nesedí velikost
hesla, je prázdné nebo podobné nesmysly, tak se nedotazuji ani na databázi a
ani s tím už dále nepracuji.
Ak ti ide o rýchlosť, tak jednoznačne použi tú podmienku....
+
nejakú milisekundu získaš tým, že nahradíš strlen isset-om
Jak to myslíš s tím isset? To jsou zcela odlišené funkce a pokud myslíš něco jako isset($name[4]), tak to leda znepřehlední celou podmínku.
Edit: Plus by jsi musel přepsat tu konstantu a znepřehlednil by jsi to ještě víc
Kazdu globalnu premennu musis validovat. Nikdy nevies co v nej je pretoze prichadza od klienta. Nevies ci je skalarna premenna, pole, objekt, dokonca ci je integer, float alebo string. Vela veci sa moze "nahodou" prihodit. Preto odporucam osetrit kazdu takuto premennu, nezalezi na tom ci ide do SQL alebo ide o rychlost, v prvom rade ide o kvalitny kod, ktory si ty naprogramoval.
Mozno sa to mierne zneprehladni ale isset je vraj az 6-krat rychlejsi (neskusal som). Keby chcel pouzit isset staci hodnotu v konstante prepisat na 4 (to si myslim nie je nic neprehladne) a vlozit ju do issetu. Potom by to vyzeralo nejak takto:
const MIN_USERNAME_LENGTH = 4;
$name = !empty($_GET["name"]) ? $_GET["name"] : NULL;
$users = array();
if ($name !== NULL && !isset($name[MIN_USERNAME_LENGTH])) {
// ...
}
// Konstantu som nikdy do $something[here] nedaval, tak neviem ci to funguje ale zrejme hej, lebo aj premenne idu....ak nie opravte ma
Díky za odpovědi. O rychlost mi nejde, jen čistě o to, zda zacházíte až do detailů validace, nebo tu hodnotu prostě hodíte do DB dotazu a čekáte, co se vrátí
Je úplně jedno, jak je to rychlé. Pokud se jedná o mikro/nanosekundy, nemá to smysl. Ještě když s tímhle trochu pokazíš návrh - tím myslím to, že kdybych chtěl poté použít strlen namísto isset, musel bych změnit i konstantu a na to se dá hned zapomenout.
Je lepší rychlost nahrabat na algoritmech, nežli na těchto nesmyslech.
Jinak vím, oč ti jde, také při rekurzivním volání metody, která obsahuje is_array používám (array)$pole === $pole, ale moc to smysl nemá
Zobrazeno 10 zpráv z 10.