Le coeur perdu – Paris

Optimalizace GraphQL dotazů, na kterou se zapomíná u N+1

Pozor na skryté náklady digitálního spoření. Směna valut nebo převod do cizí měny může být zbytečně drahý, pokud použijete běžný účet nebo kartu bez výhodnějšího kurzu. Některé aplikace nabízejí výhodnější převod, ale účtují si poplatek za vedení. Vždy si spočítejte celkovou cenu za celou cestu, ne jen kurzovní rozdíl. A další častá chyba: nechat peníze ležet na účtu, kde nic nevydělávají. I malý úrok nebo spořicí produkt s výpovědní lhůtou se vyplatí, pokud víte, že peníze nebudete potřebovat dřív než za několik měsíců.

Mezi časté chyby patří výběr barvy pouze podle fotografie v katalogu nebo podle trendu z internetu. Další chybou je ignorování podlahy a dveří – pokud mají teplý podtón, studená barva stěn vytvoří nesoulad, který bude v místnosti rušit. Někteří lidé také zapomínají na to, že barva na velké ploše vypadá vždy sytěji než na malém vzorku, proto je lepší zvolit o stupeň světlejší odstín, než jaký se líbí na vzorníku.

Než začnete cokoli přesouvat, určete, která strana je skutečně těžká. Položte na stůl běžné předměty, které používáte, a postavte se dva metry od sestavy. Těžká strana bývá ta, kde je více hmoty: vysoká skříň, cihlová stěna, tmavá barva, masivní nohy stolu. Lehká strana je ta s otevřeným prostorem, světlou barvou a nízkým nábytkem. Rozdíl nemusí být na první pohled zřejmý, proto pomáhá vyfotit sestavu a prohlédnout si ji na fotografii.

Ukládání do mezipaměti bývá přeceňované. GraphQL má jediný endpoint a často POST, takže běžné HTTP cache nefungují. Pomůže až cache na úrovni resolverů nebo normalizovaná cache na klientovi. Na serveru se osvědčuje krátkodobé uložení výsledků drahých dotazů podle hashe vstupu včetně parametrů. Nesmí se ale cachovat data, která závisí na oprávněních uživatele, jinak dojde k úniku informací mezi účty.

Poslední oblastí je sledování provozu. Bez měření se optimalizace dělá naslepo. Zaznamenávejte dobu trvání jednotlivých resolverů, počet databázových dotazů na jeden požadavek a nejčastější tvary dotazů. Teprve podle těchto dat se rozhodujte, co přepsat jako první. Typický výsledek po zavedení dávkování a limitů je několikanásobné zkrácení odezvy bez jakékoli změny na straně klienta.

U loftových postelí se často mění i to, k čemu matrace slouží. Někde jde o denní gauč, jinde o postel pro dospělého, jinde o místo pro dítě nebo hosta. Podle toho volte tuhost. Pro dospělého s vyšší hmotností je vhodnější tužší matrace s vyšší nosností, pro dítě stačí měkčí a lehčí. Pokud má matrace sloužit přes den jako sezení, počítejte s tím, že se v jednom místě rychleji proseďá – pomůže otočná matrace s oboustrannou úpravou nebo pravidelné otáčení. Vyhněte se matraci, která je výrazně měkčí, než je nosnost rámu; na loftu se každé zhoupnutí přenáší do konstrukce a spojů.

Pozor také na to, že samotné omezení hloubky nestačí. Dva dotazy se stejnou hloubkou mohou mít velmi odlišnou cenu — jeden vrací tři pole, druhý tisíce položek. Proto se vyplatí zavést vlastní výpočet složitosti, kde každé pole má přiřazenou váhu a seznamy násobí. Tento výpočet se pak používá pro ochranu backendu i pro rozhodování, zda dotaz povolit.

Na závěr to nejdůležitější: méně věcí znamená více balkonu. Než koupíte cokoli nového, odneste z balkonu všechno, co jste tam za poslední rok nepoužili. Uvidíte, že největší chybou nebyl malý prostor, ale nábytek a květináče, které jste na něm nechali zvykem.

Řešením není omezovat klienta, ale dávkovat načítání. Místo okamžitého dotazu do databáze se požadavky na stejný typ dat sesbírají během jednoho cyklu vykonávání a odešlou jako jeden dotaz s klauzulí IN. V JavaScriptovém ekosystému to řeší nástroje pro batch loading, v jiných jazycích se používá stejný princip ručně. Klíčové je pochopit, že dávkování musí být navázáno na kontext jednoho požadavku, ne na globální stav. Jinak si klienti navzájem míchají data a vznikají těžko reprodukovatelné chyby.

Hloubka dotazu a limity, které se nesmí podcenit Druhou častou chybou je ignorování hloubky a složitosti dotazu. GraphQL umožňuje rekurzivní struktury a klient může omylem nebo úmyslně poslat dotaz, který projde desítky úrovní vnoření. Bez limitu se server zbytečně zatíží a v krajním případě spadne. Praktické řešení: spočítat váhu dotazu ještě před vykonáním, stanovit maximální hloubku a maximální počet polí a překročení odmítnout s jasnou chybou. Klient tak dostane rychlou zpětnou vazbu místo čekání na timeout.

Největší problémy s výkonem GraphQL v praxi nezpůsobuje samotný jazyk dotazů, ale to, jak resolver vrátí data pro každý objekt zvlášť. Typický scénář: klient požádá o seznam položek a u každé chce informaci o autorovi nebo kategorii. Naivní resolver zavolá databázi jednou pro seznam a pak znovu pro každou položku. U stovky záznamů vznikne stovka dotazů, které server zvládne, ale u tisíců se odezva zhroutí. Tento jev se označuje jako N+1 a je nejčastější příčinou pomalých GraphQL API.

When you loved this short article and you would love to receive much more information with regards to další informace generously visit our web site.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

0
    CARRELLO
    Il tuo carrello è vuoto!Torna allo shop