# HG changeset patch # User neko259 # Date 2016-01-21 14:56:14 # Node ID dde38eedd2415f389d22ed48e9acbdedd042f3fc # Parent 0a26ae7c17e5ab8013af3fdf7e248b71ceb1f049 Make pow script be a shared worker diff --git a/boards/static/js/form.js b/boards/static/js/form.js --- a/boards/static/js/form.js +++ b/boards/static/js/form.js @@ -86,8 +86,8 @@ function selectFileChoice() { $(document).ready(function() { var powDifficulty = parseInt($('body').attr('data-pow-difficulty')); if (powDifficulty > 0) { - var worker = new Worker($('#powScript').attr('src')); - worker.onmessage = function(e) { + var worker = new SharedWorker($('#powScript').attr('src')); + worker.port.onmessage = function(e) { var form = $('#form'); addHiddenInput(form, 'timestamp', e.data.timestamp); addHiddenInput(form, 'iteration', e.data.iteration); @@ -96,6 +96,7 @@ function selectFileChoice() { form.submit(); $('.post-form-w').unblock(); }; + worker.port.start(); var form = $('#form'); var submitButton = form.find('input[type=submit]'); @@ -110,7 +111,7 @@ function selectFileChoice() { difficulty: parseInt($('body').attr('data-pow-difficulty')), hasher: $('#sha256Script').attr('src') }; - worker.postMessage(data); + worker.port.postMessage(data); return false; }); diff --git a/boards/static/js/proof_of_work.js b/boards/static/js/proof_of_work.js --- a/boards/static/js/proof_of_work.js +++ b/boards/static/js/proof_of_work.js @@ -1,8 +1,10 @@ var POW_COMPUTING_TIMEOUT = 2; var POW_HASH_LENGTH = 16; +var hasher; -function computeHash(iteration, guess, target, payload, timestamp, hasher) { + +function computeHash(iteration, guess, target, payload, timestamp, hasher, port) { iteration += 1; var hash = hasher(payload + iteration).toString(); guess = hash.substring(0, POW_HASH_LENGTH); @@ -17,19 +19,19 @@ function computeHash(iteration, guess, t timestamp: timestamp, guess: guess }; - self.postMessage(data); + port.postMessage(data); } else { //console.log("Iteration: ", iteration); //console.log("Guess: ", guess); //console.log("Target: ", target); setTimeout(function() { - computeHash(iteration, guess, target, payload, timestamp, hasher); + computeHash(iteration, guess, target, payload, timestamp, hasher, port); }, POW_COMPUTING_TIMEOUT); } } -function doWork(message, hasher, difficulty) { +function doWork(message, hasher, difficulty, port) { var timestamp = Date.now(); var iteration = 0; var payload = timestamp + message; @@ -42,13 +44,20 @@ function doWork(message, hasher, difficu var guess = target + '0'; setTimeout(function() { - computeHash(iteration, guess, target, payload, timestamp, hasher); + computeHash(iteration, guess, target, payload, timestamp, hasher, port); }, POW_COMPUTING_TIMEOUT); } -self.onmessage = function(e) { - var difficulty = e.data.difficulty; - importScripts(e.data.hasher); - var hasher = CryptoJS.SHA256; - self.doWork(e.data.msg, hasher, difficulty); -}; +onconnect = function(e) { + var port = e.ports[0]; + port.start(); + + port.onmessage = function(e) { + var difficulty = e.data.difficulty; + importScripts(e.data.hasher); + var hasher = CryptoJS.SHA256; + + self.doWork(e.data.msg, hasher, difficulty, port); + }; +} +