<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.rettungsdienstblog.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=KandiNapoli711</id>
	<title>Rettungsdienst-Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rettungsdienstblog.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=KandiNapoli711"/>
	<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=Spezial:Beitr%C3%A4ge/KandiNapoli711"/>
	<updated>2026-11-11T07:07:55Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.rettungsdienstblog.eu/index.php?title=5_n%C3%A1vyk%C5%AF,_kter%C3%A9_zrychl%C3%AD_va%C5%A1e_GraphQL_dotazy&amp;diff=494819</id>
		<title>5 návyků, které zrychlí vaše GraphQL dotazy</title>
		<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=5_n%C3%A1vyk%C5%AF,_kter%C3%A9_zrychl%C3%AD_va%C5%A1e_GraphQL_dotazy&amp;diff=494819"/>
		<updated>2026-10-19T13:09:04Z</updated>

		<summary type="html">&lt;p&gt;KandiNapoli711: Die Seite wurde neu angelegt: „Většina týmů, které v roce 2026 nasadí GraphQL, řeší po měsíci provozu stejný problém: jeden dotaz z mobilní aplikace dokáže stáhnout data za celý týden a databáze padá na CPU. Přitom stačí pochopit, že GraphQL sám o sobě neoptimalizuje nic. Naopak přesouvá odpovědnost za efektivitu z backendu na klienta. Kdo to nepochopí, skončí s resolvery, které volají databázi pro každé pole zvlášť, a s latencí, která roste k…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Většina týmů, které v roce 2026 nasadí GraphQL, řeší po měsíci provozu stejný problém: jeden dotaz z mobilní aplikace dokáže stáhnout data za celý týden a databáze padá na CPU. Přitom stačí pochopit, že GraphQL sám o sobě neoptimalizuje nic. Naopak přesouvá odpovědnost za efektivitu z backendu na klienta. Kdo to nepochopí, skončí s resolvery, které volají databázi pro každé pole zvlášť, a s latencí, která roste kvadraticky s hloubkou dotazu.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Druhým návykem je řešit N+1 problém dřív, než vznikne. To znamená seskupovat požadavky na data do dávek podle klíčů, které se v jednom cyklu zpracování opakují. Pokud resolver pro každý záznam volá stejnou databázi, je to signál, že chybí dávkování. Pozor na opačný extrém: příliš agresivní cacheování může vracet zastaralá data. Proto cache nastavujte jen tam, kde je jasné, kdy se data mění, a vždy s vědomím, jak dlouho může být hodnota neplatná.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Podkroví má proti běžnému interiéru dvě zásadní odlišnosti: teplotní extrémy a vlhkost, která přichází z interiéru i zvenčí. Sádrokarton na to reaguje pohybem. Pokud ho namontujete stejně jako v obýváku v paneláku, dřív nebo později se objeví praskliny v rozích, vypouklé spoje nebo rezavé hlavičky šroubů. Většina chyb nevzniká kvůli materiálu, ale kvůli tomu, že se podcení příprava nosné konstrukce.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Omezte hloubku a složitost dotazu GraphQL ve výchozím nastavení nebrání tomu, aby klient poslal rekurzivní dotaz přes několik úrovní vztahů. Jeden takový dotaz dokáže vygenerovat tisíce databázových operací. Zaveďte limit na maximální hloubku dotazu a spočítejte složitost ještě před spuštěním. Knihovny pro analýzu AST to umí udělat za vás. Odmítněte dotaz, který přesáhne nastavený práh, a vraťte srozumitelnou chybu. Klienti se rychle naučí posílat rozumnější dotazy.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Dále se vyplatí omezit, co může klient žádat. Persistované dotazy nebo allowlist schválených operací odstraní většinu ad-hoc dotazů, které nikdo nepotřebuje. V kombinaci s krátkou cache na úrovni jednotlivých polí snížíte zátěž i bez změny resolverů. Pozor ale na cacheovaná pole, která závisí na uživateli – pokud je klíč cache pouze název pole, dostane jeden uživatel data druhého. To je bezpečnostní chyba, ne jen výkonnostní.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nejdřív zkontrolujte obsah balení proti seznamu dílů. Chybějící vložka do spoje nebo záměna delšího šroubu za kratší se pozná až při dotažení, kdy už je konstrukce napůl smontovaná. Díly rozložte podle skupin – základní rám, rohová spojka, čela, lamely, úložný prostor. Spojovací materiál vysypte do mističky, ne do hromádky na zemi.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nábytek vybírejte nízký a bez masivních horních skříněk. Otevřené police nad postelí opticky ubírají výšku, proto je nahraďte jednou úzkou policí nebo nástěnným věšákem. Postel umístěte delší stranou ke zdi, ne doprostřed místnosti. Mezi postelí a skříní nechte alespoň průchozí uličku, i kdyby to znamenalo oželet noční stolek a použít místo něj malý věšák na zeď.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Druhá věc je N+1 problém. GraphQL k němu přímo vybízí, protože každý resolver je na sobě nezávislý. Řešením není ruční cachování, ale dávkování a odkládání. Načtěte všechny klíče, které resolver potřebuje, v jednom kole, a výsledky přiřaďte zpět. Pokud používáte databázi, ověřte si, že dávkování skutečně proběhne v jednom dotazu. Častá chyba je, že vývojář přidá dávkovací vrstvu, ale zapomene ji použít u vnořených polí, takže se problém přesune o úroveň níž.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Hloubka, komplexita a limity, které musí být vynucené Bez tvrdých limitů na hloubku a komplexitu dotazu vám GraphQL umožní, aby klient poslal rekurzivní dotaz a položil server. Počítejte komplexitu staticky ještě před spuštěním resolverů. Každému poli přiřaďte váhu, vynásobte ji odhadem počtu vrácených položek a sečtěte. Pokud výsledek překročí nastavený práh, dotaz odmítněte s chybou, ne s prázdnou odpovědí. Prahy nastavte podle reálného provozu, ne podle dojmu. A hlavně: limit hloubky sám o sobě nestačí, protože útočník se vejde do hloubky pět a přesto vytáhne statisíce záznamů.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nakonec měřte po každé změně. Zavedení limitu, dávkování nebo cache bez měření znamená, že nevíte, co zabralo a co jen přesunulo problém jinam. Sledujte počet databázových dotazů na jeden GraphQL dotaz, p95 a p99 latence a podíl odmítnutých dotazů. Pokud odmítnutých dotazů prudce přibývá, prahy jsou příliš přísné a klienti to obcházejí jinudy. Optimalizace není jednorázový úkol, ale smyčka, která se opakuje s každou změnou schématu.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;První konkrétní krok je analýza dotazů v produkci. Nestačí se dívat na průměrnou dobu odezvy, protože ta zamlčuje outlier hodnoty. Sbírejte histogram latencí podle tvaru dotazu, ne podle endpointu. V praxi to znamená logovat hash dotazu spolu s časem a počtem volání databáze. Teprve pak uvidíte, že 2 % dotazů tvoří 80 % zátěže. Typická chyba je optimalizovat podle průměru a divit se, že se nic nezměnilo.&lt;/div&gt;</summary>
		<author><name>KandiNapoli711</name></author>
	</entry>
	<entry>
		<id>https://wiki.rettungsdienstblog.eu/index.php?title=Benutzer:KandiNapoli711&amp;diff=494816</id>
		<title>Benutzer:KandiNapoli711</title>
		<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=Benutzer:KandiNapoli711&amp;diff=494816"/>
		<updated>2026-10-19T13:09:00Z</updated>

		<summary type="html">&lt;p&gt;KandiNapoli711: Die Seite wurde neu angelegt: „Váš průvodce dílnou i obývákem žije už dlouho. Sdílím zde, jak si poradit v malém bytě. Nejvíc mě baví popisovat postupy krok za krokem.“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Váš průvodce dílnou i obývákem žije už dlouho. Sdílím zde, jak si poradit v malém bytě. Nejvíc mě baví popisovat postupy krok za krokem.&lt;/div&gt;</summary>
		<author><name>KandiNapoli711</name></author>
	</entry>
</feed>