Rychlé optimum, nebo přesnost: co rozhoduje u dotazů GraphQL

Základem je výběr správného typu seskoku. Tandemový seskok znamená, že jste připoutáni k instruktorovi, který řídí padák i veškerou techniku. Pro první skok je to jediná rozumná volba. Absolvujete krátké školení, obléknete kombinézu a postroj, nastoupíte do letadla a po výstupu ve výšce kolem tří až čtyř kilometrů následuje volný pád. Otevírání padáku i přistání řídí instruktor. Vy jen sledujete výškoměr, dýcháte a užíváte si výhled.<br> <br> <br> <br> Většina pomalých GraphQL API nemá problém v databázi, ale v tom, jak resolver vrátí víc dat, než klient skutečně použije. Prvním krokem k optimalizaci není tuning serveru, ale měření. Zapněte na svém serveru trasování resolverů a podívejte se, které dotazy tráví čas zbytečnou prací. Bez tohoto kroku skončíte u předčasných optimalizací, které nic neřeší.<br> <br> <br> <br> Postavte se na pevnou zem a předveďte celý pohyb pomalu. Ruka, kterou budete brzdit, musí být ta, kterou máte blíž k lana při vašem směru jízdy. Procvičte uchopení lana nebo brzdicího prvku tak, aby dlaň směřovala dolů a prsty obepínaly lano zespodu. Typická chyba je uchopení zvrchu – při náhlém zpomalení vám lano proklouzne mezi prsty a spálíte si kůži. Deset opakování na sucho upevní pohyb do svalové paměti.<br> <br> <br> <br> Jak jistit, když visíš na lan<br> <br> <br> <br> Základem je omezit hloubku a šířku dotazu. GraphQL sám o sobě nebrání klientovi poslat dotaz, který rekurzivně projde celý graf. Nastavte limit hloubky podle skutečných potřeb vaší domény a spočítejte složitost dotazu před jeho spuštěním. Typická chyba je, že vývojář povolí hloubku deset, protože to někde prošlo, a pak se diví, že jeden dotaz vytíží databázi. Limit patří do produkce, ne jen do testů.<br> <br> <br> <br> Zvuk v malém bytě řešte dřív, než si koupíte cokoli dalšího. Tenká příčka mezi kanceláří a ložnicí propustí každý hovor. Pomůže těžký závěs přes dveře, koberec na podlaze a police plná knih na společné zdi – knihy tlumí vzduchem šířený hluk lépe než pěna. Pokud mluvíte na schůzkách, nekupujte mikrofon, ale nejdřív zjistěte, kde v místnosti je nejmenší ozvěna. Často to je kout s kobercem a závěsem, ne střed pokoje.<br> <br> <br> <br> Začněte vleže na břiše. První kámen položte na spodní část zad, další dva symetricky po stranách páteře, ale nikdy přímo na ni. Nechte je ležet dvě až tři minuty, dokud teplo nezačne pronikat do svalů. Poté je sundejte a přesuňte na ramena a šíji. Pokud cítíte ostré horko, kámen okamžitě odstraňte a nechte ho vychladnout. Nikdy nespěchejte a nepřidávejte tlak rukou – horký kámen má působit svou hmotností a teplem, ne silou.<br> <br> <br> <br> Mnoho lidí se ptá, zda je seskok bezpečný. Statistiky říkají, že riziko je srovnatelné s jinými adrenalinovými sporty, pokud dodržíte pravidla. Instruktoři mají stovky skoků a technika se kontroluje několikrát. Větší nebezpečí než samotný seskok představuje podcenění počasí nebo ignorování zdravotních omezení. Pokud máte epilepsii, vážné srdeční potíže nebo jste těhotná, seskok vynechejte. Vždy se předem poraďte s lékařem, pokud si nejste jistí.<br> <br> <br> <br> Nezapomínejte na sledování v produkci. Metriky po jednotlivých polích odhalí regresi dřív, než si jí všimne uživatel. Nastavte výstrahu na nárůst latence a na počet odmítnutých dotazů kvůli složitosti. A až budete měřit znovu, porovnejte stejné podmínky. Optimalizace bez opakovaného měření je jen dohad.<br> <br> <br> <br> Na straně klienta platí, že je lepší poslat dva menší dotazy než jeden obří. Fragmenty držte krátké a pojmenované, ať je z kódu vidět, co se skutečně stahuje. Vyhněte se opakovanému načítání stejných polí v jednom dotazu a sledujte, zda se fragmenty nescvrkávají do jednoho velkého celku. Persistované dotazy pak snižují objem přenášených dat a zároveň brání nečekaným tvarům dotazů v produkci.<br> <br> <br> <br> Batchování a problém N+1 Nejčastější příčinou pomalých dotazů je N+1: pro seznam položek se načítá každá vazba zvlášť. Řešením je dávkování požadavků v rámci jednoho cyklu zpracování dotazu. Sbírejte klíče, které je potřeba načíst, a proveďte jeden dotaz na databázi. Pozor na to, že dávkování musí respektovat kontext požadavku, jinak si mezi souběžnými klienty vyměníte data. Pokud si nejste jistí, začněte s dávkováním jen u vazeb, které se v trasování opakují nejvíc.<br> <br> <br> <br> <img src="https://www.freepixels.com/class=" style="max-width:430px;float:right;padding:10px 0px 10px 10px;border:0px;">Cacheování je druhá páka, ale má svá pravidla. Kešujte na úrovni resolveru podle skutečných vstupních parametrů, ne podle názvu pole. Častá chyba je kešovat výsledek citlivý na oprávnění uživatele pod klíčem, který oprávnění neobsahuje. Do klíče proto dejte identitu, roli i verzi schématu. U dat, která se mění často, použijte krátkou expiraci a raději ověřte čerstvost než trvanlivost.