Kdy GraphQL začne brzdit a jak dotazy zrychlit?
Nejspolehlivější test zvládnete bez přístrojů. Natočte vodu do čisté sklenice, nechte ji chvíli stát při pokojové teplotě a ochutnejte. Pokud ucítíte chlor, zatuchlinu nebo kovovou pachuť, kterou dřív voda neměla, náplň už nepracuje, i když je voda čirá. Stejně tak si všímejte vodního kamene na hrnci nebo bílých map na skle. Ty ukazují, že se do vody dostává víc minerálů, než by mělo.
Vyhýbejte se třem častým chybám. První je jediný silný zdroj světla v jinak tmavé místnosti — vzniká ostrý kontrast a oči se namáhají. Druhá je osvětlení stropem za zády, které vrhá stín přímo na klávesnici. Třetí je lesklý povrch stolu nebo monitoru, který zrcadlí lampu. Řešením je matná podložka, jiné natočení monitoru a doplňkové slabší světlo v místnosti, například stojací lampa v rohu.
Nejdřív omezte opakované platby, ne ty jednorázové Projděte předplatné, členství, tarify a služby, které platíte pravidelně. U každé položky si položte jednoduchou otázku: použil jsem to za poslední dva měsíce aspoň dvakrát? Pokud ne, zrušte to nebo přejděte na nejnižší variantu. Pozor na dvě typické chyby: rušení až po dalším stržení platby a zapomínání na služby, které se platí ročně. Roční platby bolí nejvíc, protože přijdou v jednu chvíli a snadno rozhodí celý měsíc.
Nezapomeňte na autorizaci v resolverech. Kontrola oprávnění na úrovni celého dotazu nestačí, protože různá pole vyžadují různá práva. Pokud se oprávnění ověřuje až po načtení dat, zbytečně platíte za data, která se stejně neodešlou. Ověřte právo dřív, než resolver sáhne do databáze, a výsledek si v rámci požadavku zapamatujte.
Stěhování rozdělte na tři části: přípravu, přesun a zprovoznění. V přípravě se řeší smlouvy, výpovědi, úpravy prostor, objednávka stěhovací firmy a plán IT. V přesunu se stěhuje to, co provoz na chvíli nepotřebuje – archiv, zásoby, nábytek, který se nebude hned používat. Ve zprovoznění se řeší připojení, telefony, tisk, přístupové systémy a to, aby lidé věděli, kde co je. Klíčové je stanovit, která část firmy musí být funkční první den a která může dočasně pracovat v omezeném režimu.
Největší rozdíl se projeví při kontrole rovinnosti. Suchý beton srovnávejte latí průběžně během zhutňování, protože po zatvrdnutí už ho brousit nelze. Mokrou směs kontrolujte dvoumetrovou latí ihned po roztažení, dokud je ještě tvárná. Pokud se objeví propadlina, doplňte ji stejným materiálem a znovu stáhněte – nikdy ne jen vodou nebo řídkou kaší.
Začněte tím, že si jeden měsíc zapisujete všechny platby, ideálně hned po zaplacení, ne večer po paměti. Nepotřebujete aplikaci ani tabulky se vzorci, stačí poznámky v telefonu rozdělené na pevné platby, jídlo, dopravu a volné výdaje. Na konci měsíce seřaďte položky podle toho, jak často se opakují, ne podle částky. Opakované drobnosti bývají větší problém než jednorázové nákupy, protože se vrací každý týden.
Druhým místem, kde se ztrácí výkon, je přenačítání dat. GraphQL umožňuje klientovi poslat stejnou část dotazu vícekrát nebo žádat pole, která už má. Pomáhá normalizovaná klientská cache, která identifikuje objekty podle typu a identifikátoru. Na serveru se vyplatí persistentní dotazy: klient pošle hash dříve schváleného dotazu a server nemusí znovu parsovat ani validovat celý text. U opakovaných dotazů to šetří jak procesor, tak přenos.
Nejčastější chybou je N+1 problém. Resolver pro pole vrací data pro každý záznam zvlášť, takže dotaz na seznam sta objektů vygeneruje sto dotazů do databáze. Řešením je dávkování a cachování na úrovni jednoho požadavku: posbírejte klíče všech sourozeneckých objektů a načtěte je jedním dotazem. Většina serverových knihoven pro GraphQL má k tomu určený mechanismus, jen ho musíte explicitně použít v resolveru místo přímého volání databáze.
GraphQL má pověst elegantního řešení, dokud se počet polí a vnořených vazeb nerozroste do stovek. První krok k optimalizaci není technický, ale měřicí: zapněte na serveru trasování resolverů a podívejte se, které dotazy tráví čas nejvíc. Bez tohoto kroku se ladí naslepo a často se zrychlí něco, co ve skutečnosti není problém. Sledujte nejen celkovou dobu odpovědi, ale i počet volání databáze na jeden dotaz — právě tam vzniká většina zpoždění.
Hloubka dotazu a limity, které chrání server Bez omezení hloubky a složitosti dotazu se jednoho dne objeví klient, který si vyžádá strom vnořený deset úrovní, a server se zastaví. Zaveďte analýzu dotazu před jeho spuštěním: spočítejte hloubku, počet polí a odhadněte náklady podle vah jednotlivých polí. Levná pole mají nízkou váhu, pole vedoucí do databáze nebo k externí službě vysokou. Dotaz nad limit pak odmítněte s jasnou chybou, ne až po minutě čekání. Stejně důležité je omezit počet položek v seznamu — bez explicitního limitu vrátí resolver klidně celou tabulku.