Upevnění lešení ke zdi: chyba, která poškodí fasádu i kotvy
Valenda s bočnicí a noční stolek tvoří v ložnici jeden vizuální celek, i když stojí každý jinde. Pokud se výšky, materiály nebo proporce rozcházejí, prostor začne působit neuspořádaně, aniž by bylo na první pohled jasné proč. Nejde o to koupit nový nábytek, ale sladit to, co už doma je, případně doplnit jen to, co chybí.
Upevnění lešení ke zdi bývá místo, kde se šetří časem a výsledkem je poškozená fasáda nebo uvolněná kotva. Rozhoduje přitom nejen to, čím kotvu do zdiva ukotvíte, ale hlavně to, kam ji umístíte a jak daleko od okrajů a rohů zůstane. Než začnete vrtat, zjistěte, z čeho je zeď — plná cihla, tvárnice, pórobeton, sendvičový panel nebo zateplený obklad. Každý materiál snese jiný typ kotvy a jinou hloubku. U zateplených fasád se nikdy nekotví do izolantu, ale vždy až do nosného zdiva pod ním, jinak kotva drží jen ve polystyrenu a při zatížení se vytrhne i s kusem omítky.
Pátým a často nejpraktičtějším řešením je stůl na kolečkách, který přes den slouží jako pracovní místo a večer ho odsunete ke zdi. Kolečka musí mít brzdu, jinak vám stůl při psaní odjíždí. Hodí se také zkontrolovat, zda kolečka nezanechávají stopy na podlaze — na vinylu nebo dřevě je lepší měkká kolečka.
Lůžko s bočnicí nebo pevným rámem vypadá bytelně, ale při každodenním používání rozhoduje něco jiného: jak snadno se k němu dostaneš, jak se na něm dá sedět a jak rychle se mění povlečení. Než začneš cokoli kupovat nebo přestavovat, změř si prostor kolem lůžka. Potřebuješ alespoň půl metru volné šířky z té strany, kde budeš nejčastěji vstávat, a stejný prostor u nohou pro pohodlné ustlání. Pokud je místa méně, je lepší zvolit kratší nebo nižší provedení než tlačit lůžko do kouta.
Prvním krokem je zavést tvrdé limity hloubky a složitosti dotazu. Hloubka se počítá podle zanoření výběrových množin, složitost podle počtu polí vynásobeného náklady na jejich resolvery. Prakticky to znamená projít produkční provoz, najít nejtěžší dotazy a podle nich nastavit práh, který legitimní klienty neodřízne, ale rekurzivní a robotické dotazy zastaví dřív, než dojdou k databázi. Limit je třeba vracet jako chybu srozumitelnou pro vývojáře, ne jako tichý timeout.
Praktické pravidlo zní: berte nominální nosnost jako horní mez za ideálních podmínek, ne jako to, co lano unese v provozu. Počítejte s rezervou na uzly, ohyby, opotřebení a stárnutí materiálu. Lano pravidelně prohlížejte po celé délce, ne jen na koncích, a při jakémkoli náznaku vnitřního poškození nebo ztvrdnutí ho vyřaďte. Bezpečná nosnost vzniká z konstrukce lana, způsobu ukončení a podmínek, ve kterých skutečně pracuje.
Druhým častým omylem je ignorování polí, která klient nechce. Resolver, který načte celý objekt včetně drahých vztahů, i když je vybráno jediné pole, plýtvá prostředky. Řešení spočívá v tom, že resolver načítá data podle skutečně vybraných polí a drahé výpočty odkládá až ve chvíli, kdy jsou opravdu potřeba. Pomáhá i důsledné používání perzistentních dotazů: klient pošle identifikátor dříve zaregistrovaného dotazu místo celého textu, což zmenší provoz a zároveň otevře cestu k přesné evidenci nákladů.
Kde se ztrácí výkon nejčastěji Typickým problémem je N+1 dotaz: resolver pro seznam položek volá databázi pro každou položku zvlášť. Řešením je dávkování a cachování v rámci jednoho požadavku — spojit požadavky na stejný typ dat do jednoho volání a výsledek podržet po dobu vyřízení dotazu. Bez toho se při hlubším dotazu počet volání databáze vynásobí a latence roste s každou vnořenou úrovní. Dávkování se vyplatí zavést dřív, než se objeví první stížnosti na rychlost.
Pozor také na mutace a stránkování. Neomezené seznamy bez kurzorového stránkování jsou časovaná bomba; vždy nastavte maximální počet položek na stránku a vracejte kurzor. U mutací se vyplatí ověřit, že vracejí jen to, co klient skutečně použije, a že neobsahují zbytečné vedlejší efekty. Monitorování je nezbytné: měřte dobu vyřízení podle tvaru dotazu, ne jen v globálním průměru, protože průměr schová právě ty nejdražší případy. Bez tohoto pohledu se optimalizace mění v hádání.
Nejčastější příčina pomalého GraphQL není databáze ani síť, ale dotaz, který si vyžádá víc dat, než je potřeba. GraphQL dává klientovi svobodu vybrat si přesně ta pole, která chce, a právě v tom se skrývá past: pokud se tato svoboda neomezí, vznikají zbytečně hluboké a široké dotazy, které zatěžují resolvery i backend. Optimalizace proto začíná u schématu, ne u serveru.
Základní rozdíl je mezi lanem šplhaným a pleteným. Šplhané lano má tři prameny stočené do spirály a nese zatížení rovnoměrně podél celé délky. Snadno se ale rozplétá na koncích a při zatížení se mírně kroutí, což vadí u kladek a navijáků. Pletené lano s jádrem a opláštěním drží tvar, nekroutí se a je odolnější proti oděru, ale jeho pevnost závisí téměř výhradně na jádru. Opláštění samo o sobě nese jen zlomek nosnosti, takže poškození pláště není kosmetická vada.