Coffescript:从现有类生成内联工作者

时间:2015-11-29 00:57:15

标签: javascript coffeescript web-worker

我正在制作一个很大的Coffeescript应用程序,我想使用网络工作者。 我不想从另一个文件中导入它们,所以我想内联它们,但是用coffeescript编写它们。

哪种方式最佳?

1 个答案:

答案 0 :(得分:0)

我现在想到的是以下内容:

有一个像这样的工人:

class LoginWorker 
  #worker with an awesome entry method
  process: (message)=>
    console.log "Processing #{message}"

我正在创建一个函数导出对象,它使用http://jsfiddle.net/numoccpk/1/

中的convertToText方法
exportObject: (obj)->
    # Gets the constructor implementation and then the prototype
    ctor = convertToText obj
    proto = convertToText obj.prototype

    # Stitch them together, now it looks like a worker file

    text = """
    // Defines the bind function from Coffeescript in order
    // to be able to use ()=> functions.
    var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
    var worker = #{ctor}
    worker.prototype = #{proto}
    var workerInstance = new worker;
    self.addEventListener('message', function(e) {
      workerInstance.process(e.data);
    }, false);

    """

    # Create a Blob and get its URL
    blobUrl = window.URL.createObjectURL new Blob([text])
    # Build the worker inline!
    worker = new Worker(blobUrl)

然后您只需要调用exportObject(LoginWorker),确保范围内LoginWorker可用。