5 způsobů, jak odhalit chyby v JavaScriptu přímo v prohlížeči

Z Mazovia


Samostatnou kapitolou jsou nejasné připomínky. Když reviewer napíše „tady to udělej jinak" bez vysvětlení, strávíte hledáním správného řešení víc času než samotnou úpravou. V takovém případě se vyplatí zeptat se hned, ne hádat. Další zdržení vzniká, když se během review změní zadání nebo se objeví nový požadavek. To se pak do odhadu těžko vejde, ale mělo by se to projevit jako změna rozsahu, ne jako „nějak to stihnu". Pokud se to neřeší, odhad se nafoukne na úkor kvality.

Záložka Sources slouží k zastavení běhu programu. Kliknutím na číslo řádku v levém okraji přidáte breakpoint. Když se kód na tomto místě zastaví, můžete si v panelu Scope prohlédnout hodnoty proměnných. Tlačítky Step over, Step into a Step out se posouváte po řádcích. Typická chyba: příliš mnoho breakpointů najednou. Začněte s jedním nebo dvěma v místě, kde tušíte problém. Pokud se kód zacyklí, breakpoint nikdy nenastane – pomůže tlačítko pro pozastavení skriptu.
Podmíněné breakpointy a sledování výrazů Breakpoint lze nastavit tak, aby se zastavil jen za určité situace. Klikněte pravým tlačítkem na číslo řádku a zvolte Edit breakpoint. Zadáte podmínku, například i === 5. Kód se zastaví, až když je podmínka splněna. To se hodí u velkých smyček. Do panelu Watch si přidejte konkrétní výrazy, jejichž hodnotu chcete sledovat průběžně. Nemusíte tak rozklikávat celý objekt. Další častá chyba: spoléhat jen na console.log() a zapomenout výpisy po dokončení odstranit. V produkci pak zbytečně zatěžují konzoli a mohou unikat citlivé údaje.

Před samotným přenosem je nutné projít datové typy. MySQL TINYINT(1) bývá v praxi boolean, ale PostgreSQL boolean neočekává nulu ani jedničku jako text. Datum DATETIME je v MySQL bez časové zóny, When you adored this short article as well as you wish to obtain details relating to navštívit stránku i implore you to visit the web site. kdežto timestamp with time zone v PostgreSQL časovou zónu řeší. Rozdíly jsou i u AUTO_INCREMENT, kde PostgreSQL používá GENERATED ... AS IDENTITY nebo sekvence. Pokud se typy nepřevedou explicitně, dojde k tichému posunu hodnot nebo k chybě až při vkládání.

Migrace z MySQL do PostgreSQL není změna dialektu SQL, ale změna filozofie databáze. MySQL toleruje řadu věcí, které PostgreSQL odmítne: prázdné řetězce jako ekvivalent NULL, implicitní přetypování čísel na text, nevhodné seskupování sloupců v dotazu. Právě tady vzniká většina chyb, které se projeví až po nasazení do provozu, kdy už jsou data částečně zapsaná. Prvním krokem by neměl být export, ale audit schématu a dotazů, které aplikace skutečně používá.

Pipeline, která se dá číst a oprav

Kontrola dat po přenosu rozhoduje o úspěchu Vlastní přenos dat se dělá nejlépe přes textový export a kopírování, ne přes nástroje, které se snaží mapovat typy za běhu. Data se exportují do CSV nebo do SQL skriptu, naimportují se do PostgreSQL a teprve potom se porovnávají počty řádků, kontrolní součty u číselných sloupců a náhodné vzorky u textových polí. U velkých tabulek se vyplatí přenášet data po dávkách a po každé dávce ověřit, že počet vložených řádků odpovídá očekávání. Zanedbaná kontrola je nejčastější důvod, proč se po migraci objeví chybějící záznamy.

Monorepo s více publikovanými balíčky vypadá jednoduše, dokud první balíček nezačne záviset na druhém. Od té chvíle řešíte jedinou zásadní otázku: mají všechny balíčky sdílet jedno číslo verze, nebo si každý drží vlastní? Odpověď určuje, jak složité bude vydávání, jak těžké bude sledovat kompatibilitu a kolik ruční práce vás čeká u každé změny.

Prakticky to znamená zavést jednu třídu nebo funkci, která vrací aktuální čas, a všude ji používat. V produkci vrací skutečný čas, v testech vrací čas nastavený testem. Pokud to nejde kvůli staršímu kódu, použijte knihovnu rady pro rekonstrukci zmrazení času, ale počítejte s tím, že ne všechny jazyky a běhová prostředí ji podporují stejně. U paralelních testů je zmrazení globálního času nebezpečné, protože jeden test ovlivní druhý. V takovém případě izolujte testy do samostatných procesů nebo použijte injektovaný časovač, ne globální.

Ladění JavaScriptu v prohlížeči začíná otevřením vývojářských nástrojů. Klávesa F12 nebo kombinace Ctrl+Shift+I (na Macu Cmd+Option+I) otevře panel, kde najdete záložku Console. Právě tam se zobrazují chyby i výpisy z console.log(). Pokud kód selže, konzole ukáže číslo řádku a typ chyby. Kliknutím na odkaz se přesunete přímo do zdrojového kódu. Pozor úprava interiéru na to, že konzole často vypisuje i chyby z rozšíření prohlížeče – ty s vaším kódem nesouvisí. Před laděním proto otevřete anonymní okno nebo rozšíření dočasně vypněte.

Další pastí jsou indexy a omezení. PostgreSQL nepodporuje index prefix na úrovni sloupce stejně jako MySQL, ale nabízí částečné indexy a výrazové indexy, které bývají výkonnější. Cizí klíče je nutné vytvářet až po naplnění tabulek, jinak se import výrazně zpomalí nebo selže na pořadí vkládání. Pozor také na řazení textu: MySQL utf8mb4_general_ci a PostgreSQL cs_CZ.UTF-8 řadí české znaky jinak, což se projeví v abecedních seznamech i v porovnávání klíčů.