Edit: Just tested this on https://public.tableau.com/vizql/v_public-release1809140800/...
runtimeweb.wasm 2,484,043
runtimewebwasm.b64 3,355,640
runtimwebwasm.hex 4,968,086
runtimewebwasm.b64.gz 974,065
runtimewebwasm.hex.gz 701,052
runtimewebwasm.b64.br 718,918
runtimewebwasm.hex.br 466,221
So with gzip -9, hex encoding is 72% of the size, with brotli (defaults) size is 65% of the size.* Security: In case of an attack we need to be able to call up the code to do forensics, which is hard if it was downloaded dynamically at runtime.
* Optimizations: We want to keep the ability to pre-compile code e.g. into V8 code cache format before distributing it to the edge.
which is hard if it was downloaded dynamically at runtime
Not sure if you mean something other than what this sounds like (I haven't used CF Workers), but just to clarify further, the option I mentioned causes emscripten to emit one single JS file with no external code downloaded at run time.
(In any case, that performance optimization alone certainly sounds like a good reason for the separation.)