mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-11-25 09:02:46 +03:00
6561fba947
* Changed eslintrc to be JSON file (Most projects use JSON version) * Added .eslintignore to ingore node_modules from subdirectories such as examples * Ran eslint --fix examples to fix all examples * Added npm script for running eslint against examples * Added npm script for running eslint against generated *out* code * Hooked npm scripts into travis ci to prevent examples from becoming inconsistent with future PR's |
||
---|---|---|
.. | ||
src | ||
.gitignore | ||
build.sh | ||
Cargo.toml | ||
index.html | ||
index.js | ||
package.json | ||
README.md | ||
webpack.config.js |
Adding Numbers
This directory is an example of using the #[wasm_bindgen]
macro to simply add
two numbers. The neat part about this is that it's an example of how to generate
the smallest wasm-bindgen binary.
You can build the example with:
$ ./build.sh
(or running the commands on Windows manually)
Currently this generates a 651 byte wasm binary:
$ ls -alh add_bg.wasm
-rw-rw-r-- 1 alex alex 651 Apr 20 22:16 add_bg.wasm
If you run wasm-opt, a C++ tool for optimize WebAssembly, you can make it even smaller too!
$ wasm-opt -Os add_bg.wasm -o add.wasm
$ ls -alh add.wasm
-rw-rw-r-- 1 alex alex 100 Apr 20 22:19 add.wasm
And sure enough, using the wasm2wat tool it's quite small!
$ wasm2wat add.wasm
(module
(type (;0;) (func (param i32 i32) (result i32)))
(func (;0;) (type 0) (param i32 i32) (result i32)
get_local 1
get_local 0
i32.add)
(memory (;0;) 2)
(export "memory" (memory 0))
(export "add" (func 0))
(data (i32.const 1545) "invalid malloc request"))
Note that it's important to point out that the size reductions here are because the wasm is compiled in release mode by the build script and this crate's workspace has the following configuration
[profile.release]
lto = true
opt-level = 's'
panic = 'abort'