Vstup do testování softwaru bez předchozí praxe
Když aplikace v Reactu roste, správa stavu se snadno zvrhne v předávání desítek props přes několik úrovní komponent. Redux nabízí centralizované místo pro data, ale jeho nasazení vyžaduje disciplínu. Pokud začínáte, držte se pravidla: do store ukládejte jen to, co opravdu sdílí více komponent. Lokální stav formulářů nebo přepínačů klidně nechte v useState. Tím zmenšíte objem kódu a usnadníte ladění.
Při návrhu nového API stojíte před zásadním rozhodnutím: zvolit REST, nebo GraphQL? Obě technologie mají své místo, ale každá řeší jiné problémy. Tento článek vám pomůže se rozhodnout na základě konkrétních potřeb vašeho projektu, ne podle momentálního trendu.
Při optimalizaci SQL dotazů se vyplatí začít u vysvětlovacího plánu. Většina databázových systémů nabízí příkaz EXPLAIN, který ukáže, jak se dotaz vykonává. Sledujte sekvenční skeny tabulek, které jsou nejčastější příčinou pomalých dotazů. Pokud vidíte velké množství čtených řádků a malý výsledek, je na místě zvážit indexy. Správně zvolený index dokáže zkrátit dobu vykonání i o několik řádů, ale pozor na jejich nadměrné používání, které zpomaluje zápisy.
Významný vliv na výkon má také práce s daty na aplikační úrovni. Pokud potřebujete agregace, jako jsou součty nebo průměry, nechte je spočítat SQL, a ne v programovacím jazyce. Místo načítání všech záznamů a jejich filtrování v paměti aplikace vždy filtrujte v dotazu. Pomůže také stránkování výsledků – používejte LIMIT a OFFSET, ale mějte na paměti, že velký OFFSET je neefektivní. Pro listování velkými datovými sadami zvažte tzv. keyset pagination, která je založena na podmínce větší než poslední ID.
Při odhadování vždy pracujte s rozkladem úkolu na menší části. Pokud máte před sebou funkcionalitu, kterou nedokážete rozdělit na podúkoly, je to varovný signál, že jí ještě dostatečně nerozumíte. Vytvořte si seznam kroků, jako je návrh databáze, implementace logiky, psaní testů a integrace. Každý krok odhadněte zvlášť a poté výsledky sečtěte. Tento postup snižuje riziko, že zapomenete na skrytou práci, a usnadňuje pozdější sledování průběhu.
Na závěr: neřiďte se módou, ale konkrétními požadavky. Nakreslete si datové modely, odhadněte, kolik dotazů bude potřeba, a změřte, jakou velikost odpovědí klienti skutečně využijí. Pokud by GraphQL u jednoduchého blogu znamenal jen zbytečnou komplexitu, radši zůstaňte u REST. Naopak u aplikace s hluboce propojenými daty se GraphQL vyplatí i přes vyšší nároky na údržbu.
Důležitou součástí odhadu je také komunikace s týmem. Pokud odhadujete sami, riskujete, že nevidíte všechny aspekty, které kolegové znají. Použijte techniku plánovacího pokru, kdy každý člen týmu nejprve odhadne úkol samostatně a poté si své odhady vzájemně vysvětlí. Tím se odhalí různé předpoklady a nejasnosti, které by jinak zůstaly skryté. Tento proces sice zabere čas, ale vyplatí se – výsledný odhad je obvykle realističtější a tým je s ním více ztotožněn.
Dalším častým problémem je odhadování „ve vzduchu" bez znalosti existujícího kódu. Pokud neznáte architekturu, použité knihovny nebo kvalitu testů, je váš odhad jen tipování. Před odhadem si projděte relevantní části kódu, podívejte se na podobné úkoly z minulosti a zjistěte, jak dlouho reálně trvaly. Historická data z vašeho týmu jsou nejcennějším zdrojem – pokud je nemáte, začněte si je zaznamenávat.
Pravidelně porovnávejte odhady se skutečností. Po dokončení úkolu si zapište, kolik času reálně zabral, a proč se lišil od odhadu. Po čase získáte kalibraci, díky které budou vaše odhady stále přesnější. Nepodléhejte iluzi, že odhadování je exaktní věda – je to dovednost, kterou lze trénovat. Důležité je být konzistentní, sledovat metriky a nebát se přiznat nejistotu.
Nejčastější chyby v dotazech a jak se jim vyhnout Klasickým prohřeškem je používání SELECT * místo vypsání konkrétních sloupců. Nezbytečně to přenáší data, která nepotřebujete, a zvyšuje zátěž sítě i paměti. Další častou chybou je řazení a filtrování na sloupcích, které nejsou indexované, nebo používání funkcí v ORDER BY. Zkuste také omezit počet vnořených poddotazů a nahradit je JOINem, pokud to jde. Při psaní JOINů dbejte na to, abyste spojovali tabulky na indexovaných sloupcích a měli jasně definované typy spojení.
Tipy pro efektivní práci s Reduxem Pro asynchronní operace, jako je načítání dat z API, potřebujete middleware. Nejčastěji se používá Redux Thunk, protože je jednoduchý a umožňuje psát akce jako funkce s dispatch a getState. Vyhněte se ale tomu, abyste do thunku dávali složité logiky – měl by pouze řídit tok akcí (např. dispatch loading, success, error). Pro náročnější případy zvažte Redux Saga, ale nezačínejte s ní, pokud thunk stačí.