[webkit-dev] Is WebKit's javascript subpar?

Maciej Stachowiak mjs at apple.com
Fri May 26 14:09:13 PDT 2006

Hi Mike,

On May 26, 2006, at 1:11 PM, Mike Emmel wrote:

>> Another issue with SpiderMonkey is that it's far slower than  
>> JavaScriptCore, and
>> speed is a big priority for us.
> Thats a bold statement considering one is bytecode based and the other
> uses a tree.
> Can you show where the engine test were performed results etc etc.
> I simply can't believe this with out a very large test suite.

It would be more accurate to say that JavaScriptCore is faster than  
SpiderMonkey for some workloads. For others it is slower.

Two benchmarks where we know we are measurably faster by a  
significant margin are the iBench JavaScript processing benchmark,  
and the 24fun benchJS test. The former is not publicly available at a  
live site, but you can download it and try it yourself. The latter  
can be found at http://www.24fun.com/downloadcenter/benchjs/ 

To be fair, these tests measure more than just raw JS engine  
performance, they also cover other aspects of engine performance. And  
they also do not give thorough coverage of every possible thing in  
JS. But they are useful examples of real-world workloads.

We also know of microbenchmarks where Firefox (or Opera, or IE) is  
significantly faster. We're definitely working on making those  
faster. You are welcome to do your own measurements.

To comment on the actual idea of somehow replacing the internals of  
JavaScriptCore with SpiderMonkey: There are a lot more differences  
between our engines than just bytecode vs. recursive tree calls.  

1) Our code base is significantly smaller and easier to understand  
than SpiderMonkey. Hackability is important to us, and we've found  
that it's often easier to optimize clear, simple code than to make  
hairy code easy to understand.

2) Our technology for binding to native object implementations is  
significantly higher performance than SpiderMonkey's. For use on the  
web, efficient access to DOM calls is extremely important and indeed  
we show much better results on many DOM benchmarks (e.g. http:// 
idanso.dyndns.org/maps/jsbench/ although a lot of this is due to the  
core DOM code being faster).

3) We've extensively micro-optimized many aspects of our engine  
besides just the core interpreter, such as the object/value  
representation and the garbage collector. Collectively these  
optimizations make a big difference.

We've also started an experimental branch to build a more bytecode- 
like iterative interpreter (treecode-branch). We've put it aside for  
now because it is not yet as fast as our current interpreter, but we  
plan to come back to it. In general, we are more interested in  
continuing to improve and rearchitect our own code and to drop it and  
replace it with something else. We want to make sure we keep the  
advantages our JS interpreter already has.

And I think it is good for the long-term health of the web for there  
to be multiple implementations of things. If you have a single  
implementation, you end up coding to the implementation and not to  
any kind of standard, and fixing bugs becomes impossible.

Finally, I think this thread has wandered way off topic. As many  
people have mentioned, the WebKit bugs that people do run into are  
rarely with the core JS engine itself. Typically they are issues in  
the DOM and other components that are accessed through JavaScript.  
Replacing the JS interpreter would not do anything to resolve these  
kinds of issues.


More information about the webkit-dev mailing list