emscripten-core / emscripten-core/emscripten

Optimizing output .js size: using createExportWrapper with no assertions

Open
#14,695 12 comments 1 reaction 1 assignee Claimed by @rth View on GitHub
help wanted
Dominant language
C++
Stars
27.6k
Forks
3.6k
Avg merge
1d 1h
Merged PRs (30d)
105

Description

While looking at produced .js files for Pyodide ([pyodide.asm.js](https://cdn.jsdelivr.net/pyodide/v0.17.0/full/pyodide.asm.js), 1.78 MB total, 293kB compressed) a lot of the size seems to be due to this function definition for each symbol,
https://github.com/emscripten-core/emscripten/blob/e77adf8a3a79e79b666dce6d7ad0d6d3b9e94b20/emscripten.py#L671-L674
in part because the mangled name can be quite long and it's repeated 4 times there.

Would it make sense to use an equivalent of `createExportWrapper` instead as done a few lines above?
https://github.com/emscripten-core/emscripten/blob/e77adf8a3a79e79b666dce6d7ad0d6d3b9e94b20/emscripten.py#L659-L661

or even
```
/** @type {function(...*):?} */
var %(mangled)s = createExportWrapper("%(name)s", Module);
''' % {'mangled': mangled, 'name': name})
```
where `createExportWrapper` is currently defined only when assertions = true. I'm not saying to use `createExportWrapper` exactly but an equivalent simpler function with no assertions. Unless there is a reason the current solution is preferable? Thanks!

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.