Ir al contenido

GraphQL dotazy bez zbytečných polí: chyba, která zdržuje odpovědi

De Wiki CEPEM

U obou materiálů rozhoduje víc než materiál sám provedení detailů. Hrana stupně musí být zaoblená nebo opatřená lištou, jinak se o ni děti i dospělí v rychlosti zraňují. Protiskluzová úprava se nemá dělat nátěrem, který se časem sloupne – lepší je drážka nebo vsazený proužek. Podstupnice by měla být uzavřená, aby se do konstrukce nedostal prach a drobnosti. A na co se zapomíná nejčastěji: schody musí být ukotvené tak, aby se při chůzi nechvěly. Vrzání a vůle jsou signál, že se uvolnil spoj, ne že je materiál špatný.

Hloubka dotazu a N+1 jako tichý zabiják GraphQL neomezuje hloubku vnoření sám od sebe. Klient může poslat dotaz, který projde přes pět úrovní vztahů, a server ho ochotně vykoná. Bez limitu hloubky a bez analýzy složitosti dotazu se z toho stane snadný způsob, jak shodit databázi. Nastavte maximální hloubku podle skutečných potřeb aplikace a dotazy nad limit odmítejte ještě před spuštěním resolverů. Stejně důležité je řešit N+1: pokud resolver načítá seznam a pro každou položku dotazuje databázi zvlášť, pomůže dávkování požadavků v rámci jednoho cyklu vykonávání. Bez toho se optimalizace dotazu na úrovni klienta mine účinkem.

U menších nerovností do několika centimetrů stačí přímé zavěšení roštu na stropní závěsy. Rozdílnou vzdálenost vyrovnejte seřizováním závěsů, nikdy ne podkládáním destiček z odřezků. Pokud je strop výrazně křivý nebo klesá o více než zhruba deset centimetrů, je praktičtější vytvořit samostatnou nosnou rovinu. Na strop ukotvěte nosné profily a k nim připojte závěsy, které ponesou rošt v jedné rovině. Tím se vyhnete extrémně dlouhým závěsům, které se snadno rozkmitají a nepříjemně přenášejí kroky z podlahy nad vámi.

Druhou častou chybou je ignorování nákladů na pole, která vypadají nevinně. Agregace, počítání a filtrování uvnitř vnořených kolekcí mohou být dražší než samotný přenos dat. U takových polí zvažte, zda je klient opravdu potřebuje v každém volání, nebo zda stačí vyhradit je pro samostatný dotaz. Server by měl mít možnost pole označit jako nákladné a klientovi to dát najevo už při návrhu schématu, ne až při pádu v produkci.

Před psaním dotazu je užitečné podívat se na fragmenty, které už v projektu existují. Často se stane, že dva fragmenty žádají stejnou entitu v různých variantách a klient je posílá oba. Sloučení fragmentů sníží velikost requestu i počet resolverů, které server musí zavolat. Pozor na opačný extrém: příliš obecný fragment sdílený napříč nesouvisejícími obrazovkami vede k over-fetchingu, protože každá obrazovka nakonec potřebuje jen část. Fragment má odpovídat komponentě, ne celé doméně.

Nejčastější problém u GraphQL v produkci není server, ale to, co mu posílá klient. Vývojáři si zvyknou na pohodlí jednoho dotazu a do každého pole přidají všechny podobjekty, které by se někdy mohly hodit. Výsledkem je dotaz, který na první pohled vypadá úsporně, ale v databázi spustí desítky spojení navíc. Prvním krokem optimalizace je omezit výběr na pole, která obrazovka skutečně vykreslí. Pokud komponenta potřebuje jen název a identifikátor, nemá v dotazu co dělat popis, historie ani vnořené kolekce.

Mytí před uložením je typická chyba. Voda na povrchu vytváří vlhké prostředí, ve kterém se množí plísně, a u bobulovin zrychluje kažení. Jahody, maliny, borůvky a hroznové víno myjte až těsně před konzumací. Pokud je přesto musíte omýt, důkladně je osušte na utěrce a uložte do nádoby vyložené papírovou utěrkou, která přebytečnou vlhkost pohltí. Papírovou utěrku vyměňte, jakmile zvlhne.

U vlněných a hedvábných kusů je nejbezpečnější suché řešení: stopu jemně přejíždějte čistým bílým papírovým ubrouskem a případný zbytek nechte odborně ošetřit. Domácí pokusy s octem nebo saponátem na těchto materiálech často skončí ztrátou lesku nebo změnou odstínu. U sportovního oblečení s membránou zase nepoužívejte aviváž ani prostředky s vysokým obsahem tuku – ucpou póry a otisk se vrátí při každém nošení.

Nezapomínejte ani na cache. GraphQL dotazy jsou POST požadavky, takže běžná HTTP cache je nevidí. Pomáhá normalizovaná klientská cache, která ukládá entity podle identifikátoru, a na serveru perzistentní dotazy, kdy klient posílá jen hash schváleného dotazu. Tím se zmenší request, omezí se prostor pro drahé ad-hoc dotazy a zjednoduší se sledování toho, co aplikace skutečně posílá. Měření je poslední krok: logujte dobu trvání jednotlivých polí, ne jen celého requestu, jinak drahé pole snadno přehlédnete.

Než začnete cokoli dělat, zjistěte složení látky. Otisk na bavlně, lnu nebo směsi s umělým vláknem se řeší jinak než otisk na vlně, hedvábí nebo na povrchu s úpravou proti mačkání. U jemných materiálů nikdy nezačínejte třením – tření zatlačí tuk hlouběji do vlákna a stopa se zvětší. Nejprve látku prohlédněte proti světlu, abyste viděli, zda jde o povrchový film, nebo o mastnou skvrnu. Podle toho volte postup.