Dajbych.net


Projekt Spartan, 4. díl – vylepšení v JavaScriptu

, 6 minut čtení

JavaScript je jazyk milo­vaný i opovrho­vaný, rychlý i po­malý, v závis­losti na tom, jak mu pro­gramá­toři rozumí, jak ho použí­vají a jak moc jsou nuceni ho použí­vat. Nelze mu upřít fakt, že je ne­jrozšířenější, jenže to na webu zna­mená brzdu v dalším vývoji. Různorodé využití si žádá ro­zličné poža­davky, které ústí v roz­man­itá řešení. JavaScript se mění jed­nak v ob­jek­tově ori­en­to­vaný jazyk – ES6 a jed­nak v byte code – asm.js. Javascrip­tový en­gine Chakra bude pod­porovat oboje.

V min­ulém díle byla řeč o novém já­dru další verze In­ter­net Ex­ploreru. Tento díl se na proh­lížeč dívá jako na soft­warovou vrstvu, která za­jišťuje běh we­bové plat­formy.

JavaScript je sice ustálený název, ale ne­jdříve se tento jazyk nazý­val Mocha, později Live­Script a nyní je správný název EC­MAScript, což je název pro stan­dardi­zo­vanou podobu JavaScriptu. Stan­dardizace nes­padá pod W3 kon­sor­cium, ale pod ECMA (Evrop­ské sdružení výrobců počí­tačů). Au­tor JavaScriptu Bren­dan Eich je dnes ředitelem Mozilly. Stu­doval na uni­verz­itě v Illi­nois v kam­pusu Ur­bana–Cham­paign, ve kterém vznikl proh­lížeč Mo­saic.

ES6

Šestá verze ES­MAScriptu umožňuje použít mnoho nových kon­struktů:

Přiby­dou i ves­tavěné funkce:

Bude tak možné psát po­hodl­nější ruční kód a zároveň Type­Script bude moci pod­porovat async/await.

asm.js

Jestliže Type­Script chápeme jako nadm­nožinu JavaScriptu, pak asm.js je jeho podm­noži­nou. A to poměrně prim­i­tivní. Pravděpodobně není na Zemi více než 5 lidí, kteří dokáží ručně psát validní asm.js kód. Před­ností asm.js je však to, že ho lze přeložit do byte kódu okamžitě. Může se tak obe­jít JIT a tím se zvýší výkon na­to­lik, že může být do proh­lížeče por­tován Un­real 3 nebo Un­real 4 en­gine.

Stačí k tomu přepí­nač "use asm" a op­ti­mal­izace v proh­lížeči. Pro­tože je za­chována zpětná kom­pat­i­bilita s JavaScriptem, asm.js fun­guje te­o­ret­icky už dnes ve všech moderních proh­lížečích. Prak­ticky však ne dostatečně rychle. Herní en­giny nap­sané v C++ mo­hou být zkom­pilovány do asm.js a vykreslo­vat v proh­lížeči přes We­bGL. Vzniká tím uni­verzální we­bová herní plat­forma.

Pointer Events

Pro­gramovací jazyk sám o sobě nes­tačí. Je potřeba reago­vat na vs­tupy. We­bové API byly navrženy pro ovládání myší, jenže dnes je si­tu­ace jiná. Web neběží jen na PC, ale i na tele­fonech, tabletech i herních kon­zolích. Mi­crosoft proto navrhl API pro zpra­cování ne­jrůznějších ovlá­dacích vs­tupů naz­vané Poin­ter Events. Mozilla toto API im­ple­men­to­vala v proh­lížeči Fire­fox.

Tato tab­ulka ob­sahuje sez­nam událostí, které Poin­ter Events (HTML5) zavádějí, a uvádí je­jich ne­jbližší ek­vi­va­lenty z Win­dows Run­time (WinRT) i z .NET Frame­worku (WPF).

