
Firefox to get massive JavaScript performance boost - apu
http://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html
======
gruseom
For a lot of web apps, including the one I'm working on, the JS interpreter
isn't the bottleneck, or even close. Basically, anything involving rendering
or the DOM is orders of magnitude slower than pure JS computation. So what's
the point of optimizing function call and loop overhead? For what real-world
apps will this make a noticeable difference?

When we ran our app in FF3 for the first time, we were dismayed to find that,
after all the talk about browser performance improvements, it had actually
gotten a lot slower (especially when scrolling) [~]. As far as I can tell,
they're optimizing the wrong stuff. It's possible that our app is unique, but
I doubt it. To judge by Google, many people appear to be experiencing the same
thing.

[~] Safari 3, on the other hand, sped up our app considerably.

Edit: The only person I know of who's raised this issue is John Resig:
<http://ejohn.org/blog/javascript-performance-stack/>

~~~
jacobolus
> _… what's the point of optimizing function call and loop overhead? For what
> real-world apps will this make a noticeable difference?_

It will make a difference in real-world apps which are currently impossible
because they would perform poorly. It will become reasonable to start putting
real number-crunching into browser-side JavaScript code—things like crypto,
physics calculations, etc. As one example, JavaScript games are going to get a
whole lot better in the next couple of years.

(Not to say that they shouldn’t be optimizing DOM access, or scrolling speed,
or whatever.)

~~~
gruseom
What you're saying is reasonable - for apps that don't need much UI. I wonder,
though, how many real-world examples there are of apps that people have tried
and failed to write in Javascript for this reason.

For those of us working on things where the UI requirements are more
intensive, little progress has been made. Perhaps the pure JS stuff is getting
more effort because it's more glamorous?

~~~
michaelneale
>Perhaps the pure JS stuff is getting more effort because it's more glamorous?

funny you mention that, but I think a lot of things are driving by glamour or
fashion.

Although in this case its clearly an engineering achievement, so kudos, and
its great to have 2 competing and excellent open source browsers.

But still... glamour...

------
ars
This is nice, but the only upgrade firefox actually needs is multithreading
and they won't do it (according to some blog I read, which I couldn't re-
find).

They can optimize all they want, and it'll help, but Intel hit a wall with CPU
performance, and multi-core is the future.

~~~
jsrn
> according to some blog I read, which I couldn't re-find

I think this is the blog post by Brendan Eich you are referring to:

    
    
       So my default answer to questions such as the one I got
       at last May's Ajax Experience, "When will you add
       threads to JavaScript?" is: "over your dead body!"
    
       There are better ways. Clueful hackers keep rediscovering
       Erlang. Then there is STM. One retro stylist I know
       points to an old language-based solution, Hermes.
    
       A requirement for JS3 (along with hygienic macros) is
       to do something along these more implicit lines of
       concurrency support. In all the fast yet maintainable
       MT systems I've built or worked on, the key idea (which
       Will Clinger stated clearly to me over lunch last fall)
       is to separate the mutable unshared data from the
       immutable shared data. Do that well, with language and
       VM support, and threads become what they should be:
       not an abstraction violator from hell, but a scaling
       device that can be composed with existing abstractions.
    
       So here's a promise about threads, one that I will
       keep or else buy someone a trip to New Zealand and
       Australia (or should I say, a trip here for those over
       there): JS3 will be ready for the multicore desktop
       workload.
    

[http://weblogs.mozillazine.org/roadmap/archives/2007/02/thre...](http://weblogs.mozillazine.org/roadmap/archives/2007/02/threads_suck.html)

in essence, he plans to take advantage of multicore processors not with
threads but with better and/or more programmer friendly methods.

~~~
ars
Yah, that's the one. And we'll see if he delivers, but I know one thing right
now: when I sit and wait while one very slow site freezes the whole browser, I
get quite annoyed.

Does he not realize that the browser is basically the OS these days, and he's
keeping it in Windows 3.0 territory?

It's time to make a thread for the UI, and a thread for each window, and each
tab (child windows AKA popups, shall thread with their parent). JS can't cross
those walls anyway, so his probably with concurrency are not as bad as he
thinks.

~~~
olavk
I think Eich is advocating against explicit thread support in JavaScript like
e.g. Thread.run() in Java. Separate threads per tab is an unrealated issue as
long as the tabs cannot communicate. Tabs might however be able to communicate
if one tabs opens another through script. In that case it might introduce
racing conditions if the tabs runs in different threads.

Btw in HTML5 there is a proposal for cross-window communication
<http://www.w3.org/html/wg/html5/#crossDocumentMessages> which is
asynchronous. This would allow communication between different threads using
message passing.

~~~
ars
>I think Eich is advocating against explicit thread support in JavaScript

Oh! Well I sure read that wrong. I thought he was against threads in the
browser. So I guess there is hope.

If one tag opens another, it's a child of the first, so they should thread
together.

Javascript already has threads anyway (setTimer, and events), they are just
serially scheduled - on a single core it's identical to regular threads. So
you already have to deal with concurrency issues in javascript apps (although
it's not as bad as full threading since I think a single function is allowed
to run to completion before something else is scheduled).

------
invisible
This is a huge achievement for the future of the web. While the basics of what
we're doing now are very simple, the ability to have code be compiled on the
fly is exactly is needed to get JavaScript near pre-compiled code boundaries.
I do yearn for a world where our biggest successes are much bigger than forums
that graduated into social sites.

As gruseom stated, interacting with the DOM and rendering as still
significantly slower than iterating through an array. I believe tracing very
well could be the key to unlocking advances in that area s well.

------
tlrobinson
While I consider myself a WebKit man, it's good to see Firefox competing, The
competition benefits everyone.

Unfortunately, IE is still quite slow. I think we'll soon reach the point
where it's not the browser feature inconsistencies limiting what cross-browser
JS apps can do, but the performance difference.

~~~
michaelneale
I think its already here for the bleeding edge. I have seen some (small) apps
where they give up on IE purely for performance reasons (their users are happy
for that compromise) - buts its ONLY for performance reasons.

------
rplevy
(push 'javascript _dynamic-languages-faster-than-C_ )

------
truebosko
This is great news. I thought the boosts in JS for Firefox 3 were nice, this
looks even better!

