Když databáze přestane stíhat, pomůže jen správný dotaz
Když se běh zastaví, máte několik tlačítek. Krokování do funkce vás zavede dovnitř volané funkce, krokování přes řádek ji vykoná celou a zastaví se na dalším řádku. Krokování ven z funkce dokončí aktuální funkci a vrátí vás do volajícího kódu. V panelu s rozsahy platnosti uvidíte hodnoty všech proměnných v daném okamžiku. Právě tady se vyplatí sledovat, co je undefined, co je null a co má neočekávaný typ. Častá chyba je spoléhat na to, že proměnná má hodnotu, kterou měla o pár řádků výš, ale mezitím ji něco přepsalo.
Vynucení místo domluvy Domluva, že se bude něco dodržovat, If you beloved this post and you would like to receive additional facts about prohlédnout kindly pay a visit to our web-page. vydrží do prvního spěchu. Jednotná konfigurace musí být vynucená automaticky: při instalaci závislostí, při spuštění testů nebo v rámci kontroly před přijetím změn. Když kontrola selže, musí být z chybové zprávy okamžitě jasné, co je špatně a jak to opravit. Nejdražší chyba je konfigurace, která selže tiše a jen v některých prostředích. Pokud se nastavení načítá z více míst, musí být pořadí priorit zdokumentované a vynucené v kódu, ne jen popsané v hlavičce souboru.
Nejčastější chyba není složitý dotaz, ale chybějící index na sloupci, podle kterého filtrujete nebo spojujete tabulky. Index ale není zadarmo: každý zápis navíc ho musí aktualizovat. Vyplatí se proto indexovat jen sloupce, které se skutečně objevují v podmínkách WHERE, v JOIN a v ORDER BY. Naopak index na sloupci, který se používá jen pro výpis, jen zpomalí vkládání.
Pomalý dotaz se nepozná podle toho, že aplikace „někdy zlobí". Pozná se podle plánu provedení. Než začnete cokoliv měnit, spusťte EXPLAIN a podívejte se, jestli databáze prochází celou tabulku, nebo používá index. Právě tenhle jediný rekonstrukce koupelny krok za krokem odhalí většinu problémů dřív, než sáhnete na kód.
Pozor také na SELECT *. Vracet všechny sloupce znamená přenášet data, která nikdo nepoužije. Pokud potřebujete jen tři sloupce, napište je. Menší objem dat znamená menší zátěž na síť i na paměť. U velkých tabulek to bývá rozdíl mezi dotazem, který zvládne obsloužit stovky požadavků za sekundu, a dotazem, který při deseti požadavcích položí server.
Poslední typický omyl je měřit pokrytí u kódu, který se často mění. Vysoké pokrytí v nestabilní části znamená jen to, že se testy neustále upravují spolu s ním. Sledujte místo toho, kolik testů selhalo při posledních změnách a kolik jich bylo potřeba přepsat. Pokud testy odhalují chyby, mají smysl. Pokud jen kopírují změny a nikdy nic nenajdou, jsou to náklady bez užitku. Pokrytí je užitečné tehdy, když vede k lepšímu návrhu a k odhaleným chybám. Přestává být užitečné ve chvíli, kdy se stane cílem samo o sobě.
Jednotná konfigurace projektu nezní jako vzrušující téma, dokud se nezačne rozpadat. Většina týmů si ji představuje jako soubor, který se commitne do repozitáře a tím to končí. Jenže konfigurace není dokument, je to nástroj. Pokud ji nemá kdo udržovat a vynucovat, do měsíce se z ní stane sbírka výjimek, které si každý vykládá po svém. Rozhodující otázka nezní, co do konfigurace patří, ale kdo ji smí měnit a jak se změna dostane ke všem.
Nakonec se vyplatí sledovat, jaké dotazy se spouštějí nejčastěji. Někdy stačí upravit jeden dotaz, který běží pořád dokola, a výkon se znatelně zvedne. Měřte, nehádejte. Bez měření se dá snadno „optimalizovat" něco, Https://Crabcodex.Com/ co ve skutečnosti problém nezpůsobuje.
byt v panelákuýkon se řeší hlavně na úrovni odběru. Komponenta, která se přihlásí k celému stavu, se překreslí při každé změně, i když ji zajímá jediné pole. Řešením je vybírat data těsně u místa spotřeby a držet odběr co nejmenší. U seznamů dávejte pozor na stabilní identifikátory; index pole jako klíč způsobí, že se při vložení nebo smazání položky překreslí vše za ní. Stejně tak se vyhněte vytváření nových objektů a funkcí v každém renderu, pokud je předáváte dál — zbytečně tím rušíte memoizaci.
Základ stojí na třech věcech: store, akce a reducery. Akce je obyčejný objekt s typem a daty, reducer je čistá funkce, která na základě akce vrátí nový stav, a store je drží pohromadě. V praxi se vyplácí psát reducery po malých částech a kombinovat je podle domén — uživatel, objednávky, filtry. Snažte se, aby každá změna stavu vznikala z jedné jasně pojmenované akce. Jakmile začnete do reduceru cpát logiku, která závisí na čase, náhodě nebo volání sítě, přestane být předvídatelný a testovatelný.
Začněte tím, že oddělíte tři vrstvy: nastavení, které je stejné pro všechny a měnit se nesmí (formátování, pravidla lintování, verze nástrojů), nastavení, které se liší podle prostředí (adresy služeb, přepínače), a nastavení, které je čistě osobní a do repozitáře nepatří vůbec. Většina týmů tohle smíchá do jednoho souboru a pak se diví, že si lidé přepisují hodnoty lokálně a commitují je omylem. Osobní preference patří do ignorovaného souboru, ne do společného.