Backbone.js 如何使用Requirejs在模块构建中使用Web Workers?
我用Requirejs和Backbonejs编写了一个运行良好的应用程序,但有时候速度确实很慢。。。例如,当涉及到做一些算术工作时!我试着用一个网络工作者来做这样的算术工作: 我的模块(traffic.js):Backbone.js 如何使用Requirejs在模块构建中使用Web Workers?,backbone.js,requirejs,web-worker,Backbone.js,Requirejs,Web Worker,我用Requirejs和Backbonejs编写了一个运行良好的应用程序,但有时候速度确实很慢。。。例如,当涉及到做一些算术工作时!我试着用一个网络工作者来做这样的算术工作: 我的模块(traffic.js): define(["jquery", "use!underscore", "use!backbone", "namespace" ], function ($, _, Backbone, globals) { ..... var worker = new Worke
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.
});
define(["use!underscore", "use!backbone" ],
function ($, _) {
//Here die Operations
});
算术.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.
});
define(["use!underscore", "use!backbone" ],
function ($, _) {
//Here die Operations
});
但是我有一个错误定义没有定义强>
我也试过了,但没有成功
如何在requirejs或backbonejs中使用Web Worker
谢谢 您可以从web workers使用requireJS:有关更多信息,请参阅 唯一的要求是在web worker的开头加载requireJS,并带有
importScripts(…)
。加载后,您可以使用define
并像普通一样使用requireJS
当我让它工作时,我的关键部分是确保你也在web worker中加载与你在应用程序其余部分中使用的相同的引导配置(例如config.js
或main.js
)。这就是医生说的:
您可能需要设置baseUrl配置选项,以确保require()可以找到要加载的脚本
另一件事是,您可以使用模块ID(而不是硬编码脚本路径)从
traffic.js
文件加载worker。我可以让web worker加载并启动,但是如果addEventListener()
是在require(函数{})内完成的,它不会响应postMessage()
block。我的worker事件侦听器需要调用各种requirejs模块。您提到的API文档中的示例没有设置任何onmessage
listener。有什么想法吗?@Fuhrmanator或者,您可以直接设置onmessage
事件处理程序(尽管JavaScript忍者总是鼓励addEventListener)。(). 如果您为web workers使用requireJS插件,请使用onmessage语法,否则如果本机worker不可用,插件中包含的polyfill fake-worker.js将无法工作。@puro_nervio我终于能够让它工作了。我发现的一个工作示例是,工作人员在执行addEventListener()
之前先执行postMessage()
来回复主线程。我想我的问题是当我的主线程给它工作时线程还没有准备好。几个模块的requirejs需要一些时间,因此在主线程执行其postMessage()
来告诉它开始做某事之前,addEventListener
没有执行。换句话说,主线程必须首先与之同步。