Closed
Description
When compiling ACX gallery it seems to result in massive duplication of imports. What I see is
The acx.mjs
file has many
// Imports
const dart2wasm = {
...
_89: (x0,x1,x2) => x0.setAttribute(x1,x2),
_90: (x0,x1,x2) => x0.setAttribute(x1,x2),
_91: (x0,x1,x2) => x0.setAttribute(x1,x2),
_92: (x0,x1,x2) => x0.setAttribute(x1,x2),
_93: (x0,x1,x2) => x0.setAttribute(x1,x2),
_94: (x0,x1,x2) => x0.setAttribute(x1,x2),
_95: (x0,x1,x2) => x0.setAttribute(x1,x2),
_96: (x0,x1,x2) => x0.setAttribute(x1,x2),
...
}
similarly the wasm file has corresponding imports
...
(func $dart2wasm._88 (import) (;12855;) (import "dart2wasm" "_88") (param externref externref externref) (result externref))
(func $dart2wasm._89 (import) (;12856;) (import "dart2wasm" "_89") (param externref externref externref) (result externref))
(func $dart2wasm._90 (import) (;12857;) (import "dart2wasm" "_90") (param externref externref externref) (result externref))
(func $dart2wasm._91 (import) (;12858;) (import "dart2wasm" "_91") (param externref externref externref) (result externref))
(func $dart2wasm._92 (import) (;12859;) (import "dart2wasm" "_92") (param externref externref externref) (result externref))
(func $dart2wasm._93 (import) (;12860;) (import "dart2wasm" "_93") (param externref externref externref) (result externref))
(func $dart2wasm._94 (import) (;12861;) (import "dart2wasm" "_94") (param externref externref externref) (result externref))
(func $dart2wasm._95 (import) (;12862;) (import "dart2wasm" "_95") (param externref externref externref) (result externref))
(func $dart2wasm._96 (import) (;12863;) (import "dart2wasm" "_96") (param externref externref externref) (result externref))
...
It's not very clear why this is the case, the source code only contains one function
extension type Element._(JSObject _) implements Node, JSObject {
...
external void setAttribute(
String qualifiedName,
String value,
);
}
It's almost as every call site to setAttribute
will get it's own entry in the mjs file and corresponding wasm import.
Though this is bad for code size, startup and performance (as JS would need to compile all of those closures - even though they perform the same work)