SlideShare a Scribd company logo
1 of 22
JS Engine Performance
               Scutariu Paul
               Stirban Ionut




                               1
Table of contents




1.   Introduction
2.   V8 engine – Google Chrome 16
3.   SpiderMonkey - FireFox 9
4.   Chakra – IE 9
5.   Carakan – Opera 11
6.   Case study – Chrome vs FireFox vs IE vs Opera
7.   Bibliography




                                                     2
Introduction


■ The performance of javascript engine is an important feature of a
web browser when developing a client web application.

■ The user will obvious be more satisfied if some elements of the
application are working better. In that case he may use that
browser where the javascript engine is much faster

■ By far, v8 engine used by google is faster than other browsers like
FireFox, IE 9 or Opera. This will be shown is the last chapter at case
study

■ So, regarding these, we will talk about in this presentation about
the improvements of all these engines . Also the statistics at the end
of presentation will show the results of every engine




                                                                  3
V8 Engine – Google Chrome 1


■ V8 is Google's open source JavaScript engine

■ V8 is written in C++ and is used in Google Chrome, the open
source browser from Google

■ V8 can run standalone, or can be embedded into any C++
application

■ V8 increases performance by compiling JavaScript to native
machine code before executing it, rather than to execute bytecode
or interpreting it. Further performance increases are acheived by
employing optimization techniques such as inline caching

■ With these features, JavaScript applications running within V8 are
said to have an effective speed comparable to a compiled binary



                                                                4
V8 Engine – Google Chrome 2


Improvements:

1. fast property access + hidden classes
function Point(x,y){
          this.x = x;
          this.y = y;
}
var p1 = new Point(1,2);
var p2 = new Point(2,3);
- most JavaScript engines would store p1 and p2 like they don’t
belong to the same class, but in v8 p1 and p2 shares the same
hidden class.

2. Dynamic machine code generation
- javascript source code is compiled into machine code when first
execution occurs.

                                                                  5
V8 Engine – Google Chrome 3


Improvements:

3. Garbage collector
v8 engine:
- stops program execution when performing a garbage collection
cycle.

- processes only part of the object heap in most garbage collection
cycles. This minimizes the impact of stopping the application.

- always knows exactly where all objects and pointers are in
memory. This avoids falsely identifying objects as pointers which can
result in memory leaks.

http://code.google.com/apis/v8/design.html
http://en.wikipedia.org/wiki/Inline_caching

                                                                 6
SpiderMonkey – FireFox 9 1


■ SpiderMonkey: 30% faster

■ SpiderMonkey integrates type inference with Jaegermonkey JIT
compiler to generate efficient code

■ SpiderMonkey is written in C++ and contains an interpreter,
several JIT compilers (TraceMonkey, JägerMonkey, and IonMonkey),
a decompiler, and a garbage collector.




                                                            7
SpiderMonkey – FireFox 9 2


TraceMonkey

- TraceMonkey is the first JIT compiler written for the JavaScript
language

- The compiler was first released as part of SpiderMonkey in Firefox
3.5, providing "performance improvements ranging between 20 and
40 times faster" than the baseline interpreter in Firefox 3

- Instead of compiling whole functions, TraceMonkey operates by
recording control flow and data types during interpreter execution.
This data then informs the construction of Trace Trees, highly
specialized paths of native code




                                                                     8
SpiderMonkey – FireFox 9 3

JägerMonkey

- JägerMonkey, internally named MethodJIT, is a whole-method JIT
compiler designed to improve performance in cases where
TraceMonkey cannot generate stable native code.

- JägerMonkey operates very differently from other compilers in its
class: while typical compilers work by constructing and optimizing
a control flow graph representing the function, JägerMonkey
instead operates by iterating linearly forward through
SpiderMonkey bytecode, the internal function representation.
Although this prohibits optimizations that require instruction
reordering, JägerMonkey compilation has the advantage of being
extremely fast, which is useful for JavaScript since recompilation due
to changing variable types is frequent




                                                                 9
SpiderMonkey – FireFox 9 4

JägerMonkey

 Mozilla implemented a number of critical optimizations in
JägerMonkey, most importantly Polymorphic Inline Caches and
Type inference

http://en.wikipedia.org/wiki/Type_inference


