Skip to content

Commit 41a1d60

Browse files
committed
added WebAssembly Proof of Concept
1 parent b7c746d commit 41a1d60

37 files changed

Lines changed: 1090 additions & 108 deletions

examples/wasm-simple/README.md

Lines changed: 507 additions & 0 deletions
Large diffs are not rendered by default.

examples/wasm-simple/add.wasm

41 Bytes
Binary file not shown.

examples/wasm-simple/build.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require("../build-common");

examples/wasm-simple/example.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import("./add.wasm").then(addModule => {
2+
console.log(addModule.add(22, 2200));
3+
import("./math").then(math => {
4+
console.log(math.add(10, 101));
5+
console.log(math.factorial(15));
6+
console.log(math.factorialJavascript(15));
7+
console.log(math.fibonacci(15));
8+
console.log(math.fibonacciJavascript(15));
9+
timed("wasm factorial", () => math.factorial(1500));
10+
timed("js factorial", () => math.factorialJavascript(1500));
11+
timed("wasm fibonacci", () => math.fibonacci(22));
12+
timed("js fibonacci", () => math.fibonacciJavascript(22));
13+
});
14+
});
15+
16+
function timed(name, fn) {
17+
if(!console.time || !console.timeEnd)
18+
return fn();
19+
// warmup
20+
for(var i = 0; i < 10; i++)
21+
fn();
22+
console.time(name)
23+
for(var i = 0; i < 5000; i++)
24+
fn();
25+
console.timeEnd(name)
26+
}
83 Bytes
Binary file not shown.
95 Bytes
Binary file not shown.

examples/wasm-simple/index.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<html>
2+
<body>
3+
<script src="js/output.js"></script>
4+
</body>
5+
</html>

examples/wasm-simple/math.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { add } from "./add.wasm";
2+
import { factorial } from "./factorial.wasm";
3+
import { fibonacci } from "./fibonacci.wasm";
4+
5+
export { add, factorial, fibonacci };
6+
7+
export function factorialJavascript(i) {
8+
if(i < 1) return 1;
9+
return i * factorialJavascript(i - 1);
10+
}
11+
12+
export function fibonacciJavascript(i) {
13+
if(i < 2) return 1;
14+
return fibonacciJavascript(i - 1) + fibonacciJavascript(i - 2);
15+
}

examples/wasm-simple/template.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
This very simple example shows usage of WebAssembly.
2+
3+
WebAssembly modules can be imported like other modules. Their download and compilation happens in parallel to the download and evaluation of the javascript chunk.
4+
5+
# example.js
6+
7+
``` javascript
8+
{{example.js}}
9+
```
10+
11+
# math.js
12+
13+
``` javascript
14+
{{math.js}}
15+
```
16+
17+
# js/output.js
18+
19+
``` javascript
20+
{{js/output.js}}
21+
```
22+
23+
# js/0.output.js
24+
25+
``` javascript
26+
{{js/0.output.js}}
27+
```
28+
29+
# js/1.output.js
30+
31+
``` javascript
32+
{{js/1.output.js}}
33+
```
34+
35+
# Info
36+
37+
## Uncompressed
38+
39+
```
40+
{{stdout}}
41+
```
42+
43+
## Minimized (uglify-js, no zip)
44+
45+
```
46+
{{min:stdout}}
47+
```
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module.exports = {
2+
output: {
3+
webassemblyModuleFilename: "[modulehash].wasm",
4+
publicPath: "js/"
5+
},
6+
module: {
7+
rules: [
8+
{
9+
test: /\.wasm$/,
10+
type: "webassembly/experimental"
11+
}
12+
]
13+
}
14+
};

0 commit comments

Comments
 (0)