For loop v TS, JS (performance)

V ES6 je nově for of loop, který iteruje nad čímkoliv, co umí iterovat, jako je např. pole a objekt.
A to mě vedlo ke krátkému a opravdu jednoduchému testu, ve kterém jsem si ověřil výkonost jedotlivých for loop konstrukcí.

Výsledky

Env NodeJS Safari Chrome Firefox
Create time 497 209 507 2793
For in 1421 7606 1534 6575
For of 11 36 31 10643
For 11 46 34 8724

Všechny časy jsou v ms.

Několik rychlých závěrů

  • Firefox už dlouho nepoužívám a do testu jsem jej vložil jen pro úplnost. Pozitivní zjištění: o nic jsem nepřišel…
  • Je super, jak je NodeJS opravdu dobře zoptimalizovaný a na prováděný kód téměř nemá žádný vliv prostředí.
  • Chrome: V8 společná s NodeJS je znát. Výkonový rozdíl vyplývá z prostředí ve kterém kód běží a dá se pochopit.
  • Safari má vlastní JS engine SquirrelFish, který je opravdu dobrý…

Poznámka na závěr

Ze zvědavosti jsem chtěl takto otestovat i PHP.

Při pokusu vytvořit pole s 10.000.000 čísly (tak jak jsem to dělal v JS) jsem se dočkal chybové hlášky Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217736 bytes) in /Users/pepa/test/looptest/test.php on line 7 a tím jsem testování v PHP odpískal.

Pravdou je, že jsem ještě zkusil zmenšít velikost vytvářeného pole na 10.000, tedy tisíckrát meněí. Jo! Pole se vytvořit podařilo. Pak jsem se zarazil. Tohle chceš vážně testovat?

nodejshosting.cz

ts-check: na cestě od JavaScriptu k TypeScriptu

Pokud svůj javascriptový kód obohatíte o JSDoc minimálně na úrovni dokumnetace funkcí, pak pomocí direktivy // @ts-check získáte typovou kontrolu, kterou nabízí například TypeScript. Jasně, že na tak kompletní, ale jakýsi posun k typovosti tu je.

Pokud pak jeětě použijete /** @type {number} */ nad řádkem s deklarací proměnné, získáte i statické typování na úrovni jendotlivých proměnných.

Nutno dodat, že tohle funguje jen v MS Visual Code editoru… Ale kdo dnes pro kódování v JS, nebo TS používá něco jiného 🙂
Direktiva ts-check musí být na začátku JS souboru.

Při volání funkce pak editor korektně podtrhne nevalidní parametr, který je jiného typu, než bylo specifikováno v JSDoc komentáři.

Editor pak i proměnou okomentovanou specifikací typu pak korektně označí chybou v místech, kde se snažíte přiřadit nekorektní hodnotu.

MongoDB 3.6: Change Stream

V minulém roce jsem se pokoušel replikovat změny v datach pod MSSQL. Šlo mi o to něajak v reálném čase odchytávat SQL příkazy INSERT, UPDATE a DELETE, abych mohl na úrvni změněných řádků v tabulce provedené změny exportovat ven z MSSQL databáze. Našel jsem nějakou nativní implementaci Microsoftu přímo v aplikaci databázového server… Funkcionalita dostupná až v poslední verzi serveru… Práce s ní strašný opruz s nutnou dávkou dalšího úsilí jak se k datům dostat. A o tom, že to budou data v skoro reálném čase si nechte zdát…

Change Stream

O to větší radost jsem měl radost z jedné z mnoho novinek v MongoDB verze 3.6, kterou je Change Stream, což je přesně to, co jsem chtěl po MSSQL. Elegance s kterou to řeší MongoDB je úžasná. Celá logika a funkcionalita je postavena nad oplogem (kde jinde…) a chová se přesně jak byste čekali: oplog je zpracováván na úrovni replica setu pro migraci informací mezi jednotlivými servery od primárního serveru k sekundárům. Ovladač MongoDB má nově funkci watch ,nad objektem collection, která vrací data z oplogu. Jak jednoduché.

Apka pro vkládáni dat do MongoDB databáze

Touto jednoduchou aplikací jen vkládám jednotlivé dokumenty do sledované kolekce. Stejně tak bych to mohl dělat přímo přes Mongo shell, nebo v reálu se mi o toto bude starat samotná aplikace, která daná data přímo spravuje.

Nic složitého: připojíte se MongoDB replica setu a vložíte do dané collection jeden záznam.

Apka pro sledování změněných dat

Apka se opět připojuje k MongoDB a ve funcki watch nad sledovanou collection dostává dat o provedených změnách. Jednodušeji to snad už nejde…

Kód jsem napsal v JavaScriptu pro NodeJS. Přepsat jej do Pythonu je brnkačka a výsledný kód, vzhledem k absenci obslužných callbackových funkcí bude mnohem kratší. Nicméně příjdete o asynchronní zpracování, které vám nabízí NodeJS.

TypeScript: začínáme

OK, pokud už nějakou dobu píšete v JavaScriptu a vašim hřištěm je backend webových aplikací, nebo desktopové aplikace, velice rychle se vám může stát, že vám vaše aplikace jednou začnou přerůstat přes hlavu. K tomu může dojít z různých důvodů, tím nejobvyklejším může být práce nad kódem v týmu, jeho sdílení a snaha o zachování nějaké rozumné kvality kódu napříč týmem a časem, třeba pro je refaktoring a podobné hrátky… Nicméně těch důvodů je víc…
Tak minimálně proto TypeScript…

