JavaScript je na scéně již přes dvacet let a za tu dobu se vyvinul z jazyka umožňujícího skriptování ve webovém prohlížeči do plnohodnotného programovacího jazyka pro operační systém. V tomto článku se snažím krátce vysvětlit, jaká byla cesta JavaScriptu z prohlížeče do operačního systému, a proč k ní došlo.

Pojmy

  • API — Application Programming Interface,
  • Polyfill — JavaScriptový program nahrazující nativní API prohlížeče,
  • Transpiler — překladač programu mezi dvěma jazyky na stejné úrovni abstrakce (vs. compiler, který překládá mezi různými úrovněmi abstrakce),
  • Dialekt — vychází ze standardu jazyka, který rozšiřuje o další vlastnosti.

Trocha historie

První verze JavaScriptu byla vyvinuta pod názvem Mocha, následně byla přejmenována na LiveScript a později na JavaScript a použita ve webovém prohlížeči firmy Netscape. Microsoft pomocí reverzního inženýrství analyzoval interpret JavaScriptu firmy Netscape a následně vytvořil vlastní verzi JScript, kterou implementoval do prohlížečů Internet Explorer. JavaScript a JScript jsou často považovány za rozdílné jazyky, přestože se jedná o to samé.

Aby bylo možné udržet vývoj scriptování v prohlížečích, byl JavaScript a JScript předložen organizaci ECMA ke standardizaci, kde později vznikl standard ECMAScript. JavaScript a JScript jsou dialekty toho standardu. Mezi další dialekty patří ActionScript. Dialekty ke standardům často přidávají vlastní rozšíření, což může způsobit nekompatibilitu programů, pokud využívají specifické součásti dialektu.

Současné prohlížeče plně podporují standard ECMAScript 5.1. Pomocí transpilace a polyfillů je možné využívat také většinu novinek ve verzi ECMAScript 6 a některé z novinek v ECMAScript 7. Pro transpilaci lze využít například transpiler Babel, který navíc poskytuje polyfilly pro nedostupná API. Polyfilly jsou napsány v JavaScriptu, proto není možné doplnit API, která je nutné implementovat v runtimu jazyka.

Z prohlížeče do operačního systému

Prohlížeče

Webové prohlížeče podporující JavaScript obsahují runtime, který JavaScript spouští a řídí. Součástí JavaScript runtimu je interpretace kódu, řízení, vyvolávání eventů a poskytování API, která lze z kódu využívat, jako jsou standardní knihovny, manipulace webové stránky (DOM), vytváření HTTP požadavků (AJAX) a další. Díky JavaScriptu je možné vytvářet komplexní webové aplikace běžící na straně prohlížeče.

Node.js

Z JavaScriptu se postupem času stal kvalitní funkcionální prototypovaný programovací jazyk. Ryan Dahl proto přišel s nápadem použít JavaScript jako programovací jazyk pro operační systém. Takto vznikl Node.js, který je postavený na enginu V8 (interpret JavaScriptu) vytvořeném v Google pro prohlížeč Chrome. Node.js je tedy, stejně jako prohlížeč, runtime pro JavaScript. Opět obsahuje interpretaci kódu, řízení a vyvolávání eventů (používá event-driven non-blocking I/O model) a navíc opět zprostředkovává různá API. Mezi tyto API patří klasická práce se souborovým systémem, síťování a další API známá z jiných programovacích jazyků jako je Python, Ruby atd.

Mezi výhody Node.js patří hlavně non-blocking I/O model. Ten lze využít zejména v případě serverového nasazení Node.js, kdy se pro každé nové spojení se serverem nevytváří nové vlákno a tedy nedochází k zatížení serveru plánováním většího množství vláken na procesory. V případě Node.js běží JavaScriptový program v jednom vlákně a obsluha požadavků je prováděna pomocí callback funkcí a asynchronních volání. Na druhou stranu je pak využíváno pouze jedno CPU a je nutné zavést techniky pro lepší využití zdrojů serveru.

Závěřem

Využití JavaScriptu na serveru se stalo v posledních letech velkým hitem, to však neznamená, že je řešením všech problémů a neměla by se používat jiná technologie. Jako každý jiný programovací jazyk má své výhody a nevýhody a vhodné způsoby využití.

Pokud vás zajímá JavaScript více než jen jako jazyk pro psaní jednoduchých skriptů na změnu barvy elementu v prohlížeči a chcete pochopit jeho výhody, doporučuji:

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *