!7 html { if (eq(uri, "/worker.js")) ret [[ postMessage("WORKING!"); var startTime = new Date(); var i = 0; while (true) { i = i+1; if ((i % 1000000) == 0) { var ms = new Date()-startTime; var mips = (i/ms/1000).toFixed(2); postMessage("Counted to: " + i + " in " + ms + " ms (" + mips + " million steps/s)"); if (ms >= 12000) { postMessage("restart"); break; } } } ]]; ret htitle("Web Worker Test") + hbody( p("Count numbers: " + hfulltag("output", "", id := "result")) + p(hbutton("Restart Worker", onClick := "restart()")) + hjavascript([[ var worker; function restart() { worker.terminate(); go(); } function go() { if (typeof(Worker) === "undefined") { document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Workers..."; return; } document.getElementById("result").innerHTML = "Making web worker"; worker = new Worker($LINK); worker.onmessage = function(event) { if (event.data == "restart") restart(); else document.getElementById("result").innerHTML = event.data; }; } ]]).replace("$LINK", jsQuote(relativeRawBotLink(programID(), "worker.js"))), onLoad := "go()"); }