Když v noci potřebujete pomoc na vodě, tyto signály vás zachrání

From BloomWiki
Jump to navigation Jump to search

Vykynuté těsto vyklopte na pomoučenou desku a lehce prohněťte, abyste vytlačili velké bubliny. Teprve teď se rozhoduje, co z něj bude. Pro buchty tvarujte stejně velké kuličky, které kladete do vymazaného pekáče vedle sebe. Pro koláče těsto rozválejte na plát silný asi půl centimetru a okraje nechte mírně vyšší. Náplň nikdy nerozdělávejte na těsto horkou, tvaroh s rozinkami musí být vychladlý. Povidla nebo marmeládu zřeďte lžící vody, aby se při pečení nepropálila.

Nakonec si uvědomte, že žádný signál není užitečný, pokud ho nikdo nevidí nebo neslyší. Před voláním pomoci se ujistěte, že víte, kde jste – zeměpisné souřadnice nebo alespoň viditelné orientační body. Vysílejte signály opakovaně a střídejte vizuální a zvukové prostředky. Klid a dodržení postupu zachrání více než chaotické mávání baterkou. Na vodě v noci platí dvojnásob: kdo je připraven, přežije.

Hloubka dotazu a limity, které se vyplatí nastavit Dalším krokem je omezení hloubky a složitosti dotazu. GraphQL sám o sobě nebrání klientovi poslat rekurzivní dotaz, který položí server. Nastavte maximální hloubku (obvykle stačí 7 až 10 úrovní) a vypočítejte složitost podle počtu polí a argumentů. Odmítněte dotaz ještě před spuštěním resolverů. Tím ušetříte práci i při útoku. Pozor na dvě věci: limit nesmí být tak přísný, že zablokuje legitimní dotazy, a musí být v dokumentaci, aby klienti věděli, co si mohou dovolit. Zároveň nikdy nespoléhejte jen na hloubku — dotaz může být mělký, ale s tisíci položkami v seznamu. Proto nastavte i maximální počet vrácených uzlů a použijte stránkování.

Nejčastější chyba je přeplněná taška, ve které se nedá nic najít. Vyhoďte vše, co není nezbytné, a nechte místo na věci, které budete potřebovat během letu. Základem je jedna přebalovací podložka, tři pleny, balení vlhčených ubrousků, náhradní oblečení pro dítě i pro vás, láhev s vodou a něco k jídlu, co se nerozsype. Dále jeden oblíbený předmět, který dítě uklidní, a dvě až tři malé hračky, které zabaví na krátkou dobu. Všechno ostatní patří do odbaveného zavazadla.

Nejdůležitější je specifická část rozcvičky, kterou většina lezců úplně vynechává. Prsty a šlachy potřebují postupnou zátěž. Začněte na velkých chytech na snadné cestě, kde pouze visíte a přenášíte váhu z jedné ruky na druhou. Poté přejděte na mírně menší chyty a udělejte několik lehkých tahů. Nikdy nezačínejte na malých lištách nebo kapse, kde se prsty dostávají do krajní flexe. Ramena rozhýbejte kroužením a dynamickými přítahy s gumou nebo na laně, pokud je k dispozici. Trup aktivujte prkny, bočními prkny a jednoduchými cviky na stabilitu středu těla. Bez aktivovaného trupu se každý těžší pohyb přenáší do rukou a zad, což je častý zdroj přetížení.

Poslední věc, kterou mnoho týmů podcení, je měření. Bez trasování jednotlivých resolverů nepoznáte, který z nich je pomalý. Zapněte si logování doby trvání pro každý resolver a sledujte, kolik dotazů na databázi vygeneroval. Zaměřte se na průměr i na devadesátý percentil, protože průměr skryje výkyvy. Až budete mít data, opravte nejdřív ty resolvery, které volají databázi v cyklu. Teprve potom řešte cache a limity. Tento postup je nudný, ale spolehlivý a nevyžaduje změnu schématu ani přepis klienta.

Cacheování v GraphQL není jen o HTTP cache. Mnohem větší efekt má cachování na úrovni resolverů nebo datové vrstvy. Klíč by měl obsahovat všechny vstupy, které výsledek ovlivňují, včetně argumentů a kontextu uživatele. Naopak citlivá data neukládejte do sdílené cache. Pokud používáte persistované dotazy, můžete klientovi poslat hash místo celého textu dotazu. Tím se zmenší přenos a server může dotaz předem zkompilovat. Není to ale náhrada za optimalizaci resolverů — je to jen další vrstva.

Začněte tím, že veškerý volný povrch nad umyvadlem nahradíte uzavřeným úložným prostorem. Otevřené police vypadají vzdušně, ale v praxi se na nich hromadí kelímky, hřebeny a lahvičky, které zabírají místo a padají. Skříňka s hloubkou kolem patnácti centimetrů udrží denní potřeby a zároveň nezasáhne do prostoru, kde stojíte. Uvnitř používejte nízké průhledné krabičky místo vysokých lahví – lépe se vejdou nad sebe a rychle vidíte, co dochází.

Většina pomalých GraphQL dotazů nevzniká kvůli databázi, ale kvůli tomu, jak resolver skládá data. Než začnete přidávat cache nebo měnit server, projděte si, kolik dotazů skutečně odejde na backend při jednom požadavku. GraphQL totiž snadno vytvoří N+1 problém: jeden dotaz na seznam a pak stovky dotazů na jednotlivé položky. Řešením není vypnout pole, ale načíst je dávkově. V praxi to znamená seskupit požadavky podle klíče a poslat jeden dotaz s více hodnotami. Pokud používáte dataloadery, ověřte, že jsou vytvořené pro každý požadavek zvlášť, ne globálně. Sdílený dataloader mezi uživateli je častá chyba, která míchá data a způsobuje těžko odhalitelné chyby.