5 pravidiel, jak zrychlit GraphQL dotazy bez změny schématu

<img src="https://picography.co/page/1/600" style="max-width:400px;float:right;padding:10px 0px 10px 10px;border:0px;">Kdy těsto hníst a kdy ho nechat odpočív<br> <br> <br> <br> Výběr roštu se řídí dvěma parametry, které nelze obejít: typem matrace a hmotností spáče. Rošt totiž není jen dekorace pod matrací. Určuje, kam se matrace prohne, jak rychle se vrací do tvaru a jestli vydrží několik let, nebo se do roka rozvlní. Pokud se rošt k matraci nehodí, matrace ztratí vlastnosti, za které jste zaplatili, i když je sama o sobě kvalitní.<br> <br> <br> <br> <span style="font-weight: bold;">Čtěte obchodní podmínky a</span> reklamační řád, i když jsou dlouhé. Zaměřte se na tři věci: kdo je prodávající, jak se uplatňuje reklamace a do kdy musíte zboží vrátit. Pokud jsou podmínky psané strojově, obsahují nesmyslné věty nebo odkazují na neexistující subjekt, není co řešit. Stejně tak si před nákupem ověřte, jestli e-shop zveřejňuje funkční telefonní číslo a jestli na něm někdo skutečně zvedá. Zavolejte nebo napište ještě před objednávkou. Rychlá a věcná odpověď je dobré znamení, mlčení nebo vyhýbavé reakce ne.<br> <br> <br> <br> Když motor sám řekne, že je z<br> <br> <br> <br> 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.<br> <br> <br> <br> 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.<br> <br> <br> <br> Hmotnost spáče mění vše Hmotnost spáče určuje, jak velký tlak na rošt působí. Do zhruba sedmdesáti kilogramů stačí běžný pružný rošt s užší roztečí lamel. U vyšší hmotnosti je potřeba rošt s více lamelami, silnějšími profily a pevným rámem. Někteří výrobci uvádějí nosnost roštu přímo na štítku – pokud ji najdete, berte ji vážně. Dva spáči s velkým rozdílem hmotností by měli zvážit dva samostatné rošty v jedné posteli, protože jeden společný rošt se vždy přizpůsobí tomu těžšímu.<br> <br> <br> <br> Rozhodující je i rozteč lamel. Čím blíž jsou lamely u sebe, tím menší je riziko, že se matrace protlačí mezi ně. Pro pěnové matrace se hodí rozteč do zhruba pěti centimetrů, pro tuhé matrace stačí i větší. Lamely by měly být z tvrdého dřeva nebo kvalitní překližky, ne z tenkého plastu, který se časem ohne. Všímejte si také toho, zda jsou lamely uložené v gumových nebo silikonových pouzdrech – snižují hluk a prodlužují životnost.<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> Pozor na univerzální rady typu „stačí jakýkoli rošt". Neexistuje rošt, který by sedl lehké i těžké postavě zároveň. Stejně tak neplatí, že dražší rošt je vždy lepší – záleží na shodě s matrací a váhou. Před koupí si změřte vnitřní rozměr postele, zkontrolujte, zda rošt sedí na bočnice, a vyzkoušejte, jestli se lamely dají v případě potřeby vyměnit. Rošt, který nejde opravit, je po pár letech na vyhození.<br> <br> <br> <br> Posledním krokem je zkouška v obchodě. Lehněte si na sestavu na delší dobu, ne na pár vteřin. Sledujte, zda se tělo nepropadá v oblasti pánve a ramen, a zda se matrace vrací do roviny, když vstanete. Pokud se rošt pod váhou viditelně prohýbá nebo vydává ostré zvuky, je špatně zvolený. Výměna roštu bývá levnější než nová matrace, proto se vyplatí věnovat mu stejnou pozornost.<br> <br> <br> <br> 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.