Kam s počítačem, když není volná místnost?

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.<br> <br> <br> <br> Rozhodnutí skočit v tandemu často přichází ve chvíli, kdy člověk stojí na letišti a vidí ostatní nastupovat do malého letadla. První krok není objednání skoku, ale upřímné přiznání, čeho se vlastně bojíte. Někdo se děsí výšky, jiný pádu, další jen toho, že nebude mít kontrolu. Sepište si ty obavy na papír. Tím zjistíte, které jsou racionální a které jen představa. Instruktor se vás na ně stejně zeptá, takže je lepší mít jasno.<br> <br> <br> <br> <img src="https://i.ytimg.com/vi/CcQIPOp9Gis/hq720.jpg" alt="Betonová stěrka na obklady v koupelně KROK ZA KROKEM | HydroFest" style="max-width:410px;float:right;padding:10px 0px 10px 10px;border:0px;">Když se rozjede, ale brzdí příliš brzy Opačný extrém nastává, když je brzda nastavená příliš těsně. Zipline se sice rozjede, ale jezdec se zastaví daleko před koncem a musí se doplazit zpět. To je nejen nepohodlné, ale i nebezpečné, protože hrozí pád z výšky. Při seřizování brzdy postupujte po malých krocích a po každé změně proveďte zkušební jízdu s odpovídající zátěží. Nepoužívejte k testování lehčího jezdce, než pro kterého je zipline určen.<br> <br> <br> <br> <span style="font-weight: 800;">Cacheování v GraphQL není</span> 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.<br> <br> <br> <br> Čtvrtým signálem jsou provozní projevy. Motor hůř startuje, ztrácí výkon do kopce, spotřeba paliva roste a automatická převodovka řadí trhaně. Olej v motoru přitom ovlivňuje i podtlakové okruhy a hydraulické rozvody. Kdo tento stav řeší jen přidáním aditiv, typically jen oddálí nutnou výměnu. Aditiva neuvolní mechanické usazeniny, jen je na čas rozptýlí.<br> <br> <br> <br> Čtvrté a páté řešení spolu souvisí: vertikální úložiště a každodenní úklid. Úzká skříňka mezi pračkou a zdí, věšák na dveře, háčky na vnitřní stranu skříňky — to vše ubere jen pár centimetrů, ale výrazně zlepší přehled. A každý večer stačí dvě minuty: setřít umyvadlo, narovnat lahvičky, pověsit ručník. Malá koupelna se neudrží v pořádku velkým úklidem jednou za týden, ale drobnou disciplínou každý den. Kdo to zvládne, přestane řešit, že je koupelna malá.<br> <br> <br> <br> Kabely řešte dřív, než je poprvé zapojíte. Určete jedno místo, kudy povedou ze zásuvky ke stolu, a veďte je v liště nebo v pásku po zdi. Prodlužovací kabel s vypínačem přišroubujte ze spodní strany desky. Síťový adaptér, nabíječku a redukce tam nechte nastálo, ať nemusíte nic hledat. Když kabely necháte volně na zemi, do roka je přejede židle a přestanou fungovat.<br> <br> <br> <br> 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í.<br> <br> <br> <br> Stránkování je místo, kde se nejčastěji ztrácí výkon. Kurzorové stránkování je pro GraphQL přirozenější než offsetové, protože při vkládání nových dat nedochází k přeskakování položek. Pokud musíte použít offset, nikdy nedovolte klientovi poslat offset bez limitu. Vždy vynuťte výchozí i maximální velikost stránky. Dále se vyhněte tomu, aby se v jednom dotazu kombinovalo mnoho seznamů s filtry, které nelze indexovat. Resolver by měl filtrovat v databázi, ne až v paměti. Filtrování v aplikaci je typická chyba, která se projeví až při větším objemu dat.<br> <br> <br> <br> Pokud se zipline po spuštění nerozjede podle očekávání, většinou nejde o poruchu samotného lana, ale o kombinaci nastavení brzdy, hmotnosti jezdce a úhlu nájezdu. Nejčastější příčinou je příliš volná brzda, která klade malý odpor, takže kladka zůstane stát hned na startu. Zkontrolujte, zda brzdný systém není v poloze, kdy se čelist dotýká lana ještě před rozjezdem, a zda je kladka správně nasazená v kolejničce.