Description
No doubt build size is an ongoing consideration, for example in #826 and #1078 - so I apologize if this is a bit redundant.
However - I didn't see some of the following specific questions covered in those issues, so figured it's worth opening a new one...
In a basic app using just the minimum of what's needed to render a quad on the screen via webgl, I'm seeing around a 66KB output wasm. That is including some js_sys and web_sys stuff. It's after cargo build --release
and wasm_bindgen
So - first question is, what can one expect for a final output using some average requirements from wasm_bindgen, js_sys and web_sys - is this number in the right ballpark?
Secondly - I am structuring things using workspaces. To get it to compile I had to include "rlib" in the local crate dependencies. Will that add bloat? If so - is there a recommended way around it?
Here's some of the Cargo.toml snippets, adapted with generic names (note: I haven't tried wee_alloc - not sure if that will make a major difference)
root: ./Cargo.toml
[workspace]
members = [ "crates/*", "examples/*" ]
[profile.release]
lto = true
library: ./crates/foo/Cargo.toml
[package]
name = "foo"
edition = "2018"
[lib]
crate-type = ["cdylib", "rlib"]
[profile.release]
lto = true
[dependencies]
wasm-bindgen = "0.2.29"
js-sys = "0.3.6"
[dependencies.web-sys]
version = "0.3.6"
features = [
'CanvasRenderingContext2d',
'WebGlRenderingContext',
'WebGl2RenderingContext',
'HtmlCanvasElement',
'WebGlProgram',
'WebGlShader',
'Window'
]
app: ./examples/foo-demo/Cargo.toml
[package]
name = "foo-demo"
edition = "2018"
[lib]
crate-type = ["cdylib"]
[profile.release]
lto = true
[dependencies]
wasm-bindgen = "0.2.29"
js-sys = "0.3.6"
foo = { path = "../../crates/foo" }
[dependencies.web-sys]
version = "0.3.6"
features = [
'WebGlRenderingContext',
'WebGl2RenderingContext',
'WebGlProgram',
'WebGlBuffer',
'HtmlCanvasElement',
'console',
]