Dajbych.net


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

, 7 minut čtení

Ja­vaScript je ja­zyk mi­lo­vaný i opo­vr­ho­vaný, rychlý i po­malý, v zá­vis­losti na tom, jak mu pro­gramá­toři ro­zumí, jak ho po­u­ží­vají a jak moc jsou nu­ceni ho po­u­ží­vat. Nelze mu upřít fakt, že je nej­roz­šíře­nější, jenže to na webu zna­mená brzdu v dal­ším vý­voji. Růz­no­rodé vyu­žití si žádá roz­ličné po­ža­davky, které ústí v roz­ma­nitá ře­šení. Ja­vaScript se mění jed­nak v ob­jek­tově ori­en­to­vaný ja­zyk – ES6 a jed­nak v byte code – asm.js. Javascrip­tový en­gine Cha­kra bude pod­po­ro­vat oboje.

mi­nulém díle byla řeč o no­vém já­dru další verze In­ter­net Ex­plo­reru. Tento díl se na pro­hlí­žeč dívá jako na soft­wa­ro­vou vrstvu, která za­jiš­ťuje běh we­bové plat­formy.

Ja­vaScript je sice ustá­lený ná­zev, ale nejdříve se tento ja­zyk na­zý­val Mo­cha, poz­ději Li­ve­Script a nyní je správný ná­zev EC­MAScript, což je ná­zev pro stan­dar­di­zo­va­nou po­dobu Ja­vaScriptu. Stan­dar­di­zace ne­spadá pod W3 kon­sor­cium, ale pod ECMA (Ev­rop­ské sdru­žení výrobců po­čítačů). Au­tor Ja­vaScriptu Bren­dan Eich je dnes ře­di­te­lem Mo­zilly. Stu­do­val na uni­ver­zitě v Il­li­nois v kam­pusu Ur­bana–Cham­paign, ve kte­rém vznikl pro­hlí­žeč Mosaic.

ES6

Šestá verze ESMAScriptu umož­ňuje po­u­žít mnoho no­vých kon­struktů:

Při­by­dou i ve­sta­věné funkce:

Bude tak možné psát po­ho­dl­nější ruční kód a zá­ro­veň Ty­pe­Script bude moci pod­po­ro­vat async/await.

asm.js

Jestliže Ty­pe­Script chá­peme jako nad­mno­žinu Ja­vaScriptu, pak asm.js je jeho pod­mno­ži­nou. A to po­měrně pri­mi­tivní. Prav­dě­po­dobně není na Zemi více než 5 lidí, kteří do­káží ručně psát va­lidní asm.js kód. Před­ností asm.js je však to, že ho lze pře­lo­ž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 pro­hlí­žeče por­to­ván Unreal 3 nebo Unreal 4 en­gine.

Stačí k tomu pře­pí­nač "use asm" a op­ti­ma­li­zace v pro­hlí­žeči. Pro­tože je zacho­vána zpětná kom­pa­ti­bi­lita s Ja­vaScrip­tem, asm.js fun­guje te­o­re­ticky už dnes ve všech mo­der­ních pro­hlí­že­čích. Prak­ticky však ne do­sta­tečně rychle. Herní en­giny na­psané v C++ mo­hou být zkom­pi­lo­vány do asm.js a vy­kres­lo­vat v pro­hlí­žeči přes We­bGL. Vzniká tím uni­ver­zální we­bová herní plat­forma.

Pointer Events

Pro­gra­mo­vací ja­zyk sám o sobě ne­stačí. Je po­třeba re­a­go­vat na vstupy. We­bové API byly na­vr­ženy pro ovlá­dání myší, jenže dnes je si­tuace jiná. Web ne­běží jen na PC, ale i na te­le­fo­nech, table­tech i her­ních kon­zo­lích. Micro­soft proto na­vrhl API pro zpra­co­vání nej­růz­něj­ších ovlá­da­cích vstupů na­zvané Poin­ter Events. Mo­zilla toto API im­ple­men­to­vala v pro­hlí­žeči Fi­re­fox.