IonMonkey

 IonMonkey is a compiler in the traditional sense: it translates
SpiderMonkey bytecode into a control flow graph, using SSA for the
intermediate representation. This architecture enables well-known
optimizations from other programming languages to be used for
JavaScript, including type specialization, function inlining, linear-
scan register allocation, dead code elimination, and loop-invariant
code motion
                                                                10
Chakra – IE 9 1

■ Chakra is the new JScript engine developed by Microsoft for their
upcoming Internet Explorer 9 (IE9) web browser

■ A distinctive feature of the engine is that it compiles scripts on a
separate CPU core, parallel to the web browser

■ Chakra improves the performance of the browser and the web
pages render and respond much faster




                                                                  11
Chakra – IE 9 2

■ Chakra, fundamentally changes the performance characteristics
of JavaScript inside Internet Explorer 9. Chakra includes a new
JavaScript compiler that compiles JavaScript source code into high-
quality native machine code, a new interpreter for executing script
on traditional web pages, and improvements to the JavaScript
runtime and libraries. You can read more details on Chakra
at TechNet.




                                                             12
Carakan – Opera 11 1

■ So how fast is Carakan? Using a regular cross-platform switch
dispatch mechanism (without any generated native code) Carakan
is currently about two and a half times faster at the SunSpider
benchmark than the ECMAScript engine in Presto 2.2 (Opera 10
Alpha). Since Opera is ported to many different hardware
architectures, this cross-platform improvement is on its own very
important

■ The native code generation in Carakan is not yet ready for full-
scale testing, but the few individual benchmark tests that it is
already compatible with runs between 5 and 50 times faster, so it is
looking promising so far




                                                                13
Carakan – Opera 11 2

Improvements:

1. Automatic object classification

-   A major improvement over this engine is in the representation of
    ECMAScript objects. Each object is assigned a class that collects
    various information about the object, such as its prototype and
    the order and names of some or all of its properties

-   Class assignment is naturally very dynamic, since ECMAScript is a
    very dynamic language, but it is organized such that objects with
    the same prototype and the same set of properties are assigned
    the same class




                                                                14
Carakan – Opera 11 3

Improvements:

1. Automatic object classification

-   This representation allows compact storage of individual objects,
    since most of the complicated structures representing the
    object's properties are stored in the class, where they are shared
    with all other objects with the same class. In real-world programs
    with many objects of the same classes, this can save significant
    amounts of memory.

-   For two objects with the same class, if the lookup of a property
    "X" on the first object gave the result Y, we know that the same
    lookup on the second object will also give the result Y. We use
    this to cache the result of individual property lookups in
    ECMAScript programs, which greatly speeds up code that
    contains many property reads or writes


                                                                 15
Carakan – Opera 11 4

Improvements:

2. Native code generation

- Although engine's bytecode instruction set permits the
implementation of a significantly faster bytecode execution engine,
there is still significant overhead involved in executing simple
ECMAScript code, such as loops performing integer arithmetics, in a
bytecode interpreter.

- In addition to generating native code from regular ECMAScript
code, we also generate native code that performs the matching of
simple regular expressions. This improves performance a lot when
searching for matches of simple regular expressions in long strings.
For sufficiently long strings, this actually makes searching for a
substring using a regular expression faster than the same search
using String.prototype.indexOf. For shorter strings, the speed is limited
by the overhead of compiling the regular expression

                                                                   16
Carakan – Opera 11 5

Improvements:

3. Register-based bytecode

- The last couple of generations of Opera's ECMAScript engine have
used a stack-based bytecode instruction set. This type of instruction
set is based around a stack of values, where most instructions "pop"
input operands from the value stack, process them, and "push" the
result back onto the value stack. Some instructions simply push
values onto the value stack, and others rearrange the values on the
stack. This gives compact bytecode programs and is easy to
generate bytecode for




                                                                17
Case study – Chrome vs FireFox vs IE vs Opera 1

Now we will se some performance statistics using v8 and kraken
benchmarks.

V8 benchmark:http://v8.googlecode.com/svn/data/benchmarks/v5/run

                                      Score
  2500


  2000


  1500


  1000                                                      2085

                                                1354
   500                      959
            629

     0
            IE 9         Opera 11.6           FireFox 9   Chrome 16




                                                                      18
