【问题标题】:How to use Web Workers into a Module build with Requirejs?如何在 Requirejs 的模块构建中使用 Web Worker?
【发布时间】:2012-02-11 23:05:47
【问题描述】:

我有一个使用 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
 });

但我有错误 define is not defined!!

我也尝试过this,但没有成功!

如何将Web Worker 用于requirejs 或与backbonejs 一起使用??

谢谢!

【问题讨论】:

    标签: backbone.js requirejs web-worker


    【解决方案1】:

    您可以使用 web workers 的 requireJS:请参阅 API docs 了解更多信息。

    唯一的要求是在带有importScripts(…) 的web worker 开始时加载requireJS。加载后,您可以使用 define 并像往常一样使用 requireJS。

    当我让它工作时,对我来说关键部分是确保你也在 web worker 中加载相同的引导配置(例如 config.jsmain.js)你的应用程序。这就是文档所说的内容:

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

    另一件事是,您可以使用 this requireJS plugin 使用模块 ID(而不是硬编码脚本路径)从您的 traffic.js 文件加载工作程序。

    【讨论】:

    • 我可以让 web worker 加载并启动,但如果 addEventListener()require(function{}) 块内完成,它不会响应 postMessage()。我的工作事件监听器需要调用各种 requirejs 模块。您提到的 API 文档中的示例,即 github.com/jrburke/requirejs/blob/master/tests/workers.js ,没有设置任何 onmessage 监听器。有什么想法吗?
    • @Fuhrmanator 或者,您可以直接设置onmessage 事件处理程序(尽管 JavaScript 忍者总是鼓励 addEventListener)。 (html5rocks.com/en/tutorials/workers/basics)。 如果你为 web worker 使用 requireJS 插件,使用 onmessage 语法, 否则如果原生 worker 不可用,插件附带的 polyfill fake-worker.js 将不起作用。
    • @puro_nervio 我终于可以让它工作了。我发现一个工作示例让工作人员在执行addEventListener() 之前先执行postMessage() 来回复主线程。我在想我的问题是当我的主线程让它工作时线程还没有准备好。几个模块的requirejs需要一些时间,所以addEventListener在主线程执行它的postMessage()告诉它开始做某事之前没有执行。也就是说,主线程要先跟它同步。
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 2018-05-08
    • 2018-11-02
    • 1970-01-01
    • 2021-08-18
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多