HTML5WinRTWPF
poin­t­eroverPoin­t­er­EnteredTouchEn­ter, MouseEn­ter, Sty­lusEn­ter
poin­t­er­enterPoin­t­er­EnteredTouchEn­ter, MouseEn­ter, Sty­lusEn­ter
poin­t­er­downPoin­t­er­PressedTouch­Down, Mouse­Down, Sty­lus­Down
poin­t­er­movePoin­t­er­MovedTouch­Move, Mouse­Move, Sty­lus­Move
poin­t­erupPoin­t­er­Re­leasedTouchUp, MouseUp, Sty­lusUp
poin­t­er­can­celPoin­t­er­CanceledMouse­Leave, Touch­Leave, Sty­lusLeave
poin­t­er­outPoin­t­erEx­itedMouse­Leave, Touch­Leave, Sty­lusLeave
poin­t­er­leavePoin­t­erEx­itedMouse­Leave, Touch­Leave, Sty­lusLeave
got­poin­t­er­cap­turePoin­t­er­MovedSty­lus­In­Range
lost­poin­t­er­cap­turePoin­t­er­Cap­tureLostSty­lusI­nAir­Move

V .NET Frame­worku má každý typ vs­tup­ního zařízení svoje zvláštní události. Tento přístup se ve Win­dows Run­time změnil. Exis­tují v něm společné události pro všechny typy vs­tupu. Tento přístup by Mi­crosoft rád viděl i na webu.

Můžete si všim­nout, že událost pro enter re­spek­tive leave se v HTML5 ro­zlišuje na over a enter re­spek­tive out a leave. HTML5 ro­zlišuje událost samot­ného el­e­mentu (over a out) od události el­e­mentu se všemi jeho vnořenými el­e­menty (enter a leave).

WebRTC

Vs­tupy ne­j­sou jen od myší, kláves­nic, sty­lusů, nebo dotykové, ale i hlasové. Hlasové vs­tupy zprostřed­kovává proh­lížeč we­bové ap­likaci po­mocí API zvaného jako We­bRTC. Zatímco Chrome, Fire­fox i Opera už toto API pod­porují, In­ter­net Ex­plorer zatím nic takového neumí. Je to však potřeba. Bingu ne­jde vyh­ledá­vací dotaz za­dat hlasově. Proto vyh­ledávání na Win­dows Phone spustí na­tivní ap­likaci, místo toho, aby se spustila ap­likace we­bová.

We­bRTC má dvě verze, starší We­bRTC v1.0 a novější Ob­ject RTC. We­bRTC v1.0 pod­poruje Chrome, Fire­fox a Opera. In­ter­net Ex­plorer bude pod­porovat novější vari­antu Ob­ject RTC.

Media Capture and Streams

Dalším API je nav­i­ga­tor.ge­tUser­Me­dia, které je navrženo pro zo­brazení obrazu z kamer zapo­jených do ste­jné sítě, jako pra­covní stan­ice. Sou­visí s tím i pod­pora video for­mátu MJPG, který je pop­ulární právě v IP kamerách. Proud dat z kamery jde vykres­lit v el­e­mentu video. We­bová kon­fig­u­race IP kamery tak bude schopná zo­brazit její obraz přímo.

GamePad API

Herní kon­zole mají speci­fický hard­ware pro vstup. Zatímco na PC se hraje po­mocí myši, kláves­nice, joy­sticku nebo volantu, gamepad má dva malé joy­sticky a víc tlačítek než myš, ale zase ne to­lik, ko­lik má kláves­nice. API pro zpra­cování vs­tupu z gamepadu nav­i­ga­tor.getGamepads neu­možňuje ani tak ovládání we­bových her na PC po­mocí připo­jeného gamepadu, jako spíše možnost cílení we­bových her i na herní kon­zole.

Pointer Lock

Cílení we­bových her na kon­zole je pěkné, ale zatím ne­jde pořádně cílit we­bové hry ani na PC. Tomu má po­moct me­toda re­quest­Poin­t­er­Lock, která změní chování kur­zoru. Místo posou­vání nudné šipky se bude otáčet poh­led na scénu ve hře. Umožní to ovlá­dat poh­led hráče ve hře po­mocí po­hybu myši.

5. díl – Win­dows API pro we­bové ap­likace