Case study – Chrome vs FireFox vs IE vs Opera 2

Now we will se some performance statistics using v8 and kraken
benchmarks.

V8 benchmark:http://v8.googlecode.com/svn/data/benchmarks/v5/run

              Browser            Speed
              Google Chrome 16   2085 ms

              Opera 11.6         959 ms

              FireFox 9          1354 ms

              IE 9               629 ms




 The biggest score indicates the browser’s engine with the best
 performance




                                                                 19
Case study – Chrome vs FireFox vs IE vs Opera 3

Now we will se some performance statistics using v8 and kraken
benchmarks.

Kraken benchmark:http://krakenbenchmark.mozilla.org/

                       Time in milliseconds
 60000


 50000


 40000


 30000
                                                        55878

 20000                                   42685


 10000
            13399         15315.4

     0
          Chrome 16      FireFox 9     Opera 11.6        IE 9




                                                                 20
Case study – Chrome vs FireFox vs IE vs Opera 4

Now we will se some performance statistics using v8 and kraken
benchmarks.

Kraken benchmark:http://krakenbenchmark.mozilla.org/

              Browser            Speed
              Google Chrome 16   13399.3ms +/- 1.8%
              FireFox 9          15315.4ms +/- 0.6%
              Opera 11.6         42685.0ms +/- 1.2%
              IE 9               55878.0ms +/- 1.8%




 Now time is being calculated in miliseconds and obvious the lowest is
 the best engine

 As we can see, Google’s v8 is the best engine by far, and the
 statistics show this.


                                                                 21
Bibliography

http://code.google.com/apis/v8/design.html
http://blog.mozilla.com/blog/2011/12/20/major-javascript-enhancements-
make-firefox-speedy-up-to-30-faster/
http://my.opera.com/core/blog/2009/02/04/carakan
http://www.thewindowsclub.com/microsofts-new-javascript-engine-
codenamed-chakra-for-internet-explorer-9
http://en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine)
http://en.wikipedia.org/wiki/V8_(JavaScript_engine)




                                                            22

More Related Content

What's hot

Jmeter Performance Testing
Jmeter Performance TestingJmeter Performance Testing
Jmeter Performance Testing
Atul Pant
 
JMeter - Performance testing your webapp
JMeter - Performance testing your webappJMeter - Performance testing your webapp
JMeter - Performance testing your webapp
Amit Solanki
 

What's hot (20)

Typescript ppt
Typescript pptTypescript ppt
Typescript ppt
 
Selenium Architecture
Selenium ArchitectureSelenium Architecture
Selenium Architecture
 
The JVM is your friend
The JVM is your friendThe JVM is your friend
The JVM is your friend
 
Callback Function
Callback FunctionCallback Function
Callback Function
 
History of java'
History of java'History of java'
History of java'
 
Event In JavaScript
Event In JavaScriptEvent In JavaScript
Event In JavaScript
 
Jmeter Performance Testing
Jmeter Performance TestingJmeter Performance Testing
Jmeter Performance Testing
 
Core Java
Core JavaCore Java
Core Java
 
JMeter - Performance testing your webapp
JMeter - Performance testing your webappJMeter - Performance testing your webapp
JMeter - Performance testing your webapp
 
Modern Python Testing
Modern Python TestingModern Python Testing
Modern Python Testing
 
Advance Java Topics (J2EE)
Advance Java Topics (J2EE)Advance Java Topics (J2EE)
Advance Java Topics (J2EE)
 
Unit tests in node.js
Unit tests in node.jsUnit tests in node.js
Unit tests in node.js
 
What is Compiler?
What is Compiler?What is Compiler?
What is Compiler?
 
Swift Programming Language
Swift Programming LanguageSwift Programming Language
Swift Programming Language
 
Activities, Fragments, and Events
Activities, Fragments, and EventsActivities, Fragments, and Events
Activities, Fragments, and Events
 
Presentation of programming languages for beginners
Presentation of programming languages for beginnersPresentation of programming languages for beginners
Presentation of programming languages for beginners
 
Introduction to programming
Introduction to programmingIntroduction to programming
Introduction to programming
 
Ajax ppt
Ajax pptAjax ppt
Ajax ppt
 
Introduction to Rust language programming
Introduction to Rust language programmingIntroduction to Rust language programming
Introduction to Rust language programming
 
Jquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsJquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript Basics
 

Similar to Js engine performance

EXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
EXPath Webapp - CXAN: a case-study for Servlex, an XML web frameworkEXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
EXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
Florent Georges
 

Similar to Js engine performance (20)

Jsep
JsepJsep
Jsep
 
Chrome v8 web: the open source javascript
Chrome v8 web: the open source javascriptChrome v8 web: the open source javascript
Chrome v8 web: the open source javascript
 
Apache Big Data Europe 2016
Apache Big Data Europe 2016Apache Big Data Europe 2016
Apache Big Data Europe 2016
 
What's wrong with web
What's wrong with webWhat's wrong with web
What's wrong with web
 
Java dev mar_2021_keynote
Java dev mar_2021_keynoteJava dev mar_2021_keynote
Java dev mar_2021_keynote
 
Java performance tuning
Java performance tuningJava performance tuning
Java performance tuning
 
Isomorphic JavaScript with Nashorn
Isomorphic JavaScript with NashornIsomorphic JavaScript with Nashorn
Isomorphic JavaScript with Nashorn
 
A Java Implementer's Guide to Boosting Apache Spark Performance by Tim Ellison.
A Java Implementer's Guide to Boosting Apache Spark Performance by Tim Ellison.A Java Implementer's Guide to Boosting Apache Spark Performance by Tim Ellison.
A Java Implementer's Guide to Boosting Apache Spark Performance by Tim Ellison.
 
The next step from Microsoft - Vnext (Srdjan Poznic)
The next step from Microsoft - Vnext (Srdjan Poznic)The next step from Microsoft - Vnext (Srdjan Poznic)
The next step from Microsoft - Vnext (Srdjan Poznic)
 
Developing Microservices using Spring - Beginner's Guide
Developing Microservices using Spring - Beginner's GuideDeveloping Microservices using Spring - Beginner's Guide
Developing Microservices using Spring - Beginner's Guide
 
EXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
EXPath Webapp - CXAN: a case-study for Servlex, an XML web frameworkEXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
EXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
 
Phil Basford - machine learning at scale with aws sage maker
Phil Basford - machine learning at scale with aws sage makerPhil Basford - machine learning at scale with aws sage maker
Phil Basford - machine learning at scale with aws sage maker
 
Machine learning at scale with aws sage maker
Machine learning at scale with aws sage makerMachine learning at scale with aws sage maker
Machine learning at scale with aws sage maker
 
Reactjs Basics
Reactjs BasicsReactjs Basics
Reactjs Basics
 
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet[Draft] Fast Prototyping with DPDK and eBPF in Containernet
[Draft] Fast Prototyping with DPDK and eBPF in Containernet
 
Node JS - A brief overview on building real-time web applications
Node JS - A brief overview on building real-time web applicationsNode JS - A brief overview on building real-time web applications
Node JS - A brief overview on building real-time web applications
 
Lightning web components
Lightning web components Lightning web components
Lightning web components
 
The features of java 11 vs. java 12
The features of  java 11 vs. java 12The features of  java 11 vs. java 12
The features of java 11 vs. java 12
 
JS digest. November 2017
JS digest. November 2017JS digest. November 2017
JS digest. November 2017
 
Java unit 1
Java unit 1Java unit 1
Java unit 1
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 

