我有一個運行良好的應用程序,用Requirejs和Backbonejs編寫,但它有時真的很慢......例如,當進行一些算術運算時!我試圖使用Web工人做這樣該算法的工作:如何將Web Workers用於使用Requirejs的模塊構建?
我的模塊(traffic.js):
define(["jquery", "use!underscore", "use!backbone", "namespace" ],
function ($, _, Backbone, globals) {
.....
var worker = new Worker("arithmetic.js");
worker.addEventListener('message', function(e) {
console.log(e.data);
}, false);
worker.postMessage(globals.data); // Send data to our worker.
});
arithmetic.js:
define(["use!underscore", "use!backbone" ],
function ($, _) {
//Here die Operations
});
但我有錯誤定義沒有定義!
我試過了,就像this也沒有成功!
如何將Web Worker用於requirejs或backbonejs?
謝謝!
我可以讓web worker加載並啓動,但如果addEventListener()在'require(function {})'塊內完成,它將不會響應'postMessage()'。我的工作者事件偵聽器需要調用各種requirejs模塊。您提到的API文檔中的示例(即https://github.com/jrburke/requirejs/blob/master/tests/workers.js)未設置任何「onmessage」偵聽器。有任何想法嗎? – Fuhrmanator 2015-10-11 20:36:40
@Fuhrmanator或者,您可以直接設置onmessage事件處理程序(儘管addEventListener總是受到JavaScript ninjas的鼓勵)。 (http://www.html5rocks.com/en/tutorials/workers/basics/)。 **如果爲web工作人員使用requireJS插件,請使用onmessage語法,** otherwhise如果本地worker不可用,插件中包含的polyfill fake-worker.js將不起作用。 – 2015-10-19 14:27:29
@puro_nervio我終於可以讓它工作了。我發現一個工作示例讓worker在執行'addEventListener()'之前執行'postMessage()'來回復主線程。我想我的問題是,當我的主線程正在完成工作時線程還沒有準備好。幾個模塊的requirejs需要一些時間,所以'addEventListener'在主線程執行它的'postMessage()'來告訴它開始做某事之前沒有被執行。換句話說,主線程必須先與它同步。 – Fuhrmanator 2015-10-19 15:25:03