Když se dotazy množí, GraphQL zpomalí: co s tím

Aus Rettungsdienst-Wiki
Zur Navigation springen Zur Suche springen

Dávejte pozor na délku odstavců a na rytmus. AI často produkuje stejně dlouhé věty a stejně stavěné odstavce. Rozbijte to: krátká věta vedle delší, konkrétní příklad místo obecného tvrzení, občas otázka, na kterou hned navážete odpovědí. Stejně tak hlídejte, aby každý odstavec nesl jednu hlavní myšlenku. Pokud zjistíte, že odstavec řeší tři věci najednou, rozdělte ho nebo dvě z nich vypusťte.

Každý dotaz v GraphQL je vlastně malý program, který si klient sestaví sám. Server nemá předem připravené SQL ani pevné endpointy, takže se snadno stane, že jeden požadavek spustí desítky dílčích resolverů. První krok k optimalizaci není měnit server, ale měřit. Zapněte si trasování na úrovni resolverů a podívejte se, které pole spotřebovává nejvíc času. Bez tohoto měření ladíte naslepo a obvykle opravíte něco, co není problém. Sledujte také počet volání databáze na jeden HTTP požadavek – pokud jich jsou desítky, narazili jste na N+1.

Na závěr: vyzkoušejte si celý provoz nanečisto. Vleže na horním lůžku zkuste sáhnout na noční stolek nebo polici. Posaďte se na spodní postel a předkloňte se, jako byste si chtěli vzít knihu. Pokud při tom narazíte do šikmé stěny nebo do schůdků, návrh upravte. Valenda v podkroví nemá být jen úložiště, ale místo, kde se dá skutečně spát. Každý centimetr, který ušetříte na konstrukci, se vrátí v podobě pohodlí.

Kam umístit schůdky a zábradlí, aby nepřekážely Schůdky u podkrovní valendy nesmějí stát v cestě, ale zároveň musí být bezpečné. Nejlepší je žebřík šikmý podle sklonu střechy, upevněný k bočnici postele. Každý stupeň by měl být široký aspoň 30 cm a měl by mít protiskluzovou úpravu. Zábradlí na horním lůžku je nutné, pokud je nad ním méně než 75 cm volného prostoru. Častá chyba: lidé zábradlí vynechají, protože se „tam stejně nikdo neotočí". Právě v podkroví, kde se člověk musí krčit, je ale riziko pádu největší.

Valenda s úložným prostorem v podkroví řeší dva problémy naráz: šetří podlahovou plochu a využívá šikminy, které by jinak zůstaly prázdné. Jenže podkroví má svá specifika – nízký strop, šikmé stěny a často i méně místa na manipulaci. Než začnete cokoliv kupovat nebo stavět, změřte si výšku stropu v nejnižším a nejvyšším bodě. Rozhodující je, kolik centimetrů zbývá nad matrací, když si na postel sednete. Pro pohodlné vstávání potřebujete alespoň 80 cm volného prostoru nad hlavou, jinak se budete neustále ohýbat.

Umístění je klíčové. Valendu stavte pod šikminu tak, aby delší strana kopírovala zeď. Pokud je strop v nejnižším místě pod 120 cm, nechte tuto část pro úložné boxy a postel posuňte do vyššího prostoru. Typická chyba je postavit valendu přímo pod okno – jednak vám bude vadit světlo při spaní, jednak přijdete o možnost větrat bez lezení po posteli. Lepší je orientovat lože kolmo na okno, nebo alespoň nechat u okna volný průchod.

Persistence dotazů je vhodná tam, kde klienty sami vyvíjíte. Místo posílání celého textu dotazu pošlete jeho identifikátor a server si zbytek dohledá. Ušetříte šířku pásma a zároveň získáte whitelist, který zabrání neznámým dotazům. Pozor na migrace: když dotaz změníte, musíte změnit i identifikátor, jinak klient dostane starou verzi. Uvolněné identifikátory nikdy nerecyklujte.

AI dnes vygeneruje souvislý text během několika sekund. Jenže právě ta rychlost svádí k tomu odevzdat první verzi. Autentický text ale nevzniká tím, že modelu zadáte téma a zkopírujete odpověď. Vzniká ve chvíli, kdy výstup použijete jako hrubý materiál a projdete ho vlastní hlavou i vlastní zkušeností. Pokud tento krok vynecháte, pozná to každý čtenář i redaktor.

Další páka je výběr dat. GraphQL umožňuje klientovi žádat jen to, co potřebuje, ale server mu v tom musí pomoci. Resolver nemá načítat celý objekt, pokud klient chce dvě pole. Přeložte strom dotazu na konkrétní sloupce a vazby a teprve pak sestavte dotaz do databáze. U velkých tabulek se vyplatí materiální pohledy nebo předpočítané agregace pro pole, která se opakují. Nezavádějte je ale plošně – každá předpočítaná hodnota znamená režii při zápisu a riziko nekonzistence.

Hloubka, složitost a limity jako prevence GraphQL ve výchozím stavu neomezuje, jak hluboko může klient zajít. Dotaz, který rekurzivně prochází vazby, dokáže položit databázi i při malém objemu dat. Zaveďte analýzu dotazu před jeho vykonáním: spočítejte hloubku vnoření, počet polí a odhadněte váhu podle toho, kolik záznamů může každé pole vrátit. Na základě toho nastavte tvrdý limit. Odmítnutí musí být rychlé a srozumitelné, ne až po minutě čekání. Stejně důležité je omezit počet položek vracených v seznamu – implicitní strop a explicitní stránkování patří k sobě.