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

This way you can keep the synchronous operations off the main-thread,
    and run multiple tasks (potentially) in parallel.

original text:

webworker response: