Když se večer vyjasní, většina lidí zvedne oči a vidí jen pár jasných bodů. Přitom stačí vědět, kam se dívat a kdy. Pouhým okem se dá spatřit překvapivě mnoho – od mléčné dráhy přes planety až po občasný meteor. Klíčem není drahá technika, ale trpělivost, tma a správné načasování.
Základní pravidlo zní: průchod má zůstat po celé délce jedné strany lůžka, ne jen u vstupu. U rohové sestavy to znamená, že delší hrana postele musí být přístupná bez přelézání. Pokud to dispozice dovolí, postavte valendu tak, aby její kratší konec lícoval se stěnou u dveří a delší strana zůstala volná. Ušetříte tím místo v rohu, který stejně nikdo nevyužívá, a přitom nezablokujete pohyb.
Kešování odpovědí se vyplatí jen u dotazů, které nejsou závislé na přihlášeném uživateli. Pokud kešujete na úrovni HTTP nebo celé odpovědi, musíte do klíče zahrnout všechny vstupy, které výsledek ovlivňují, včetně oprávnění. Jinak se stane, že jeden uživatel uvidí data druhého. Bezpečnější je kešovat jednotlivé entity podle ID a invalidovat je při zápisu. U mutable operací keš záměrně obcházejte a po úspěšné změně zneplatněte jen dotčené záznamy, ne celou keš.
Vyklízení dělejte po malých dávkách a vždy se třemi hromádkami: zůstává, darovat nebo prodat, vyhodit. První hromádka musí být opravdu malá. Typická chyba je nechat si věci „na případ, že se to bude hodit”. Funguje jednoduché pravidlo: pokud jste věc nepoužili za poslední rok a nejde o sezónní vybavení nebo dokumenty, odchází. U oblečení pomáhá obrátit ramínka v šatníku a po půl roce zkontrolovat, co zůstalo neotočené. U kuchyně zase vyndejte všechny hrnce a nádobí na stůl a vraťte do skříně jen to, co jste za poslední měsíc skutečně použili.
Nejčastější chybou je N+1 problém. Resolver pro seznam položek zavolá databázi jednou a pak u každé položky znovu pro její vazbu. Řešením je dávkování: sesbírejte klíče z více resolverů a načtěte je jedním dotazem. V praxi to znamená zavést krátkodobou mezipaměť na úrovni požadavku a odložit samotné načtení o jeden cyklus smyčky událostí. Pozor na to, že dávkování musí být vázané na jeden požadavek, jinak si začnete míchat data mezi uživateli a snadno vznikne únik informací.
Hloubka dotazu a složitost jako rozpočet Druhá věc je omezení toho, co klient vůbec smí poslat. Bez limitu hloubky a složitosti se dá jedním dotazem vyrobit stovek úrovní vnoření a shodit server. Zaveďte výpočet složitosti ještě před spuštěním resolverů: každé pole má cenu, vazby násobí podle počtu prvků a výsledek se porovná s rozpočtem na požadavek. Odmítněte dotaz dřív, než se cokoli načte. Typická chyba je počítat složitost až po vyhodnocení, kdy už je databáze zatížená.
Rohový kout v pokoji teenagera bývá první místo, kde se hromadí oblečení, batoh, sluchátka a školní pomůcky. Pokud ho zařídíte jednorázově podle momentální potřeby, během pár měsíců přestane stačit. Rozdíl mezi funkčním a nefunkčním rohem není v ceně nábytku, ale v tom, jestli počítáte s tím, že dítě poroste, změní školu nebo začne řešit jiné koníčky. Následující postup pomáhá nastavit kout tak, aby se nemusel za rok celý předělávat.
Výkon GraphQL API nestojí na počtu dotazů, které klient pošle, ale na tom, kolik práce server skutečně udělá. Mnoho týmů řeší pomalé odpovědi tím, že začne optimalizovat resolvery jeden po druhém, a přitom hlavní problém bývá jinde: stejná data se načítají opakovaně v rámci jednoho požadavku. Prvním krokem proto není nová knihovna, ale měření. Zapněte trasování resolverů a podívejte se, kolik dotazů do databáze vznikne pro typický dotaz s vnořenými vazbami. Teprve z tohoto čísla vycházejte.
Nezapomínejte ani na přenos dat. GraphQL vrací přesně to, co klient požádá, ale to neznamená, že je to málo. Často se posílají velké textové bloby nebo celé seznamy, ze kterých klient použije pár polí. Pomáhá stránkování s pevnými limity a to, že výchozí hodnoty jsou malé. U spojení používejte kurzorové stránkování místo offsetu, protože při vkládání nových záznamů nezpůsobuje posuny a duplicity.
Na závěr si udělejte regresní testy výkonu: uložte několik reprezentativních dotazů a měřte počet databázových dotazů i dobu odpovědi při každé změně schématu. Bez toho se optimalizace rozpadne při první nové vazbě. Rozdíl mezi dávkováním a kešováním je v tom, že dávkování snižuje počet dotazů v rámci jednoho požadavku, zatímco kešování zkracuje opakované požadavky v čase. Obojí má smysl, ale každé řeší jiný problém a míchat je bez měření vede k nepředvídatelnému chování.
If you loved this short article and you would certainly like to obtain more details concerning celý text kindly go to our web-page.