Tato tabulka ob­sahuje se­znam udá­lostí, které Poin­ter Events (HTML5) za­vá­dějí, a uvádí je­jich nej­bližší ekvi­valenty z Win­dows Run­time (WinRT) i z .NET Fra­meworku (WPF).

HTML5 WinRT WPF
poin­te­ro­ver Poin­te­rEn­te­red Tou­chEn­ter, Mou­se­En­ter, StylusEn­ter
poin­te­ren­ter Poin­te­rEn­te­red Tou­chEn­ter, Mou­se­En­ter, StylusEn­ter
poin­ter­down Poin­ter­Pres­sed Touch­Down, Mou­se­Down, StylusDown
poin­ter­move Poin­ter­Mo­ved TouchMove, Mou­se­Move, StylusMove
poin­te­rup Poin­terRe­le­a­sed Tou­chUp, Mou­seUp, StylusUp
poin­ter­can­cel Poin­ter­Can­ce­led Mou­se­Leave, TouchLeave, Stylus­Leave
poin­te­rout Poin­te­rExi­ted Mou­se­Leave, TouchLeave, Stylus­Leave
poin­ter­leave Poin­te­rExi­ted Mou­se­Leave, TouchLeave, Stylus­Leave
got­poin­ter­cap­ture Poin­ter­Mo­ved StylusInRange
lost­poin­ter­cap­ture Poin­ter­Cap­tu­re­Lost StylusI­nAir­Move

V .NET Fra­meworku má každý typ vstup­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 spo­lečné udá­losti pro všechny typy vstupu. Tento přístup by Micro­soft rád vi­děl i na webu.

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

WebRTC

Vstupy nejsou jen od myší, klá­ves­nic, stylusů, nebo do­ty­kové, ale i hla­sové. Hla­sové vstupy zprostřed­ko­vává pro­hlí­žeč we­bové apli­kaci po­mocí API zva­ného jako We­bRTC. Zatímco Chrome, Fi­re­fox i Opera už toto API pod­po­rují, In­ter­net Ex­plo­rer zatím nic takového ne­umí. Je to však po­třeba. Bingu nejde vyhle­dá­vací do­taz za­dat hla­sově. Proto vyhle­dá­vání na Win­dows Phone spustí na­tivní apli­kaci, místo toho, aby se spus­tila apli­kace we­bová.

We­bRTC má dvě verze, starší We­bRTC v1.0 a no­vější Ob­ject RTC. We­bRTC v1.0 pod­po­ruje Chrome, Fi­re­fox a Opera. In­ter­net Ex­plo­rer bude pod­po­ro­vat no­vější va­ri­antu Ob­ject RTC.

Media Capture and Streams

Dal­ším API je na­vi­ga­tor.ge­tUser­Me­dia, které je na­vr­ženo pro zob­ra­zení ob­razu z ka­mer za­po­je­ných do stejné sítě, jako pra­covní sta­nice. Sou­visí s tím i pod­pora vi­deo for­mátu MJPG, který je po­pulární právě v IP ka­me­rách. Proud dat z ka­mery jde vy­kres­lit v ele­mentu vi­deo. We­bová kon­fi­gu­race IP ka­mery tak bude schopná zob­ra­zit její ob­raz přímo.

GamePad API

Herní kon­zole mají spe­ci­fický hard­ware pro vstup. Zatímco na PC se hraje po­mocí myši, klá­ves­nice, joysticku nebo vo­lantu, ga­me­pad má dva malé joysticky a víc tla­čí­tek než myš, ale zase ne to­lik, ko­lik má klá­ves­nice. API pro zpra­co­vání vstupu z ga­me­padu na­vi­ga­tor.get­Ga­me­pads ne­u­mož­ňuje ani tak ovlá­dání we­bo­vých her na PC po­mocí při­po­je­ného ga­me­padu, jako spíše mož­nost cílení we­bo­vých her i na herní kon­zole.

Pointer Lock

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

5. díl – Win­dows API pro we­bové apli­kace