Difference between revisions of "Když GraphQL začne zpomalovat, rozhoduje podoba dotazu"

From shoutwiki.club
Jump to navigation Jump to search
(Created page with "Pevná zábrana nestačí, rozhoduje i okolí lůž<br><br>Pracovní stůl v malém bytě není otázka estetiky, ale geometrie. Než začnete cokoli kupovat, změřte si mís...")
 
m
 
Line 1: Line 1:
−
Pevná zábrana nestačí, rozhoduje i okolí lůž<br><br>Pracovní stůl v malém bytě není otázka estetiky, ale geometrie. Než začnete cokoli kupovat, změřte si místo a hlavně si ujasněte, kolik času u stolu opravdu strávíte. Pokud jde o dvě hodiny denně s notebookem, nepotřebujete stůl hluboký osmdesát centimetrů. Pokud pracujete osm hodin s monitorem a klávesnicí, potřebujete plnohodnotnou hloubku i šířku a je lepší ubrat jinde.<br><br>Světlo a větrání se podceňují. Dva kluci v jednom pokoji znamenají víc tepla, víc prachu a víc hluku. Ke každé posteli by mělo dosáhnout vlastní čtecí světlo, ideálně nastavitelné, aby si jeden mohl číst, když druhý spí. Hlavní stropní světlo nahraďte několika menšími zdroji, které se dají zapínat zvlášť. Větrání řešte tak, aby se dalo otevřít okno bez přerovnávání nábytku. Pokud je v pokoji málo místa, nepřidávejte další skříň — raději zvyšte úložný prostor pod postelí a nad stolem. Přebytečný nábytek dělá pokoj menším, ne větším.<br><br>Nejčastější chybou je N+1 problém: resolver pro seznam položek volá databázi pro každou položku zvlášť. Řešením je dávkování — sesbírat klíče z jednoho cyklu a načíst je jedním dotazem. V praxi to znamená zavést vrstvu, která v rámci jednoho požadavku odloží jednotlivé dotazy a sloučí je. Pozor na to, že dávkování musí být vázané na kontext požadavku, jinak si mezi souběžnými uživateli promícháte data. Zkontrolujte také, že dávkovač má limit velikosti, aby jeden požadavek nezahltil databázi tisíci klíči.<br><br>První věc, která v GraphQL rozhoduje o rychlosti, není databáze ani server, ale tvar dotazu. Klient si často řekne o celý objekt i s vnořenými vazbami, protože to je pohodlné při vývoji. Na produkci se z toho stane několikanásobné načítání, které se sčítá. Než začnete cokoliv optimalizovat, zapněte si měření času na úrovni resolverů a logujte, které pole se volá kolikrát na jeden požadavek. Bez tohoto přehledu skončíte u hádání a přepisování schématu naslepo.<br><br>Šestá praktická úprava je clona proti zvědavým pohledům. Stačí napnutá šňůra mezi dvěma háky a na ni látka, kterou na podzim sundáte a vyperete. Zkontrolujte, jestli zavěšená látka nezakrývá odtokový otvor nebo větrací mřížku. Sedmé řešení je úklid podle sezóny: na jaře vytáhněte vše, co přes zimu zůstalo venku, umyjte parapet a teprve potom rozhodujte, co se na balkon vrátí. Většina malých balkonů se neplní proto, že jsou malé, ale proto, že se na ně ukládá bez kontroly.<br><br>Nezapomínejte na výstup. Filtrování polí až po načtení z databáze znamená, že jste zbytečně přenesli data, která klient nechce. Resolver by měl vědět, která pole jsou vyžádaná, a podle toho omezit výběr už na úrovni dotazu. Stejně tak se vyhněte vracení velkých seznamů bez stránkování — kurzorové stránkování je pro GraphQL přirozenější než offsetové, protože zvládá rostoucí data bez posunů. Ověřte si ale, že kurzor je stabilní a že řazení odpovídá tomu, podle čeho se stránkuje.<br><br>Uspořádání musí počítat s tím, že kluci rostou. Nábytek, který je dnes akorát, bude za dva roky malý. Proto se vyplatí volit jednoduché, variabilní kusy, které se dají přestavět nebo posunout. Psací stůl by měl být široký alespoň tak, aby se u něj dalo psát s otevřeným sešitem a vedle položeným počítačem. Pokud se do pokoje nevejdou dva stoly, zvažte dlouhou desku podél stěny, u které se vystřídají, a doplňte ji dvěma židlemi. Vyhněte se stolům, které jsou jen na parádu a nedá se u nich pořádně sedět.<br><br>Pátým řešením je mobilní pracovní místo na kolečkách. Úzký vozík s deskou a zásuvkami lze odsunout ke zdi, když se nepracuje. Hodí se do garsoniér, kde se funkce prostoru střídají. Pozor na kolečka – musí mít brzdu, jinak se stůl při psaní rozjíždí. A kabely veďte v chráněné liště, aby se při každém přesunu nepřiskříply.<br><br>Hloubka dotazu a limity, které se vyplatí zavést předem Klient může poslat dotaz hluboko vnořený a vyplatit celý graf. Zavedení maximální hloubky a maximálního počtu polí na dotaz je levné a odhalí chyby dřív, než se dostanou k uživatelům. Počítejte ale s tím, že pevný limit se těžko ladí: příliš nízký zablokuje legitimní obrazovky, příliš vysoký nic neřeší. Lepší je kombinovat hloubku s cenou dotazu — každému poli přiřadit váhu a odmítnout požadavek nad rozpočet. Cenu pak spočítáte ještě před spuštěním resolverů.<br><br>Další vrstvou je ukládání do mezipaměti. GraphQL samo o sobě neumí cachovat odpovědi podle URL, protože vše jde na jeden koncový bod. Proto se vyplatí cachovat na úrovni resolverů podle skutečných vstupních parametrů a klíčovat podle identifikátorů, ne podle pořadí argumentů. U dotazů, které se často opakují, pomůže i trvalé ukládání dotazů: klient pošle krátký hash místo celého textu, server ho ověří proti registrovanému seznamu. Tím odpadá opakované parsování a validace.
+
Nakonec počítejte s tím, že období nerovnoměrného buzení přijde znovu při nemoci, růstovém spurtu nebo změně režimu ve školce. Nevracejte se k dřívějším pravidlům, která už neplatí, a nesnažte se situaci řídit hodinkami. Držte se základního rámce, upravujte detaily podle skutečného chování dětí a vydržte alespoň dva týdny u jedné změny. Vyrušení obou dětí najednou bývá menší problém než neustálé střídání přístupů.<br><br>Poslední věc, kterou lidé podceňují: délka ranní přípravy. Když jeden potřebuje patnáct minut a druhý padesát, plánujte podle toho, kdo má delší rutinu, a tomu dejte koupelnu jako prvnímu. Vyhnete se tak čekání ve dveřích a pohledům, které vypadají jako obvinění. Spaní v jedné místnosti není problém, pokud si ráno nepřipadáte jako na nádraží. Stačí si předem rozdělit roli, prostor a zvuk – a hádka o budík zmizí sama.<br><br>Následuje specifická část, tedy lehké lezení. Vyberte si jeden nebo dva snadné problémy nebo cestu výrazně pod svou úrovní a přelezte je s důrazem na plynulost, ne na výkon. Dobré je střídat delší výdrže na velkých chytech s krátkými pauzami a postupně zvyšovat náročnost. Pokud se objeví ostrá bolest v prstech nebo v rameni, rozcvičku přerušte – tupá únava je v pořádku, bolest ne. Mnoho lezců chybuje v tom, že rozcvičku odbydou na jednom chytu a pak hned zkouší svůj maximální projekt.<br><br>Častou chybou je spěch při otáčení. Nábytek se otáčí na místě jen tehdy, když pod ním leží kluzká podložka, jinak se musí přenést. Další chyba je podcenění prahu a přechodových lišt. Právě tam se nábytek zasekne a škrábne podlahu nejvíc. Řešením je přejezdová rampa z prkna nebo silného kartonu, která práh překlene. Po celou dobu platí, že podlaha musí být suchá a čistá – drobek písku pod fólií působí jako brusivo.<br><br>Hloubka dotazu a limity, které se vyplatí zavést předem Klient může poslat dotaz hluboko vnořený a vyplatit celý graf. Zavedení maximální hloubky a maximálního počtu polí na dotaz je levné a odhalí chyby dřív, než se dostanou k uživatelům. Počítejte ale s tím, že pevný limit se těžko ladí: příliš nízký zablokuje legitimní obrazovky, příliš vysoký nic neřeší. Lepší je kombinovat hloubku s cenou dotazu — každému poli přiřadit váhu a odmítnout požadavek nad rozpočet. Cenu pak spočítáte ještě před spuštěním resolverů.<br><br>Sledujte, zda jsou barvy teplé, nebo studené. Teplé tóny (béžová, okrová, cihlová) a studené (šedá, modrozelená, chladná bílá) se v jedné místnosti bijí, pokud mezi nimi není most. Tím mostem bývá dřevo, kov nebo textilie v neutrálním tónu. Typická chyba: chladná šedá stěna a k ní teplá oranžová židle bez jakéhokoli přechodu – výsledek vypadá jako dvě místnosti v jedné. Řešením je přidat kus v přírodním odstínu, který oba světy spojí.<br><br>Spaní dvou lidí v jedné místnosti vypadá jednoduše, dokud se nezačne řešit ranní vstávání. Jeden má budík na šestou, druhý do osmi. Jeden hned rozsvítí, druhý potřebuje ticho. Právě tady vzniká většina hádek, které pak zbytečně otravují celý den. Nejde přitom o kompromis „všichni vstaneme v sedm", ale o rozdělení ranních kroků tak, aby se navzájem nerušily.<br><br>První věc, která v GraphQL rozhoduje o rychlosti, není databáze ani server, ale tvar dotazu. Klient si často řekne o celý objekt i s vnořenými vazbami, protože to je pohodlné při vývoji. Na produkci se z toho stane několikanásobné načítání, které se sčítá. Než začnete cokoliv optimalizovat, zapněte si měření času na úrovni resolverů a logujte, které pole se volá kolikrát na jeden požadavek. Bez tohoto přehledu skončíte u hádání a přepisování schématu naslepo.<br><br>Ranní rituály bez hádek stojí na jedné věci: každý má svůj prostor a svůj čas. Není potřeba dělat všechno společně. Jeden si dá sprchu, druhý si ještě dvacet minut pospí. Dohodněte si ale jasné hranice, například že od určité hodiny už platí ticho a nikdo nepouští hlasitě hudbu ani nevaří. Pokud se domluva opakovaně nedodržuje, zapište si ji na papír a dejte na viditelné místo – ne jako trest, ale jako připomínku, že ráno se nemá řešit, co se dalo vyřešit večer.<br><br>Další vrstvou je ukládání do mezipaměti. GraphQL samo o sobě neumí cachovat odpovědi podle URL, protože vše jde na jeden koncový bod. Proto se vyplatí cachovat na úrovni resolverů podle skutečných vstupních parametrů a klíčovat podle identifikátorů, ne podle pořadí argumentů. U dotazů, které se často opakují, pomůže i trvalé ukládání dotazů: klient pošle krátký hash místo celého textu, server ho ověří proti registrovanému seznamu. Tím odpadá opakované parsování a validace.