typescript language

Instalujeme TypeScript

Aboslutnní minimum: předpokládám, že každý má NodeJS a NPM a proto může někde v konzoli spustit následující příkaz

Globbálně nainstalovaný balíček TypeScript vám pak umožní kompilovat vaše zdrojáky, projekty z TypeScriptu do klasickéhe JavaScriptu, abyste je pak mohli nějak deplojovat do produkčního prostředí, nebo kamkoliv jinam, kde je nějaky JavaScriptový runtime.

Nejjednodušší TypeScritová aplikace, znáte to, Hello, World

No a pak stačí pomocí výše popsaného kompilátoru přeložit do JavaScriptu:

Výsledkem je pak čistý JavaScriptový kód v souboru hello-world.js (výstup kompilátoru).

Výsledek kompilace pak spustíte klasicky pod NodeJS

Velkou výhodou kompilátoru je, že můžete specifikovat výslednou verzi generovaného JavaScriptu, ale i také specifikovat, jak bude zacházeno s moduly:

Tohle by mohlo připomínat BabelJS… 🙂

Aby to pěkně odsýpalo od ruky…

Aby práce s TypeScriptem byla co nejpohodlnější, je dobré si doinstalovat NPM balíček ts-node, který vám pak umožní spouštět vaše skripty přímo z vašeho MS Visual Code editoru.

Editovaný zdroják pak půjde spouštět přímo v editoru bez nutnosti jeho kompilace, pokud tedy máte doinstalovaný nějaký runner, jako je například Code Runner

Visual Studio Code

visual studio code in team workV poslední době jsem odzkoušel několik různých programátorských textových editorů. Výsledkem je zjištění, že nejvíc času trávím asi v mikrosoftím Visual Studio Code. A protože je přijalo i mé nejbližší pracovní prostředí, které se stále rozrůstá, rozhodl jsem se tímto postem založit tento mini seriál věnovaný mým zjištění, doporučením, tipům pro práci v tomto editoru.

Visual Studio Code: takže začínáme

Pokud s VSCodem úplně začínáte, nebo máte řekněme jen minimální zkušenosti, pak zkoukněte toto hudinuapůl dlouhé video na YouTube. Je to záznam z nějaké přednášky, kde mluvčí stručně, ale pochopitelně a hlavně použitelně a opakovatelně demonstruje sadu věcí, které se hodí snad každému, kdo chce ve VSCode pracovat.

MongoDB Detective Kit for DBAs

mongostat
The mongostat utility provides a quick overview of the status of a currently running mongod or mongos instance. mongostat is functionally similar to the UNIX/Linux file system utility vmstat, but provides data regarding mongod and mongos instances.

mongotop
mongotop provides a method to track the amount of time a MongoDB instance spends reading and writing data. mongotop provides statistics on a per-collection level. By default, mongotop returns values every second.

mongoreplay
mongoreplay is a traffic capture and replay tool for MongoDB that you can use to inspect and record commands sent to a MongoDB instance, and then replay those commands back onto another host at a later time.

mongo
mongo is an interactive JavaScript shell interface to MongoDB, which provides a powerful interface for systems administrators as well as a way for developers to test queries and operations directly with the database. mongo also provides a fully functional JavaScript environment for use with a MongoDB. This document addresses the basic invocation of the mongo shell and an overview of its usage.

profiler
The database profiler collects fine grained data about MongoDB write operations, cursors, database commands on a running mongod instance. You can enable profiling on a per-database or per-instance basis. The profiling level is also configurable when enabling profiling. The profiler is off by default.

compass
The GUI for MongoDB. Visually explore your data. Run ad hoc queries in seconds. Interact with your data with full CRUD functionality. View and optimize your query performance. Available on Linux, Mac, or Windows. Compass empowers you to make smarter decisions about indexing, document validation, and more.

mtools
mtools is a collection of helper scripts to parse, filter, and visualize MongoDB log files (mongod, mongos). mtools also includes mlaunch, a utility to quickly set up complex MongoDB test environments on a local machine.

Export dat z MongoDB

Čas od času se mi stane, že potřebuji přímo z MongoDB vyexportovat nějaký konkrétní objekt/dokument, nebo celou sadu objektů splňující zadanou podmínku, do JSONu pro nějaké další zpracování, třeba jen přeposlání někomu dál a nechce se mi použít nějaký komplexní GUI nástroj, nebo nechci hned psát JS kód.

Pak sáhnu po nástroji mongoexport, který je jako binárka přímo součásti distribučního balíčku Monga:

SocketIO v NodeJS (předpověď počasí)

Našel jsem moc hezký článek jednoduše popisující SocketIO. Takže jestli hledáte technologické řešení, jak komunikovat s návštevníkem vaší www stránky v reálném čase, pak věřte, že to už nejde jednodušeji…

MS Visual Code klávesové zkratky

Zkrakta Vyznam
⇧⌘V Nahled MD souboru
⌘K V MD view the preview side-by-side

© 2018 pepa.holla.cz

Theme by Anders NorénUp ↑