1 post / 0 new
Guest (not verified)
Kdy je čas přepsat dotazy GraphQL na novou cache?

Před montáží si projděte nájemní smlouvu. Někde je zakázané jen vrtání, jinde i lepení na zeď. Udělejte si pár fotek stavu před zásahem, ať máte důkaz, že škoda vznikla dřív. Pokud si nejste jistí, raději zvolte variantu, která se zdi vůbec nedotýká. Ušetříte si hádku při vrácení kauce i zbytečné opravy.

Výška matrace rozhoduje víc, než si myslí

Ovoce a bylinky: co pustí chuť a co ji znič

Další častou chybou je ignorování odvětrání. Úložný prostor pod matrací je uzavřený a bez přístupu vzduchu. Pokud zvolíte matraci s neprodyšným potahem nebo paměťovou pěnou bez ventilace, začne se pod ní tvořit kondenzát a po pár měsících se objeví plíseň. Hledejte matrace s prodyšným potahem, případně s odnímatelným a pratelným svrchním dílem. Do úložného prostoru nikdy neukládejte vlhké věci, i kdyby šlo jen o ručníky po koupeli.

Druhým častým problémem je příliš obecný návrh schématu. Když má jeden typ desítky volitelných polí, klienti si je začnou tahat všechna. Rozdělte schéma podle skutečných scénářů použití a přidejte varianty, které vracají jen to, co daná obrazovka potřebuje. Vyhnete se tak zbytečnému přenosu dat i práci na serveru.

Zásnubní prsten se nenosí do vitríny, ale na ruku při mytí nádobí, cvičení, práci i spánku. Právě proto je u diamantu důležitější odolnost než velikost. Než se pustíte do výběru, ujasněte si, co znamenají čtyři písmena C – cut, colour, clarity, carat. Pořadí podle důležitosti je pro běžného nositele překvapivé: nejvíce zářivost ovlivní brus, teprve pak barva a čistota, a hmotnost v karátech je až poslední.

Většina týmů řeší výkon GraphQL tím, že přidá další vrstvu cachování nebo zvětší stroje. To je drahé a často zbytečné. Skutečný problém bývá jinde: dotazy posílají na server příliš mnoho polí, která klient nikdy nepoužije, a resolverů se ptají opakovaně na stejná data. Prvním krokem k optimalizaci proto není infrastruktura, ale měření. Zapněte si trasování jednotlivých resolverů a podívejte se, které dotazy spotřebovávají nejvíc času. Bez tohoto kroku ladíte naslepo.

Základem je omezit hloubku a šířku dotazů. GraphQL sám o sobě nebrání klientovi poslat dotaz, který rekurzivně projde celý graf. Nastavte maximální hloubku dotazu a maximální počet polí na úrovni serveru. Stejně důležité je sledovat, kolik různých resolverů se pro jeden dotaz spustí. Pokud jeden dotaz spustí stovky resolverů, je problém v návrhu schématu, ne v rychlosti databáze.

Nakonec platí, že optimalizace nemá smysl bez zpětné vazby. Zaznamenávejte dobu trvání dotazu, počet volání databáze a velikost odpovědi. Když se tyto hodnoty zhorší, poznáte to dřív, než si toho všimnou uživatelé. GraphQL je nástroj, který dává klientovi moc, ale odpovědnost za výkon zůstává na serveru. Kdo to pochopí, ten nepotřebuje přidávat další servery.

Problém N+1 se nevyřeší sám Nejčastější chybou je N+1 dotaz, kdy pro každý záznam v seznamu zavoláte databázi zvlášť. V GraphQL to vzniká nenápadně: resolver pole vrátí seznam a resolver uvnitř se ptá znovu. Řešením je dávkování přes dataloader nebo podobný mechanismus, který sesbírá požadavky v rámci jednoho tiknutí smyčky a odešle je najednou. Pozor na to, že dataloader musí být vytvořen pro každý požadavek zvlášť, jinak si klienti navzájem promíchají data a vzniknou těžko odhalitelné chyby.

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