1 post / 0 new
Guest (not verified)
První let s batoletem: chyba, která zbytečně prodlužuje cestu

Nakonec myslete na to, že barva stěn není izolovaný prvek. Sladění s dřevěným nábytkem je o rovnováze teplých a studených tónů. Když je dřevo výrazné, stěny mohou být klidné. Když je dřevo světlé a nenápadné, stěna může hrát prim. Vyhněte se extrémům a nechte prostor dýchat. Výsledek by měl působit přirozeně, ne jako z katalogu.

Časté chyby: kurník postavený přímo na zemi bez izolace proti vlhkosti, síť místo pletiva, dveře otevírané dovnitř (predátor si je přidrží tělem) a chybějící zámek na nočním vstupu. Další chybou je příliš malý prostor – přeplněný kurník zvyšuje stres, nemoci a klování. Počítejte alespoň půl metru čtverečního na slepici uvnitř a dvojnásobek ve výběhu.

Teplota světla a blikání rozhodují víc než výk

První místo, kde výkon mizí, je N+1 problém. Resolver pro seznam položek zavolá databázi pro každou položku zvlášť, a to i když klient žádá jen dvě pole. Řešením je dávkování: sesbírejte požadavky v rámci jednoho cyklu vykreslování a odešlete je najednou. Když to uděláte správně, počet dotazů do databáze přestane růst s počtem vrácených záznamů. Pozor ale na to, že dávkování nefunguje, pokud mezi resolvery vytváříte nové asynchronní hranice.

Na závěr: měřte průběžně a porovnávejte stejné dotazy před a po změně. Sledujte počet databázových dotazů na jeden požadavek, maximální hloubku a podíl odmítnutých dotazů. Když tyto tři údaje držíte pod kontrolou, výkon GraphQL přestane být náhodou a stane se předvídatelným.

Kapalina může ubývat i tehdy, když pod autem nic nevidíte. Malá netěsnost na hadici, chladiči nebo vodní pumpě se projeví až při zahřátí, kdy se materiál roztáhne. Prohlédněte hadice za tepla, ale s vypnutým motorem a rukavicemi. Hledejte bílé nebo narůžovělé mapy po zaschlém úniku, zpuchřelé konce hadic a stopy u přírub. Vadné víčko expanzní nádoby je další častý problém – nedrží tlak, kapalina se vaří při nižší teplotě a uniká párou.

První let s batoletem se nezdaří kvůli tomu, že dítě nezvládne letadlo. Zpravidla se to zvrtne už doma při balení, protože rodiče s sebou vezou příliš mnoho věcí a příliš málo z toho, co bude potřeba. Vyzkoušený princip je jednoduchý: vše, co potřebujete během letu, patří do jedné příruční tašky, kterou máte pod nohama, ne do odbaveného zavazadla. Pleny, náhradní oblečení, vlhčené ubrousky, jedna lahev s vodou, svačina a oblíbená hračka musí být po ruce. Zbytek se dá vyřešit.

Většina týmů řeší výkon GraphQL API ve chvíli, kdy už je pomalé. Přitom nejčastější příčina není síť ani databáze, ale to, jak se sestavuje a provádí samotný dotaz. Než začnete přidávat cache nebo škálovat servery, projděte si, co se s dotazem skutečně děje. Často zjistíte, že stačí omezit hloubku a počet polí.

U federace a více služeb sledujte, kolik mezioborových volání jeden dotaz vyvolá. Resolver, který sahá do vzdálené služby pro každý záznam, je stejný problém jako N+1, jen dražší. Zvažte, zda dané pole vůbec potřebujete resolvovat samostatně, nebo zda se dá načíst v dávce spolu s nadřazeným objektem. Zároveň měřte dobu trvání jednotlivých resolverů, ne jen celého požadavku — součet vás dovede k viníkovi rychleji.

Hloubka, složitost a limity, které se vyplatí nastavit dřív než později GraphQL umožňuje klientovi poslat libovolně zanořený dotaz. Bez limitu se z jednoduchého požadavku stane rekurzivní průchod celým grafem. Nastavte maximální hloubku a zároveň spočítejte složitost dotazu ještě před jeho provedením. Složitost počítejte podle polí a násobení, ne podle znaků. Dotaz, který projde validací, pak odmítněte dřív, než se dostane k databázi. Typická chyba je limitovat jen počet položek v seznamu a zapomenout na vnořené seznamy — výsledná složitost roste kvadraticky.

Druhá častá chyba je persisting dotazů bez rozmyslu. Automatické ukládání dotazů z produkce zrychluje opakované požadavky, ale pokud klíč závisí na pořadí polí nebo na formátování, cache se míjí. Držte se stabilního tvaru dotazu a ověřte, že se stejný dotaz z různých klientů mapuje na stejný klíč. Jinak si vytvoříte dojem zrychlení, který zmizí při první změně klienta.

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.

Navigation

User login