Js engine performance

  • 1. JS Engine Performance Scutariu Paul Stirban Ionut 1
  • 2. Table of contents 1. Introduction 2. V8 engine – Google Chrome 16 3. SpiderMonkey - FireFox 9 4. Chakra – IE 9 5. Carakan – Opera 11 6. Case study – Chrome vs FireFox vs IE vs Opera 7. Bibliography 2
  • 3. Introduction ■ The performance of javascript engine is an important feature of a web browser when developing a client web application. ■ The user will obvious be more satisfied if some elements of the application are working better. In that case he may use that browser where the javascript engine is much faster ■ By far, v8 engine used by google is faster than other browsers like FireFox, IE 9 or Opera. This will be shown is the last chapter at case study ■ So, regarding these, we will talk about in this presentation about the improvements of all these engines . Also the statistics at the end of presentation will show the results of every engine 3
  • 4. V8 Engine – Google Chrome 1 ■ V8 is Google's open source JavaScript engine ■ V8 is written in C++ and is used in Google Chrome, the open source browser from Google ■ V8 can run standalone, or can be embedded into any C++ application ■ V8 increases performance by compiling JavaScript to native machine code before executing it, rather than to execute bytecode or interpreting it. Further performance increases are acheived by employing optimization techniques such as inline caching ■ With these features, JavaScript applications running within V8 are said to have an effective speed comparable to a compiled binary 4
  • 5. V8 Engine – Google Chrome 2 Improvements: 1. fast property access + hidden classes function Point(x,y){ this.x = x; this.y = y; } var p1 = new Point(1,2); var p2 = new Point(2,3); - most JavaScript engines would store p1 and p2 like they don’t belong to the same class, but in v8 p1 and p2 shares the same hidden class. 2. Dynamic machine code generation - javascript source code is compiled into machine code when first execution occurs. 5
  • 6. V8 Engine – Google Chrome 3 Improvements: 3. Garbage collector v8 engine: - stops program execution when performing a garbage collection cycle. - processes only part of the object heap in most garbage collection cycles. This minimizes the impact of stopping the application. - always knows exactly where all objects and pointers are in memory. This avoids falsely identifying objects as pointers which can result in memory leaks. http://code.google.com/apis/v8/design.html http://en.wikipedia.org/wiki/Inline_caching 6
  • 7. SpiderMonkey – FireFox 9 1 ■ SpiderMonkey: 30% faster ■ SpiderMonkey integrates type inference with Jaegermonkey JIT compiler to generate efficient code ■ SpiderMonkey is written in C++ and contains an interpreter, several JIT compilers (TraceMonkey, JägerMonkey, and IonMonkey), a decompiler, and a garbage collector. 7
  • 8. SpiderMonkey – FireFox 9 2 TraceMonkey - TraceMonkey is the first JIT compiler written for the JavaScript language - The compiler was first released as part of SpiderMonkey in Firefox 3.5, providing "performance improvements ranging between 20 and 40 times faster" than the baseline interpreter in Firefox 3 - Instead of compiling whole functions, TraceMonkey operates by recording control flow and data types during interpreter execution. This data then informs the construction of Trace Trees, highly specialized paths of native code 8
  • 9. SpiderMonkey – FireFox 9 3 JägerMonkey - JägerMonkey, internally named MethodJIT, is a whole-method JIT compiler designed to improve performance in cases where TraceMonkey cannot generate stable native code. - JägerMonkey operates very differently from other compilers in its class: while typical compilers work by constructing and optimizing a control flow graph representing the function, JägerMonkey instead operates by iterating linearly forward through SpiderMonkey bytecode, the internal function representation. Although this prohibits optimizations that require instruction reordering, JägerMonkey compilation has the advantage of being extremely fast, which is useful for JavaScript since recompilation due to changing variable types is frequent 9
  • 10. SpiderMonkey – FireFox 9 4 JägerMonkey Mozilla implemented a number of critical optimizations in JägerMonkey, most importantly Polymorphic Inline Caches and Type inference http://en.wikipedia.org/wiki/Type_inference IonMonkey IonMonkey is a compiler in the traditional sense: it translates SpiderMonkey bytecode into a control flow graph, using SSA for the intermediate representation. This architecture enables well-known optimizations from other programming languages to be used for JavaScript, including type specialization, function inlining, linear- scan register allocation, dead code elimination, and loop-invariant code motion 10
  • 11. Chakra – IE 9 1 ■ Chakra is the new JScript engine developed by Microsoft for their upcoming Internet Explorer 9 (IE9) web browser ■ A distinctive feature of the engine is that it compiles scripts on a separate CPU core, parallel to the web browser ■ Chakra improves the performance of the browser and the web pages render and respond much faster 11
  • 12. Chakra – IE 9 2 ■ Chakra, fundamentally changes the performance characteristics of JavaScript inside Internet Explorer 9. Chakra includes a new JavaScript compiler that compiles JavaScript source code into high- quality native machine code, a new interpreter for executing script on traditional web pages, and improvements to the JavaScript runtime and libraries. You can read more details on Chakra at TechNet. 12
  • 13. Carakan – Opera 11 1 ■ So how fast is Carakan? Using a regular cross-platform switch dispatch mechanism (without any generated native code) Carakan is currently about two and a half times faster at the SunSpider benchmark than the ECMAScript engine in Presto 2.2 (Opera 10 Alpha). Since Opera is ported to many different hardware architectures, this cross-platform improvement is on its own very important ■ The native code generation in Carakan is not yet ready for full- scale testing, but the few individual benchmark tests that it is already compatible with runs between 5 and 50 times faster, so it is looking promising so far 13
  • 14. Carakan – Opera 11 2 Improvements: 1. Automatic object classification - A major improvement over this engine is in the representation of ECMAScript objects. Each object is assigned a class that collects various information about the object, such as its prototype and the order and names of some or all of its properties - Class assignment is naturally very dynamic, since ECMAScript is a very dynamic language, but it is organized such that objects with the same prototype and the same set of properties are assigned the same class 14
  • 15. Carakan – Opera 11 3 Improvements: 1. Automatic object classification - This representation allows compact storage of individual objects, since most of the complicated structures representing the object's properties are stored in the class, where they are shared with all other objects with the same class. In real-world programs with many objects of the same classes, this can save significant amounts of memory. - For two objects with the same class, if the lookup of a property "X" on the first object gave the result Y, we know that the same lookup on the second object will also give the result Y. We use this to cache the result of individual property lookups in ECMAScript programs, which greatly speeds up code that contains many property reads or writes 15
  • 16. Carakan – Opera 11 4 Improvements: 2. Native code generation - Although engine's bytecode instruction set permits the implementation of a significantly faster bytecode execution engine, there is still significant overhead involved in executing simple ECMAScript code, such as loops performing integer arithmetics, in a bytecode interpreter. - In addition to generating native code from regular ECMAScript code, we also generate native code that performs the matching of simple regular expressions. This improves performance a lot when searching for matches of simple regular expressions in long strings. For sufficiently long strings, this actually makes searching for a substring using a regular expression faster than the same search using String.prototype.indexOf. For shorter strings, the speed is limited by the overhead of compiling the regular expression 16
  • 17. Carakan – Opera 11 5 Improvements: 3. Register-based bytecode - The last couple of generations of Opera's ECMAScript engine have used a stack-based bytecode instruction set. This type of instruction set is based around a stack of values, where most instructions "pop" input operands from the value stack, process them, and "push" the result back onto the value stack. Some instructions simply push values onto the value stack, and others rearrange the values on the stack. This gives compact bytecode programs and is easy to generate bytecode for 17
  • 18. Case study – Chrome vs FireFox vs IE vs Opera 1 Now we will se some performance statistics using v8 and kraken benchmarks. V8 benchmark:http://v8.googlecode.com/svn/data/benchmarks/v5/run Score 2500 2000 1500 1000 2085 1354 500 959 629 0 IE 9 Opera 11.6 FireFox 9 Chrome 16 18
  • 19. Case study – Chrome vs FireFox vs IE vs Opera 2 Now we will se some performance statistics using v8 and kraken benchmarks. V8 benchmark:http://v8.googlecode.com/svn/data/benchmarks/v5/run Browser Speed Google Chrome 16 2085 ms Opera 11.6 959 ms FireFox 9 1354 ms IE 9 629 ms The biggest score indicates the browser’s engine with the best performance 19
  • 20. Case study – Chrome vs FireFox vs IE vs Opera 3 Now we will se some performance statistics using v8 and kraken benchmarks. Kraken benchmark:http://krakenbenchmark.mozilla.org/ Time in milliseconds 60000 50000 40000 30000 55878 20000 42685 10000 13399 15315.4 0 Chrome 16 FireFox 9 Opera 11.6 IE 9 20
  • 21. Case study – Chrome vs FireFox vs IE vs Opera 4 Now we will se some performance statistics using v8 and kraken benchmarks. Kraken benchmark:http://krakenbenchmark.mozilla.org/ Browser Speed Google Chrome 16 13399.3ms +/- 1.8% FireFox 9 15315.4ms +/- 0.6% Opera 11.6 42685.0ms +/- 1.2% IE 9 55878.0ms +/- 1.8% Now time is being calculated in miliseconds and obvious the lowest is the best engine As we can see, Google’s v8 is the best engine by far, and the statistics show this. 21