JavaScript je jazyk milovaný i opovrhovaný, rychlý i pomalý, v závislosti na tom, jak mu programátoři rozumí, jak ho používají a jak moc jsou nuceni ho používat. Nelze mu upřít fakt, že je nejrozšířenější, jenže to na webu znamená brzdu v dalším vývoji. Různorodé využití si žádá rozličné požadavky, které ústí v rozmanitá řešení. JavaScript se mění jednak v objektově orientovaný jazyk – ES6 a jednak v byte code – asm.js. Javascriptový engine Chakra bude podporovat oboje.
V minulém díle byla řeč o novém jádru další verze Internet Exploreru. Tento díl se na prohlížeč dívá jako na softwarovou vrstvu, která zajišťuje běh webové platformy.
JavaScript je sice ustálený název, ale nejdříve se tento jazyk nazýval Mocha, později LiveScript a nyní je správný název ECMAScript, což je název pro standardizovanou podobu JavaScriptu. Standardizace nespadá pod W3 konsorcium, ale pod ECMA (Evropské sdružení výrobců počítačů). Autor JavaScriptu Brendan Eich je dnes ředitelem Mozilly. Studoval na univerzitě v Illinois v kampusu Urbana–Champaign, ve kterém vznikl prohlížeč Mosaic.
ES6
Šestá verze ESMAScriptu umožňuje použít mnoho nových konstruktů:
Třídy
Výchozí hodnoty parametrů funkcí
Generátory
Iterátory
Promise objekty
Proxy objekty Přibydou i vestavěné funkce:
String – codePointAt, normalize, repeat, startsWith, endsWith, contains
Math – sign, trunc, sinh, cosh, tanh, asinh, acosh, atanh, log10, log2, hypot, fround, clz32, cbrt, log1p, expm1
Object – assign, is, getOwnPropertySymbols, setPrototypeOf Bude tak možné psát pohodlnější ruční kód a zároveň TypeScript bude moci podporovat
async/await
.
asm.js
Jestliže TypeScript chápeme jako nadmnožinu JavaScriptu, pak asm.js je jeho podmnožinou. A to poměrně primitivní. Pravděpodobně není na Zemi více než 5 lidí, kteří dokáží ručně psát validní asm.js kód. Předností asm.js je však to, že ho lze přeložit do byte kódu okamžitě. Může se tak obejít JIT a tím se zvýší výkon natolik, že může být do prohlížeče portován Unreal 3 nebo Unreal 4 engine.
Stačí k tomu přepínač "use asm"
a optimalizace v prohlížeči. Protože je zachována zpětná kompatibilita s JavaScriptem, asm.js funguje teoreticky už dnes ve všech moderních prohlížečích. Prakticky však ne dostatečně rychle. Herní enginy napsané v C++ mohou být zkompilovány do asm.js a vykreslovat v prohlížeči přes WebGL. Vzniká tím univerzální webová herní platforma.
Pointer Events
Programovací jazyk sám o sobě nestačí. Je potřeba reagovat na vstupy. Webové API byly navrženy pro ovládání myší, jenže dnes je situace jiná. Web neběží jen na PC, ale i na telefonech, tabletech i herních konzolích. Microsoft proto navrhl API pro zpracování nejrůznějších ovládacích vstupů nazvané Pointer Events. Mozilla toto API implementovala v prohlížeči Firefox.
Tato tabulka obsahuje seznam událostí, které Pointer Events (HTML5) zavádějí, a uvádí jejich nejbližší ekvivalenty z Windows Runtime (WinRT) i z .NET Frameworku (WPF).
HTML5 | WinRT | WPF |
---|---|---|
pointerover | PointerEntered | TouchEnter, MouseEnter, StylusEnter |
pointerenter | PointerEntered | TouchEnter, MouseEnter, StylusEnter |
pointerdown | PointerPressed | TouchDown, MouseDown, StylusDown |
pointermove | PointerMoved | TouchMove, MouseMove, StylusMove |
pointerup | PointerReleased | TouchUp, MouseUp, StylusUp |
pointercancel | PointerCanceled | MouseLeave, TouchLeave, StylusLeave |
pointerout | PointerExited | MouseLeave, TouchLeave, StylusLeave |
pointerleave | PointerExited | MouseLeave, TouchLeave, StylusLeave |
gotpointercapture | PointerMoved | StylusInRange |
lostpointercapture | PointerCaptureLost | StylusInAirMove |
V .NET Frameworku má každý typ vstupního zařízení svoje zvláštní události. Tento přístup se ve Windows Runtime změnil. Existují v něm společné události pro všechny typy vstupu. Tento přístup by Microsoft rád viděl i na webu.
Můžete si všimnout, že událost pro enter
respektive leave
se v HTML5 rozlišuje na over
a enter
respektive out
a leave
. HTML5 rozlišuje událost samotného elementu (over
a out
) od události elementu se všemi jeho vnořenými elementy (enter
a leave
).
WebRTC
Vstupy nejsou jen od myší, klávesnic, stylusů, nebo dotykové, ale i hlasové. Hlasové vstupy zprostředkovává prohlížeč webové aplikaci pomocí API zvaného jako WebRTC. Zatímco Chrome, Firefox i Opera už toto API podporují, Internet Explorer zatím nic takového neumí. Je to však potřeba. Bingu nejde vyhledávací dotaz zadat hlasově. Proto vyhledávání na Windows Phone spustí nativní aplikaci, místo toho, aby se spustila aplikace webová.
WebRTC má dvě verze, starší WebRTC v1.0 a novější Object RTC. WebRTC v1.0 podporuje Chrome, Firefox a Opera. Internet Explorer bude podporovat novější variantu Object RTC.
Media Capture and Streams
Dalším API je navigator.getUserMedia
, které je navrženo pro zobrazení obrazu z kamer zapojených do stejné sítě, jako pracovní stanice. Souvisí s tím i podpora video formátu MJPG, který je populární právě v IP kamerách. Proud dat z kamery jde vykreslit v elementu video
. Webová konfigurace IP kamery tak bude schopná zobrazit její obraz přímo.
GamePad API
Herní konzole mají specifický hardware pro vstup. Zatímco na PC se hraje pomocí myši, klávesnice, joysticku nebo volantu, gamepad má dva malé joysticky a víc tlačítek než myš, ale zase ne tolik, kolik má klávesnice. API pro zpracování vstupu z gamepadu navigator.getGamepads
neumožňuje ani tak ovládání webových her na PC pomocí připojeného gamepadu, jako spíše možnost cílení webových her i na herní konzole.
Pointer Lock
Cílení webových her na konzole je pěkné, ale zatím nejde pořádně cílit webové hry ani na PC. Tomu má pomoct metoda requestPointerLock
, která změní chování kurzoru. Místo posouvání nudné šipky se bude otáčet pohled na scénu ve hře. Umožní to ovládat pohled hráče ve hře pomocí pohybu myši.