-
Notifications
You must be signed in to change notification settings - Fork 0
Optimizing Code
By default Emscripten will compile code in a fairly safe way, and without all the possible optimizations. You should generally try this first, to see if things work properly (if not, see the Debugging page). Afterwards, you may want to compile your code so it runs faster. This page gives some tips on how to do that.
The most important settings are in src/settings.js. Change them and recompile your code for them to take effect.
CORRECT_SIGNS, CORRECT_OVERFLOWS and CORRECT_ROUNDINGS are needed in some code. They add a lot of runtime overhead though. If you can, disable them entirely.
If you can't, try to enable them just for the lines they are needed, by setting the CORRECT- option to 2 (see the linespecific test for more). Use the CHECK- option to find the relevant lines - you should compile with -g to see the original source file and line numbers in the generated !JavaScript. As you add more lines to be corrected, the check will no longer warn about them, so you can recompile and run, finding a single line each time.
Note that you don't necessarily need to recompile each time. You can edit the generated source. unSign, for example, takes as a third parameter whether to ignore problems, so changing that to true will ignore signing on that line.
The following settings are very important for fast code:
- OPTIMIZE: This will use native !JavaScript variables and other enhancements.
- RELOOP: This will generate native !JavaScript code flow structures (ifs, loops, etc.), instead of emulating code flow using the switch-in-a-loop pattern. Note that currently using this setting will make the compiler very slow.
Other settings:
- USE_TYPED_ARRAYS: Typed arrays in !JavaScript can be much faster than untyped arrays. However this does not always lead to faster code, so you should check if it does or not.
- GUARD_MEMORY: Set this to zero to disable some memory allocation checks
For additional speed, use the Closure Compiler, which both minifies and optimizes the code. The YUI compressor is also useful (tends to optimize less though, but runs faster).