Câu hỏi này đã được hỏi before, nhưng đối với một số lý do, OP đã quyết định xóa nó.
Tôi đăng lại câu trả lời của mình, trong trường hợp người ta cần một phương pháp để tạo một nhân viên Web từ một hàm.
Trong this post, ba cách được hiển thị để tạo một công nhân Web từ một chuỗi tùy ý. Trong câu trả lời này, tôi đang sử dụng phương pháp thứ ba, vì nó được hỗ trợ trong tất cả các môi trường.
Một tập tin helper là cần thiết:
// Worker-helper.js
self.onmessage = function(e) {
self.onmessage = null; // Clean-up
eval(e.data);
};
Trong Worker thực tế của bạn, tập tin helper này được sử dụng như sau:
// Create a Web Worker from a function, which fully runs in the scope of a new
// Worker
function spawnWorker(func) {
// Stringify the code. Example: (function(){/*logic*/}).call(self);
var code = '(' + func + ').call(self);';
var worker = new Worker('Worker-helper.js');
// Initialise worker
worker.postMessage(code);
return worker;
}
var worker = spawnWorker(function() {
// This function runs in the context of a separate Worker
self.onmessage = function(e) {
// Example: Throw any messages back
self.postMessage(e.data);
};
// etc..
});
worker.onmessage = function() {
// logic ...
};
worker.postMessage('Example');
Lưu ý rằng phạm vi được tách nghiêm ngặt. Các biến chỉ có thể được chuyển qua và sử dụng worker.postMessage
và worker.onmessage
. Tất cả các tin nhắn là structured clones.
Nguồn
2012-07-08 09:05:22
Một plugin khác có thể giúp bạn là [vkThread] (http://www.eslinstructor.net/vkthread/). Hãy xem [http://www.eslinstructor.net/vkthread/](http://www.eslinstructor.net/vkthread/) Bạn sẽ tìm thấy các ví dụ và tài liệu ở đó. – vadimk
Bạn cần sử dụng URL nhưng một số trình duyệt sẽ cho phép bạn sử dụng URL BLOB. Xem [this] (http://stackoverflow.com/a/6454685/19676) câu trả lời cho một ví dụ. – Maurice
Như @Qix cho biết trong một ý kiến đóng góp khác, vkThread cũng dựa trên function.toString, mang lại sự không thống nhất giữa các trình duyệt. –