N 1 dotazů v GraphQL, který zbytečně zabíjí váš výkon
Pozorování noční oblohy pouhým okem není otázkou vybavení, ale trpělivosti a správného místa. První krok je vždy stejný: najít lokalitu, kde je co nejmenší světelné znečištění. Ideálně alespoň hodinu cesty autem od většího města, daleko od pouličních lamp a osvětlených parkovišť. Rozdíl mezi městskou oblohou a venkovskou je astronomický – doslova. Zatímco ve městě spatříte jen několik desítek nejjasnějších objektů, na venkově jich jsou tisíce. Vyhněte se místům, kde svítí lampa přímo do očí, ať už pouliční, nebo třeba bezpečnostní na sousedově domě.
Nezapomínejte na měření. Optimalizace bez dat je jen hádání. Zaznamenávejte dobu trvání jednotlivých resolverů, počet databázových dotazů na jeden požadavek a velikost odpovědi. Až potom se rozhodujte, co přepsat. Mnoho týmů stráví týdny optimalizací místa, které v profilech vůbec není vidět, a skutečný problém zůstane stranou. Sledujte také chování v produkci, protože vzorce dotazů se liší od těch, které generuje testovací sada.
Základem je pestrost bez přesycení. Štěně má za den nasbírat zkušenost s různými povrchy – lino, dlažba, dřevo, tráva, písek, mokrá zem. Stejně tak s zvuky: zvonek, mixér, vysavač, déšť, dětský pláč. Pouštějte nahrávky potichu a krmte při tom. Nikdy štěně netlačte do situace, které se bojí. Když se zastaví, ztuhne nebo se snaží utéct, ubíráte na intenzitě, ne na četnosti. Cílem není, aby toho vydrželo co nejvíc, ale aby si spojilo nové věci s klidem a odměnou.
Výška stanu rozhoduje o tom, jestli se vevnitř dá sedět, převlékat a vařit. Pro každodenní spaní dvou osob je minimum 110 cm v nejvyšším bodě, lepší je 130–150 cm. Pozor na kuželovité tvary, které mají vysoký vrchol, ale po stranách se svažují tak, že se u hlavy nedá ani posadit. Měřte vždy šířku v úrovni lehátka, ne v podlaze.
Nejdřív si ujasni, kde vlastně budeš spát. Není nic divného se zeptat, jestli je pro tebe připravená postel, rozkládací gauč, matrace na zemi, nebo jen místo na podlaze. Zároveň se zeptej, jestli v pokoji budeš sám, nebo s někým dalším. Sdílení ložnice s někým, koho dobře neznáš, bývá nejčastějším zdrojem nepohodlí. Pokud tušíš, že ti vadí hluk nebo světlo, přiznej to hned – ne až ve dvě ráno, kdy už všichni spí a ty jen zíráš do stropu.
Co si vzít s sebou, i když si myslíš, že to nepotřebuješ Základem je vlastní spacák nebo alespoň deka a prostěradlo. Kamarád může mít čisté povlečení, ale jeho přikrývka může být moc těžká, moc teplá nebo naopak tenká. Vezmi si také vlastní polštář, pokud máš na spánek specifické nároky. Dále se hodí čelovka nebo malá baterka, špunty do uší a přes oči. Tyhle tři věci zaberou minimum místa a dokážou zachránit noc, když kamarád usne s puštěnou televizí nebo když jde spát později než ty. Přibal si i vlastní láhev s vodou – v cizím bytě se ti v noci nebude chtít bloudit do kuchyně.
Na co si dát pozor: neber si s sebou alkohol jako „uspávadlo". Sklenička na uvolnění je v pořádku, ale větší množství spánek rozbije – budeš se budit, potit a ráno ti bude zle. Stejně tak káva po osmé večer znamená, že do půlnoci nezamhouříš. Pokud kamarád vaří silnou kávu i po večeři, zdvořile odmítni a dej si čaj.
Přespání u kamaráda vypadá jako jednoduchá věc: vezmeš si kartáček, spacák a ráno jdeš domů. Právě v té zdánlivé samozřejmosti ale vzniká většina problémů. Nejtrapnější situace nejsou o tom, že si zapomeneš pyžamo, ale že do tří do rána nemůžeš usnout, protože ti někdo chrní, svítí do očí nebo má v pokoji vedro. Aby se z příjemného večera nestala bezesná noc, vyplatí se pár věcí promyslet předem.
Nejčastější chyba při optimalizaci GraphQL nespočívá v samotném dotazu, ale v tom, jak resolver načítá data. Když pole vrací seznam a každý prvek si sám dotahuje související záznam z databáze, vzniká takzvaný N+1 problém. Uživatel pošle jeden dotaz, ale server vykoná stovky SQL dotazů. Výsledek je pomalý a zatížení databáze roste lineárně s velikostí odpovědi. Řešení je přitom známé: dávkové načítání. Místo jednoho dotazu na prvek sesbírejte klíče a načtěte je jedním dotazem s podmínkou IN. Většina moderních knihoven pro GraphQL už dávkování podporuje, stačí ho správně nakonfigurovat a nepředávat resolverům vlastní databázové spojení místo kontextu s dávkovačem.
Běžnou chybou je také to, že lidé podceňují teplotu. V cizím bytě bývá buď přetopeno, nebo naopak zima od okna. Vezmi si proto vrstvy: tričko, mikinu, ponožky. Když ti bude horko, jednoduše se svlékneš. Když zima, oblékneš se. Než usneš, zkontroluj si, jestli v místnosti netopí radiátor naplno a jestli není otevřené okno, které v noci způsobí průvan. Není hloupé se zeptat, jestli se topení dá ztlumit.