Skip to content

[dart2wasm] Compiling acx results in massive duplication of imports #60384

Closed
@mkustermann

Description

@mkustermann

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)

/cc @srujzs @osa1

Metadata

Metadata

Assignees

Labels

area-dart2wasmIssues for the dart2wasm compiler.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions