Backbone.js 如何使用Requirejs在模块构建中使用Web Workers?

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

我用Requirejs和Backbonejs编写了一个运行良好的应用程序,但有时候速度确实很慢。。。例如,当涉及到做一些算术工作时!我试着用一个网络工作者来做这样的算术工作:

我的模块(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.
  });
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
没有执行。换句话说,主线程必须首先与之同步。