Zum Inhalt springen

Když GraphQL dotazy brzdí aplikaci, kde hledat rezervy

Aus TerraDuniaWiki

Zařízení se v seznamu vůbec neobjeví, nebo se spojení opakovaně přerušuje. Většina lidí začne přeinstalovávat aplikace a restartovat telefon, ale problém bývá jinde. Než začnete cokoli mazat, projděte tyto kroky popořadě. Zabere to pár minut a vyhnete se zbytečnému hledání.

Další opakovanou chybou je podcenění dilatace. Desky se v podkroví prohřívají výrazně více než v obytném patře a bez dostatečných spár u stěn a v rozích se vlní. Ponechte po obvodu mezeru alespoň několik milimetrů a tu pak vyplňte pružným tmelem, nikoli tuhým spojem. U velkých ploch je vhodné rozdělit podhled na dilatační pole.

Hloubka a složitost nestačí, počítejte i násoben

Hloubka a šířka dotazu rozhoduje víc než indexy GraphQL umožňuje klientovi sáhnout hluboko do grafu. To je výhoda i past. Dotaz, který pro každý záznam načte další tři vrstvy vnořených objektů, vytvoří stovky dílčích dotazů. Řešením není zakazovat vnořování, ale omezit hloubku a šířku na úrovni serveru. Zaveďte limity podle toho, co aplikace skutečně potřebuje. Pokud klient posílá dotaz přes deset úrovní, je to signál, že model dat nebo potřeby obrazovky je špatně navržený. Druhým krokem je seskupit opakované dotazy do jednoho požadavku místo několika paralelních.

Teplá bílá jako základ, barevná jen jako dopln�

Nejčastější chyba je zapomenout na kabely. Veďte je tak, aby se daly kdykoli odpojit a znovu zapojit bez lezení pod stůl. Prodlužovací lišta přišroubovaná ze spodní strany desky je lepší řešení než volně ležící kabel na podlaze. Tiskárnu a skener nedávejte na desku, pokud je používáte méně než jednou týdně – patří do police nebo do spodní zásuvky. Papíry, které potřebujete mít po ruce, se vejdou do jedné krabice velikosti A4. Všechno ostatní skenujte nebo vyhoďte. Pořadače na dokumenty zabírají v malém bytě zbytečně mnoho místa a většina lidí do nich stejně nic nedá.

Typická chyba je řešit N+1 dotaz až na úrovni databáze. Pomůže dataloader, ale jen když se pole načítají ve stejné vrstvě a ve stejném pořadí. Jakmile klient pole prohází, dávkování se rozpadne. Proto je lepší omezit počet polí vracejících seznamy a na serveru vynutit, aby se dávkovalo podle skutečných klíčů. Bez toho se výkon mění podle toho, jak klient zrovna poskládá dotaz.

Druhá častá chyba je cachování na špatné úrovni. Cache celého dotazu vypadá lákavě, ale při jakékoli změně v datech se invaliduje příliš mnoho. Lepší je cachovat jednotlivé entity podle identifikátoru a klíčovat i podle toho, jaká pole klient požaduje. Tím se vyhnete situaci, kdy jeden klient chce jen jméno a druhý celý profil, a přesto si navzájem přepisují výsledky.

Do roku 2026 se jako standard prosadí omezení složitosti na vstupu. Místo ručního počítání polí zaveďte skóre dotazu, které zohlední hloubku, počet seznamů a režii resolverů. Pokud skóre překročí limit, server dotaz odmítne s jasnou chybou, ne že ho potichu zpomalí. Klient se tak naučí posílat menší dotazy. Zároveň měřte, kolik dotazů končí odmítnutím, protože vysoké číslo znamená, že limit je špatně nastavený, ne že klienti jsou hluční.

Na závěr: optimalizace neznamená přepsat všechno. Znamená vědět, které dotazy jsou drahé, proč jsou drahé, a nastavit pravidla, která drahé dotazy zastaví dřív, než zatíží server. Když se to podaří, rozdíl poznáte nejen na časech odpovědí, ale i na tom, jak snadno se aplikace vyvíjí dál.

Většina týmů se při optimalizaci GraphQL zaměří na resolver nebo databázi, ale skutečný problém bývá jinde. Server zpracuje dotaz, vrátí data, a přesto je odpověď pomalá. Příčinou je často to, jak klient skládá dotaz a jak server překládá pole na skutečnou práci. Prvním krokem není měnit kód, ale změřit, které dotazy jsou drahé. Zapněte na serveru logování doby zpracování jednotlivých polí a sledujte, co se děje při reálném provozu, ne v testech s pěti záznamy.