如何使用Requirejs将Web Workers用于模块构建?

时间:2012-02-11 23:05:48

标签: backbone.js requirejs web-worker

我有一个用Requirejs和Backbonejs编写的应用程序很好的应用程序,但有时候它确实在减速...例如,当它要进行一些算术工作时!我尝试使用Web Worker来完成这样的算术运算:

我的模块(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?

谢谢!

1 个答案:

答案 0 :(得分:12)

您可以使用网络工作者的requireJS:有关详细信息,请参阅API docs

唯一的要求是在importScripts(…)的Web工作者的开头加载requireJS。加载后,您可以使用define并使用requireJS,就像正常一样。

当我开始工作时,关键部分是确保您还在正在使用的Web工作者中加载相同的引导程序配置(例如config.jsmain.js)在你的应用程序的其余部分。这就是文档在谈到时所说的:

  

您可能需要设置baseUrl配置选项以确保require()可以找到要加载的脚本。

另一件事是您可以使用this requireJS plugintraffic.js文件加载具有模块ID的工作者(而不是硬编码脚本路径)。