JavaScript:
A JavaScript-motor
Olyan speciális szoftver, ami értelmezi és futtatja a JavaScript (vagy ECMAScript) kódot. Bár számos más felhasználása is létezik a JavaScript-motoroknak, leggyakrabban mégiswebböngészőkben használatosak
Története
A második, 2008-2009-es böngészőháború előtt, a JavaScript-motor (másképpen JavaScript-értelmező vagy JavaScript-implementáció) egyszerűen egy interpreter volt, ami beolvasta és sorról sorra végrehajtotta a JavaScript forráskódot.
Az első JavaScript-motort a Netscape Communications Corporationnél dolgozó Brendan Eichkódolta a Netscape Navigator webböngésző számára. A SpiderMonkey kódnevű motort C nyelven implementálta. Azóta (a JavaScript 1.5-ben) frissítették, hogy megfeleljen az ECMA-262 Edition 3 specifikációinak. A Rhino motort szintén egy Netscape-dolgozó, Norris Boyd hozta létre, Javában. Ahogy a SpiderMonkey, a Rhino is megfelel az ECMA-262 Edition 3-nak. A technológia felhasználói közé tartozik az Apple Safari 4 Nitro motorja, a Google Chrome V8 JavaScript-motorja és a Mozilla Firefox 3.5-ben található TraceMonkey.
A JavaScript messze leggyakoribb gazdakörnyezete a webböngésző. A böngészők általában a nyilvános API-t használják ún. „host object”-ek (a befogadó környezet által nyújtott objektumok) létrehozására, amik felelnek a DOM-ok JavaScriptbe való tükrözéséért.
A JavaScript-futtatómotorok másik gyakori alkalmazási környezete a webkiszolgáló. AJavaScript webszerver a HTTP-kérések és -válaszok objektumait reprezentáló host object-eket hozzáférhetővé teszi egy JavaScript nyelvű program számára, ami ezek alapján dinamikusan weboldalakat generál. A Microsoft IIS-ben használt ASP-technológiája lehetővé teszi a szerveroldali kód megírását VB Script és JScript (a Microsoft JavaScript-implementációja) nyelven egyaránt. A Jaxer egy teljesen JavaScriptben megírt webszerver; ennek az az előnye, hogy ugyanaz a kód futhat szerver- és kliensoldalon.
A teljesítmény fejlődése
„…a korábban színfalak mögötti, JavaScriptnek nevezett programozási technológia egyszerre láthatóvá válik… ”
A tipikus, nagyobb böngészők rendelkeznek egy grafikus motorral és egy attól független JavaScript-motorral, ami könnyebbé teszi a tesztelést és a más projektben való felhasználását. Ilyen kombinációk a Carakan és a Presto, a Nitro és a WebKit; a SpiderMonkey és a Gecko; aKJS és a KHTML; a Rhinónak alapértelmezésben nincs megjelenítőmotorja. Más kombinációk is elképzelhetők, például a Google Chrome-ban a V8-at használják együtt a WebKittel. A JavaScript-motor a fejlesztőknek hozzáférést enged a webböngésző vezérléséhez szükséges funkciókhoz (hálózat, DOM-kezelés, külső események, HTML5 videó, canvas- és adattárolás).
A Sunspider egy JavaScript-sebességteszt, ami több mint egy tucat, a JavaScript nyelv különböző aspektusaira koncentráló tesztben értékeli a JavaScript-motorok sebességét. A SunSpider a mérés során nem használ az alapfunkcionalitáson kívüli képességeket (nincs benneHTML-, CSS- vagy hálózatkezelés).
A JavaScript-motorok versenye: 2008 és 2009
Elindult egy versenyfutás a böngészők fejlesztői között, hogy ki tudja kifejleszteni a leggyorsabb JavaScript-motorokat. 2008-ban a Google Chrome-ot dicsérték JavaScript-teljesítménye miatt, de hamarosan egyes más böngészők JavaScript-motorjai még gyorsabbak lettek. Később a Google Chrome visszanyerte első helyét. A Chrome fő erősségei az általános webmegjelenítés és a JavaScript-feldolgozás sebessége, melyekben a többi nagy böngészővel szembeni elsőségét több weboldal egymástól függetlenül igazolta.
A WebKit Squirrelfish, illetve a Mozilla TraceMonkey JavaScript-virtuálisgépeinekmegjelenésével a Chrome JavaScript-futtatási teljesítménye lassabbnak bizonyult.A Google válasza erre a dán fejlesztésű V8 JavaScript-motor volt, ami a Google Chrome 2-ben nagy löketet adott a JavaScript-teljesítménynek.
A WebKit fejlesztői csapata 2008. június 2-án jelentette be a SquirrelFisht,az akkor új JavaScript-motort, ami jelentősen megdobta a Safari böngésző teljesítményét. A fejlesztők számára 2008. június 11-én átadott motor a Safari 4 új funkciói közé tartozott; a JavaScript-motor végleges verziója a Nitro nevet kapta.
2009 januárjában az akkor SquirrelFish Extreme (SFX) néven futó motor, ami korábban csak az x86 architektúrát támogatta, az Apple Inc. minden platformtesztjét sikeresen lefuttatta, így a Mac OS X x86-64-architektúráin is engedélyezésre került.
A 2009. június 30-án megjelent Firefox 3.5-be bekerült optimalizációs technika „egyes esetekben 20-40-szeres teljesítményjavulást” ígért a Firefox 3-hoz képest
A JavaScript-motorok versenye: 2010-
2010 elején a norvég Opera böngészőben lecserélték az öregedő Futhark motort a korai tesztekben 2,5-ször gyorsabbnak bizonyuló Carakan-ra. Versenyben volt még ekkortájt az Apple Safarijában található Nitro (korábban SquirrelFish néven futott) és a Firefox új JägerMonkey engine-je („a Nitro és a korábbi TraceMonkey Engine keresztgyereke”). A Microsoft lemaradt, böngészője az elterjedtebb böngészők közül a leglassabb volt, külön JavaScript-motor nélkül; bár 2010 közepére az akkor még ki nem adott Internet Explorer 9Chakra motorja ígéretesnek látszott.A JägerMonkey nyilvános tesztelése 2010 nyarán kezdődött a Firefox 4 bétaverziójában.
A szintén 2010 nyarán megjelent Safari 5 30%-ot gyorsult a Nitro motort használó Safari 4-hez képest. JavaScript-motorok
Mozilla
Rhino, a Mozilla Foundation kezelésében, nyílt forrású, teljes egészében Javában fejlesztve
SpiderMonkey (kódnév), a legelső JavaScript-motor, a Netscape Communicationsnél dolgozó Brendan Eich fejlesztette
TraceMonkey, a Firefox 3.5 motorja
JägerMonkey, a Mozilla Firefox 4 motorja.
Tamarin, az Adobe Labs fejlesztése
V8 – nyílt forrású, Dániában fejleszti a Google, a Google Chrome részét képezi
Opera
Carakan, az Opera Software fejleszti, az Opera 10.50-től (2010. március)
Futhark, az Opera Software fejlesztette, az Opera 10.50-ben a Carakanra cserélték
Safari
Nitro, a Safari motorja
Egyéb KJS – a KDE ECMAScript/JavaScript-motorja; eredetileg Harri Porten fejlesztette a KDE projekt Konqueror webböngészőjéhez
Narcissus; nyílt forrású, a SpiderMonkeyt is jegyző Brendan Eich műve
Chakra, Internet Explorer 9
Implementációk
A JavaScript az ECMAScript egy dialektusa, amit számos alkalmazás támogat, különösen awebböngészők. Az egyes dialektusokban időnként kiegészítik a nyelvet, a standard könyvtáratés a kapcsolódó API-kat, mint a W3C által meghatározott DOM. Ez azt is jelenti, hogy adott dialektusban megírt alkalmazás inkompatibilis lehet egy másikkal, ha nem úgy írták meg az alkalmazásokat, hogy a támogatott funkciók és API-k közös részhalmazára szorítkozzanak.
Meg kell különböztetni a dialektusokat és az implementációkat. A nyelv egy dialektusa annak szignifikáns változatát jelenti, míg egy nyelv/dialektus implementációja az adott nyelven/dialektusban írt program futtatására képes.