4. Calculation in the main thread
// get inputs
var x = document.getElementById("x").value;
var y = document.getElementById("y").value;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() < end; );
var result = x * y;
// output result
document.getElementById("output").value = result;
6. Web Workers: client (main thread)
var worker = new Worker("worker.js");
worker.addEventListener("message", function (event) {
// output result
document.getElementById("output").value = event.data.result;
});
// get inputs
var x = document.getElementById("x").value;
var y = document.getElementById("y").value;
worker.postMessage({ x: x, y: y });
7. Web Workers: server (worker)
self.addEventListener("message", function (event) {
// get inputs
var x = event.data.x;
var y = event.data.y;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() < end; );
var result = x * y;
postMessage({ result: result });
});
8. Web Workers: client (main thread)
var worker = new Worker("worker.js"), inc = 0;
// get inputs
var id = inc++;
var x = document.getElementById("x").value;
var y = document.getElementById("y").value;
worker.addEventListener("message", function handler(event) {
if (event.data.id === id) {
this.removeEventListener("message", handler);
// output result
document.getElementById("output").value = event.data.result;
}
});
worker.postMessage({ id: id, x: x, y: y });
9. Web Workers: server (worker)
self.addEventListener("message", function (event) {
// get inputs
var id = event.data.id;
var x = event.data.x;
var y = event.data.y;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() < end; );
var result = x * y;
postMessage({ id: id, result: result });
});
11. Calculation in the main thread
// get inputs
var x = document.getElementById("x").value;
var y = document.getElementById("y").value;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() < end; );
var result = x * y;
// output result
document.getElementById("output").value = result;
12. Web Workers
//// index.js ////
var worker = new Worker("worker.js"), inc = 0;
// get inputs
var id = inc++;
var x = document.getElementById("x").value;
var y = document.getElementById("y").value;
worker.addEventListener("message", function
handler(event) {
if (event.data.id === id) {
this.removeEventListener("message", handler);
// output result
document.getElementById("output").value =
event.data.result;
}
});
worker.postMessage({ id: id, x: x, y: y });
//// worker.js ////
self.addEventListener("message", function (event) {
// get inputs
var id = event.data.id;
var x = event.data.x;
var y = event.data.y;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() <
end;);
var result = x * y;
postMessage({ id: id, result: result });
});
13.
14. Calculation in the main thread
// get inputs
var x = document.getElementById("x").value;
var y = document.getElementById("y").value;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() < end; );
var result = x * y;
// output result
document.getElementById("output").value = result;
15. Dream API
parallel(function () {
// get inputs
var x = document.getElementById("x").value;
var y = document.getElementById("y").value;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() < end;);
var result = x * y;
// output result
document.getElementById("output").value = result;
});
18. ES6: Promise API
$.ajax(url).then(function (data) {
$('#result').html(data);
var status = $('#status').html('Download complete.');
return status.fadeIn().promise().then(function () {
return sleep(2000);
}).then(function () {
return status.fadeOut();
});
});
19. ES6: Promise API
$.ajax(url).then(data => {
$('#result').html(data);
var status = $('#status').html('Download complete.');
return (
status.fadeIn().promise()
.then(() => sleep(2000))
.then(() => status.fadeOut())
);
});
20. ES7: async/await
var expr = await promise;
nextStatement();
var expr;
promise.then(result => {
expr = result;
nextStatement();
});
21. ES7: async/await
var data = await $.ajax(url);
$('#result').html(data);
var status = $('#status').html('Download complete.');
await status.fadeIn.promise();
await sleep(2000);
await status.fadeOut();
27. ES7-powered API
parallel(async function (proxy) {
// get inputs
var x = await proxy.document.getElementById("x").value;
var y = await proxy.document.getElementById("y").value;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() < end;);
var result = x * y;
// output result
proxy.document.getElementById("output").value = result;
});
28. ES7-powered API (just like dream!)
parallel(async function ({ document }) {
// get inputs
var x = await document.getElementById("x").value;
var y = await document.getElementById("y").value;
// VERY useful calculations
for (var end = Date.now() + 3000; Date.now() < end;);
var result = x * y;
// output result
document.getElementById("output").value = result;
});
30. ES7: data parallelism
var ar = [1, 2, 3];
var arInc = ar.mapPar(val => val + 1); // [2, 3, 4]
var sum = ar.reducePar((x, y) => x + y); // 6
Int32Array.fromPar([1, 2, 3], val => val * 2); // int32[2, 4, 6]
// … even more … //