Latest revision as of 15:35, 27 October 2026

Nakonec počítejte s tím, že období nerovnoměrného buzení přijde znovu při nemoci, růstovém spurtu nebo změně režimu ve školce. Nevracejte se k dřívějším pravidlům, která už neplatí, a nesnažte se situaci řídit hodinkami. Držte se základního rámce, upravujte detaily podle skutečného chování dětí a vydržte alespoň dva týdny u jedné změny. Vyrušení obou dětí najednou bývá menší problém než neustálé střídání přístupů.

Poslední věc, kterou lidé podceňují: délka ranní přípravy. Když jeden potřebuje patnáct minut a druhý padesát, plánujte podle toho, kdo má delší rutinu, a tomu dejte koupelnu jako prvnímu. Vyhnete se tak čekání ve dveřích a pohledům, které vypadají jako obvinění. Spaní v jedné místnosti není problém, pokud si ráno nepřipadáte jako na nádraží. Stačí si předem rozdělit roli, prostor a zvuk – a hádka o budík zmizí sama.

Následuje specifická část, tedy lehké lezení. Vyberte si jeden nebo dva snadné problémy nebo cestu výrazně pod svou úrovní a přelezte je s důrazem na plynulost, ne na výkon. Dobré je střídat delší výdrže na velkých chytech s krátkými pauzami a postupně zvyšovat náročnost. Pokud se objeví ostrá bolest v prstech nebo v rameni, rozcvičku přerušte – tupá únava je v pořádku, bolest ne. Mnoho lezců chybuje v tom, že rozcvičku odbydou na jednom chytu a pak hned zkouší svůj maximální projekt.

