It's sometimes clever to run compromise in a webworker.

This way you can keep the synchronous operations off the main-thread,
worker output: