Background Optimization
Background optimization is automatically enabled in EWWW IO, but only if there is nothing blocking it. Note that the plugin re-tests background mode after every update, and you can manually re-test it via the settings page.

Sometimes database (object) caching will make it appear the test has failed when it really hasn't, so it's always worth clearing all caches and doing a re-test just to be sure.
Disabled?
Otherwise, if you see that background mode is disabled, it means that EWWW IO attempted to send a test async request to admin-ajax.php, and the test failed, so the plugin could not enable background mode.
The test request is a small, random string (a bunch of letters and numbers) that is sent in an HTTP request from your server, to itself. So if anything prevents the server from communicating with itself (I know that sounds impossible, but it isn't), then the test will fail, and background mode won't work.
What could block it?
1. a Firewall
2. missing SSL (CA) certs
3. security plugins, although Wordfence and Shield normally work (unless you use the "lock to location" option).
Common Errors
In most of the above cases, the plugin will output an error that gives you a clue as to the problem. If you see a 400/403 error, it's probably a firewall or security plugin. If you get a DNS or SSL/TLS error, then you need to check your server configuration (or have your web host check it) so the server can "talk to itself" properly.
But sometimes, the test request gets a 200 (Okay) status that isn't actually okay, and then we need to dig a little deeper.
Advanced Troubleshooting
With any of the instructions below, you can forward them to your web host or server admin for assistance. Please note that a "server admin" is not your WordPress administrator, it is the person/company responsible for operation of the actual server where your WordPress files live. Back to our regularly scheduled programming...
When the background test gives you a generic error, that typically means we got that 200 status but it wasn't really okay. We can use the developer tools to inspect the response 'body' and get more information on what is happening.
Another thing we can do is to try and run a sample request from the command line (if you have that sort of access). Using something like cURL, fetch your homepage from the server itself:
curl https://www.example.com
Of course, substitute your actual web address in that command, or you'll get a false positive with example.com!
Then view the response and see if it looks normal (or if you get an error, figure out why).
If that all checks out, then I would start checking your server access/error logs. Every time you visit the EWWW IO settings, it should automatically re-test background mode. However, you can also click the Re-test link on the settings page to try it again. When you do that, you should see something in your access logs corresponding to a request to admin-ajax.php, like this:
/wordpress/wp-admin/admin-ajax.php?action=wp_ewwwio_test_optimize&nonce=abc123xyz<br>
It's a POST request, so it may or may not show the "action" parameter, I just pulled that from an Apache server. If you can't view your access logs, this is another case where you will need to enlist the help of your web host to find out if they can check the logs or if they have a firewall (or anything else) that would block these requests.
Lastly, check the logs for any security plugins you are using, or just try turning off your security plugin(s) and running another test. Still stuck? Give us a holler (below)!