我正在制作一个很大的Coffeescript应用程序,我想使用网络工作者。 我不想从另一个文件中导入它们,所以我想内联它们,但是用coffeescript编写它们。
哪种方式最佳?
答案 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
可用。