Jeden dotaz, wiele polí: co rozhoduje o rychlosti GraphQL

Z Mazovia


U dřeva si dejte pozor na podtón. Teplý dub s oranžovým nádechem a studený jasan s šedým podtónem vedle sebe často nevypadají dobře, zvlášť když jsou od sebe daleko. Není nutné mít všechny dřevěné prvky ze stejného materiálu, ale měly by sdílet stejný teplý nebo studený charakter. Stejně tak kovové doplňky: mosaz, měď a zlato táhnou místnost k teplému tónu, chróm a nerez k chladnému. Míchat je lze, ale je lepší určit, který z nich bude převažovat, a druhý použít jen v drobnostech.

Prvním řešením je stůl na míru podél stěny. Nejužitečnější bývá hloubka kolem padesáti až šedesáti centimetrů, tedy dost na notebook, šálek a poznámky, ale ne tolik, aby deska zabrala půl pokoje. Desku připevněte ke zdi nebo podepřete konzolami bez nohou, které překážejí u podlahy. Pozor na zásuvky a vypínače ve zdi, které je třeba obejít. Typická chyba: deska namontovaná tak vysoko, že se při psaní zvedají ramena. Výška má odpovídat tomu, jak sedíte, ne tomu, jak to vypadá na fotce.

Půdní vestavba láká na klid a výhled, ale šikmá střecha nad postelí vytváří specifické podmínky. Teplý vzduch stoupá vzhůru a setkává se s chladným povrchem konstrukce. Tam, kde se vzduch ochladí pod rosný bod, rekonstrukce koupelny krok za krokemčne kondenzovat voda. Ta se pak usazuje ve vazbě, izolaci i na obložení. Špatně navržený odstup postele od střechy je nejčastější příčinou plísní v podkrovních ložnicích, i když je zateplení na papíře v pořádku.

Nejčastější chyba je návrh postele podle půdorysu nakresleného shora. Půdorys totiž neukáže, že v jednom rohu je šikmina níž než ve druhém. Vyřešte to jednoduše: položte na podlahu lepenkovou šablonu půdorysu zamýšlené postele a v rohu si stoupněte i lehněte. Zkuste si sednout na hranu matrace a vstát — přesně tyto pohyby odhalí, jestli je odstup dostatečný. Pokud se při vstávání musíte kroutit nebo se opírat rukou o šikminu, je postel moc utopená v rohu.

Skryjte masu, ne každodenní potře

Měření je nakonec důležitější než jakákoli technika. Zaznamenejte dobu trvání jednotlivých resolverů, počet volání úložiště na jeden požadavek a podíl dotazů, které narazí na limit. Bez těchto čísel se optimalizace mění v hádání a snadno se zavede dávkování tam, kde problém není, zatímco skutečné úzké místo zůstane skryté.

Na straně klienta se vyplatí posílat jen pole, která se skutečně vykreslí. Fragmenty pomáhají udržet dotazy čitelné, If you have any kind of concerns pertaining to where and the best ways to use Byt V PaneláKu, you can contact us at our internet site. ale snadno se rozrostou o položky, které komponenta už nepoužívá. Kontrola, která pole se v dotazu objevila a která se v datech nespotřebovala, odhalí zbytečný přenos i zbytečnou práci resolverů. Stejně tak je vhodné sledovat, kolik dotazů vzniká při jednom průchodu obrazovkou, a slučovat je tam, kde to jde bez ztráty srozumitelnosti.

Prvním konkrétním krokem je audit resolverů. U každého pole si zapište, kolik dotazů do úložiště vyvolá, když ho klient požádá ve spojení s rodičovským objektem. Typický problém vypadá tak, že se seznam položek načte jedním dotazem a pak se pro každou položku zvlášť dotahuje související záznam. Řešením je dávkování: sesbírat identifikátory z jedné úrovně a načíst je jedním dotazem, ideálně s odloženým vyhodnocením, aby se sloučily i požadavky z různých částí stromu.

Hloubka dotazu a limity, které se neobejdou bez konfigurace Bez omezení hloubky a složitosti dotazu si kdokoli může vyžádat strom, který server položí. Nastavte maximální hloubku podle skutečných potřeb aplikace a spočítejte i váhu polí, ne jen počet úrovní. Pozor na cyklické vztahy, které validátor hloubky snadno podcení. Stejně důležité je omezit počet položek v seznamech na úrovni resolveru, ne až v klientovi, protože klient nemá jak zabránit tomu, aby server načetl tisíce řádků.

Většina pomalých GraphQL API nemá problém v samotném jazyce dotazů, ale byt v paneláku tom, co se s dotazem stane na serveru. Klient pošle strukturu, kterou potřebuje, a resolver ji musí přeložit na data. Pokud se o tom nepřemýšlí předem, každý nový pohled na frontendu přidá další databázový dotaz a odezva roste nelineárně. Základem je uvědomit si, že GraphQL není magie nad databází, ale vrstva, která musí mít vlastní pravidla pro načítání dat.

Častou chybou je cachování na špatné vrstvě. HTTP cache nerozliší dva dotazy se stejnou adresou a různým tělem, takže bez klíče odvozeného z obsahu dotazu vrátí nesprávná data. Persistované dotazy nebo hashování těla dotazu tenhle problém řeší a zároveň zmenšují provoz. U dat, která se mění, je lepší krátká životnost a explicitní invalidace než dlouhá cache, po které uživatel vidí zastaralý stav.