Častou chybou je spěch při otáčení. Nábytek se otáčí na místě jen tehdy, když pod ním leží kluzká podložka, jinak se musí přenést. Další chyba je podcenění prahu a přechodových lišt. Právě tam se nábytek zasekne a škrábne podlahu nejvíc. Řešením je přejezdová rampa z prkna nebo silného kartonu, která práh překlene. Po celou dobu platí, že podlaha musí být suchá a čistá – drobek písku pod fólií působí jako brusivo.

Hloubka dotazu a limity, které se vyplatí zavést předem Klient může poslat dotaz hluboko vnořený a vyplatit celý graf. Zavedení maximální hloubky a maximálního počtu polí na dotaz je levné a odhalí chyby dřív, než se dostanou k uživatelům. Počítejte ale s tím, že pevný limit se těžko ladí: příliš nízký zablokuje legitimní obrazovky, příliš vysoký nic neřeší. Lepší je kombinovat hloubku s cenou dotazu — každému poli přiřadit váhu a odmítnout požadavek nad rozpočet. Cenu pak spočítáte ještě před spuštěním resolverů.

Sledujte, zda jsou barvy teplé, nebo studené. Teplé tóny (béžová, okrová, cihlová) a studené (šedá, modrozelená, chladná bílá) se v jedné místnosti bijí, pokud mezi nimi není most. Tím mostem bývá dřevo, kov nebo textilie v neutrálním tónu. Typická chyba: chladná šedá stěna a k ní teplá oranžová židle bez jakéhokoli přechodu – výsledek vypadá jako dvě místnosti v jedné. Řešením je přidat kus v přírodním odstínu, který oba světy spojí.

