JavaScript engine
Part of a series on |
JavaScript |
---|
Lists of Frameworks and Libraries |
JavaScript Object Notation |
See also |
A JavaScript engine is a program or library which executes JavaScript code. A JavaScript engine may be a traditional interpreter, or it may utilize just-in-time compilation to bytecode in some manner.[1] Although there are several uses for a JavaScript engine, it is most commonly used in web browsers.[2][3]
History
Before the second browser war in 2008-2009, JavaScript engines (also termed JavaScript interpreter or JavaScript implementation) were simply interpreters that read and executed JavaScript source code.
The first JavaScript engine was created by Brendan Eich at Netscape Communications Corporation for the Netscape Navigator web browser. The engine, code named SpiderMonkey, is implemented in C++. It has since been updated (in JavaScript 1.5) to conform to ECMA-262 Edition 3. The Rhino engine, created primarily by Norris Boyd (also at Netscape) is a JavaScript implementation in Java. Like SpiderMonkey, Rhino is ECMA-262 Edition 3 compliant. Applications of the technology include Apple Safari 4's Nitro, Google Chrome's V8 and Mozilla Firefox 3.5's TraceMonkey.
By far the most common host environment for JavaScript is a web browser. Web browsers typically use the public application programming interface (API) to create "host objects" responsible for reflecting the Document Object Model (DOM) into JavaScript.
Performance evolution
"..previously behind-the-scenes programming technology called JavaScript is getting new visibility .. "
—CNET[3]
A typical major browser has a graphical engine and an independent JavaScript engine, which allows for easier testing, reimplementation or use in other projects. For example, Carakan is used with Presto; Nitro with WebKit; SpiderMonkey with Gecko; KJS with KHTML; Rhino by default has no layout engine. Other combinations are possible, for example, V8 with Blink in Google Chrome. The JavaScript engine gives developers access to functionality (networking, DOM handling, external events, HTML5 video, canvas and data storage) needed to control the web browser.
The JavaScript engine race: 2008 and 2009
During this period there was a race by browser developers to develop even faster JavaScript engines in response to the growing use of JavaScript frameworks and Ajax, as the user's experience is directly influenced by the browser's ability to execute the site's client-side code. In 2008, Google Chrome was praised for its JavaScript performance, but other browsers soon received new JavaScript engines which were faster. Later, Chrome won in the races of better performance. Chrome's strength is its application performance and JavaScript processing speed, both of which were independently verified by multiple websites to be the fastest amongst the major browsers of its time.[4][5][6] With the advent of WebKit's Squirrelfish and Mozilla's TraceMonkey JavaScript virtual machines, Chrome's JavaScript execution performance has been found to be slower.[7][8][9][10] Google responded with the Danish-developed V8 which boosted JavaScript performance in Google Chrome 2.
On June 2, 2008, the WebKit development team announced SquirrelFish,[11] a then-new JavaScript engine that vastly improves Safari's speed at interpreting scripts.[12] The engine was one of the new features in Safari 4, released for developers on June 11, 2008; the final JavaScript engine was called Nitro.
In January 2009, the engine then known as SquirrelFish Extreme (SFX) was enabled for Mac OS X on x86-64 architectures as it passes all tests on that platform by Apple Inc.[13] Released June 30, 2009, Firefox 3.5 includes the optimization technique that offered "performance improvements ranging between 20 and 40 times faster" compared to Firefox 3 in some cases.[14]
The JavaScript engine race: 2010
In early 2010, the Norwegian Opera browser replaced the aging Futhark with the faster Carakan, which was 2.5 times faster in early testing.[3] Others in the race, at this time, include Apple's Safari's Nitro (the engine formerly known as SquirrelFish) and Firefox's new JägerMonkey (a "cross-child of Nitro with the older TraceMonkey Engine").[2] Microsoft lagged behind, lacking a dedicated JavaScript engine and being the slowest of the major browsers. Although by mid-2010, Microsoft held out the carrot of Chakra in then unreleased Internet Explorer 9.[2] JägerMonkey began testing in the publicly released Firefox 4.0 beta in Summer 2010.[15] Safari 5, also released in Summer 2010, featured 30 percent faster JavaScript performance than Safari 4 (using the Nitro engine).[16]
2011
In 2011, Firefox 4 and Internet Explorer 9 were released with their JavaScript software.
JavaScript engines
Active projects
- Rhino, managed by the Mozilla Foundation, open source, developed entirely in Java
- SpiderMonkey, the first JavaScript engine, which powered Netscape Navigator and today powers Firefox
- V8 - open source, developed by Google in Denmark, part of Google Chrome
- JavaScriptCore - open source, marketed as Nitro and developed by Apple for Safari
- KJS - KDE's ECMAScript/JavaScript engine originally developed by Harri Porten for the KDE project's Konqueror web browser
- Chakra (JScript9), for Internet Explorer[17][18]
- Chakra (JavaScript) for Microsoft Edge
- dyn.js, open source, written by Douglas Campos and others[19]
- Nashorn, open source as part of OpenJDK, written by Oracle Java Languages and Tool Group[20]
- Juce, a C++ application framework, contains a custom embedded interpreter using part of JavaScript's syntax.
- Duktape,[21] open source, embeddable, C, MIT-licensed Javascript engine, with a focus on portability and compact footprint
- MuJS,[22] open source, embeddable and extensible interpreter developed for MuPDF.
- Higgs, open source, JIT compiler written in D[23]
- iv, ECMAScript Lexer / Parser / Interpreter / VM / method JIT written in C++[24]
Inactive projects
- Tamarin, by Adobe Labs
- Carakan, by Opera Software, used by Opera web browser version 10.50 until switching to V8 with Opera 14 (released in 2013).[25][26]
- Futhark, by Opera Software, used by Opera web browser versions 9.50 to 10.10 until replaced by Carakan in Opera 10.50 (released March 2010).
- Narcissus open source, written by Brendan Eich, who also wrote SpiderMonkey
Implementations
JavaScript is a dialect of ECMAScript, which is supported in many applications, especially web browsers. Dialects sometimes include extensions to the language, or to the standard library and related application programming interfaces (API) such as the World Wide Web Consortium (W3C) specified Document Object Model (DOM). This means that an application written in one dialect may be incompatible with another, unless the applications are written to use only a common subset of supported features and APIs ("core").
A dialect and an implementation are distinct: a dialect of a language is a significant variant of that language, while an implementation of a language (or dialect) executes a program written in that language (or dialect).
Application | Dialect and latest version | ECMAScript edition |
---|---|---|
Google Chrome, the V8 engine | JavaScript | ECMA-262, edition 5 |
Mozilla Firefox, the Gecko layout engine, SpiderMonkey, and Rhino | JavaScript 1.8.5 | ECMA-262, edition 5 |
Safari, the Nitro engine | JavaScript | ECMA-262, edition 5.1 |
Opera | ECMAScript with some JavaScript 1.5 and JScript extensions[27] |
ECMA-262, edition 5.1 |
KHTML layout engine, KDE's Konqueror | JavaScript 1.5 | ECMA-262, edition 3 |
Adobe Acrobat | JavaScript 1.5 | ECMA-262, edition 3 |
OpenLaszlo | JavaScript 1.4 | ECMA-262, edition 3 |
Max/MSP | JavaScript 1.5 | ECMA-262, edition 3 |
ANT Galio 3 | JavaScript 1.5 with RMAI extensions | ECMA-262, edition 3 |
See also
References
- ↑ Looper, Jen (2015-09-21). "A Guide to JavaScript Engines for Idiots". Telerik Developer Network. Retrieved 2016-03-17.
- 1 2 3 Shankland, Stephen (2010-03-02). "Opera 10.5 brings new JavaScript engine". CNET. CBS Interactive. Retrieved 2012-01-30.
- 1 2 3 Shankland, Stephen (February 5, 2009). "Need for speed spurs Opera JavaScript overhaul". CNET. CBS Interactive.
- ↑ Shankland, Stephen (2008-09-02). "Speed test: Google Chrome beats Firefox, IE, Safari". CNET Business Tech. CBS Interactive. Retrieved 2010-06-28.
- ↑ "Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome". PC Games Hardware. Computec Media AG. Retrieved 2010-06-28.
- ↑ "Lifehacker Speed Tests: Safari 4, Chrome 2". Lifehacker. Retrieved 2010-06-28.
- ↑ Shankland, Stephen (2008-10-31). "Third Chrome beta another notch faster". CNET. CBS Interactive. Retrieved 2010-06-28.
- ↑ Shankland, Stephen (2008-09-19). "Step aside, Chrome, for Squirrelfish Extreme". CNET. CBS Interactive. Retrieved 2010-06-29.
- ↑ "SquirrelFish Extreme: Fastest JavaScript Engine Yet". satine.org. Retrieved 2010-06-29.
- ↑ Shankland, Stephen (2008-09-03). "Firefox counters Google's browser speed test". CNET Business Tech. CBS Interactive. Retrieved 2010-06-29.
- ↑ Garen, Geoffrey (2008-06-02). "Announcing SquirrelFish". Retrieved 2008-06-11.
- ↑ Lipskas, Vygantas (2008-06-11). "Apple Safari 4". Retrieved 2008-06-11.
- ↑ "Changeset 40439 – WebKit". Trac.webkit.org. Retrieved 2016-05-08.
- ↑ Ryan Paul (2008-08-22). "Firefox to get massive JavaScript performance boost". arstechnica.com. Ars Technica © 2010 Condé Nast Digital. Retrieved 2010-06-28.
- ↑ "Firefox 4 Vision: fast, powerful, and empowering".
- ↑ Safari 5 Released
- ↑ Marius Oiaga (2010-03-20), "Internet Explorer 9 Beta Next – New IE9 Builds Every 8 Weeks", softpedia.com, SoftNews NET SRL, retrieved 2010-06-28
- ↑ "Targeting Edge vs. Legacy Engines in JsRT APIs". Microsoft.com. Retrieved 2015-09-10.
- ↑ Werner Schuster (2011-10-02), InvokeDynamic and JavaScript - New Compiler Dyn.js, Oracle Nashorn and Rhino, InfoQ
- ↑ J. Laskey (2011-07-19), Adventures in JSR-292 or How To Be A Duck Without Really Trying (PDF), Oracle
- ↑ "Duktape". Duktape. Retrieved 2016-05-08.
- ↑ "an embeddable JavaScript interpreter". MuJS. Retrieved 2016-05-08.
- ↑ "Higgs JavaScript Virtual Machine". Retrieved 2015-11-15.
- ↑ "Constellation/iv". Retrieved 2015-11-15.
- ↑ "Dev.Opera — Blog". My.opera.com. Retrieved 2016-05-08.
- ↑ "Dev.Opera — Blog". My.opera.com. Retrieved 2016-05-08.
- ↑ "Web specifications support in Opera Presto". Opera.com. Opera Software ASA. Retrieved 2010-06-28.
←
External links
- Are We Fast Yet? - A daily comparison of bleeding-edge JavaScript engines for Mozilla Firefox, Google Chrome and Apple Safari.
- Peacekeeper – Browser speed test
- SunSpider – Online JavaScript speed test
- Speed-Battle – Online JavaScript speed test
- Descripter – A different open source JavaScript engine on Java platform