What do the "Not optimized" warnings in the Chrome Profiler mean?

Luke picture Luke · Mar 19, 2014 · Viewed 14.6k times · Source

When I use the Developer Tools in Chrome to collect JavaScript CPU Profiles, I am getting two mysterious warnings on functions:

  • Not optimized: optimized too many times
  • Not optimized: inlining bailed out

What do these actually mean? and what are some possible solutions?

Another one I've seen is Not optimized: TryCatchStatement, but that makes sense. Solution is to remove the try-catch.

The closest attempt at an explanation I've found so far was this - https://github.com/GoogleChrome/devtools-docs/issues/53

Answer

David picture David · Jul 25, 2014
  1. I believe that "Not optimized: optimized too many times" refers to when the chrome optimizer keeps reoptimizing a function.

    https://groups.google.com/forum/#!topic/v8-users/_oZ4fUSitRY

    If I recall correctly, there are several things that can cause this including parameters that change type, I'll try to dig up the link.

    This one is somewhat cryptic and fixes will depend on your code. I've had this pop up in my code many times and sometimes I just can't fix it.

  2. 'Not optimized: inlining bailed out' Seems answered in the link you posted.

  3. For the try/catch, a non-exhaustive but useful list of Chrome optimization quirks can be found on this github page:

    https://github.com/petkaantonov/bluebird/wiki/Optimization-killers

    This page mentions that try/catches are not currently optimized:

    • Generator functions
    • Functions that contain a for-of statement
    • Functions that contain a try-catch statement
    • Functions that contain a try-finally statement
    • Functions that contain a compound let assignment
    • Functions that contain a compound const assignment
    • Functions that contain object literals that contain proto, or get or set declarations.