Spaní dvou lidí v jedné místnosti vypadá jednoduše, dokud se nezačne řešit ranní vstávání. Jeden má budík na šestou, druhý do osmi. Jeden hned rozsvítí, druhý potřebuje ticho. Právě tady vzniká většina hádek, které pak zbytečně otravují celý den. Nejde přitom o kompromis „všichni vstaneme v sedm", ale o rozdělení ranních kroků tak, aby se navzájem nerušily.

První věc, která v GraphQL rozhoduje o rychlosti, není databáze ani server, ale tvar dotazu. Klient si často řekne o celý objekt i s vnořenými vazbami, protože to je pohodlné při vývoji. Na produkci se z toho stane několikanásobné načítání, které se sčítá. Než začnete cokoliv optimalizovat, zapněte si měření času na úrovni resolverů a logujte, které pole se volá kolikrát na jeden požadavek. Bez tohoto přehledu skončíte u hádání a přepisování schématu naslepo.

Ranní rituály bez hádek stojí na jedné věci: každý má svůj prostor a svůj čas. Není potřeba dělat všechno společně. Jeden si dá sprchu, druhý si ještě dvacet minut pospí. Dohodněte si ale jasné hranice, například že od určité hodiny už platí ticho a nikdo nepouští hlasitě hudbu ani nevaří. Pokud se domluva opakovaně nedodržuje, zapište si ji na papír a dejte na viditelné místo – ne jako trest, ale jako připomínku, že ráno se nemá řešit, co se dalo vyřešit večer.

Další vrstvou je ukládání do mezipaměti. GraphQL samo o sobě neumí cachovat odpovědi podle URL, protože vše jde na jeden koncový bod. Proto se vyplatí cachovat na úrovni resolverů podle skutečných vstupních parametrů a klíčovat podle identifikátorů, ne podle pořadí argumentů. U dotazů, které se často opakují, pomůže i trvalé ukládání dotazů: klient pošle krátký hash místo celého textu, server ho ověří proti registrovanému seznamu. Tím odpadá opakované parsování a validace.