Skip to content

JavaScript Performance For Madmen

kevingadd edited this page Jul 10, 2012 · 58 revisions

JavaScript performance is terrifying and unpredictable. If you want things to run fast, you'll need a dowsing rod, but these test cases might help:

Performance minutiae for individual JS runtimes

SpiderMonkey/TraceMonkey/IonMonkey/JaegerMonkey (Mozilla Firefox)

  • Functions containing try/finally are run by the interpreter.

V8 (Google Chrome)

  • See http://www.youtube.com/watch?v=XAqIpGU8ZZk for various tips
  • V8 cannot represent integers larger than 31 bits as an integer (they get promoted to floats).
  • Floating-point values are almost universally stored in the heap by V8 (which means each one is an allocation).
  • Any function containing a try/catch or try/finally is not optimized.
  • Functions that are too long (including comments and newlines/whitespace) are not inlined and may not be optimized.

Vaguely useful profiling tools

Mozilla Firefox

  • SPS (Currently only supports native profiling; JS profiling support forthcoming. Lets you share profiles on the web with other people! Amazing!)
  • JIT Inspector (Completely inscrutable unless you read this PDF, at which point it is only partially inscrutable. Also, doesn't display actual numbers anywhere or let you save profiles...)
  • Firebug (if you can get the profiler to work instead of crashing the browser entirely)

Google Chrome

  • Web Inspector's Profiler tab (This is a sampling profiler with poor accuracy that often omits entire native call paths from your profiles, so the data is often a lie)
  • chrome://tracing/ (You can instrument your JS to show up here via console.time/console.timeEnd)

Clone this wiki locally