यह सवाल before कहा गया है, लेकिन किसी कारण से, ओ पी हटाने का निर्णय लिया।
यदि कोई फ़ंक्शन से वेब कार्यकर्ता बनाने के लिए किसी विधि की आवश्यकता है, तो मैं अपना उत्तर दोबारा पोस्ट करता हूं।
this post में, तीन तरीके एक मनमाना स्ट्रिंग से एक वेब कार्यकर्ता बनाने के लिए दिखाया गया है। इस जवाब में, मैं तीसरी विधि का उपयोग कर रहा हूं, क्योंकि यह सभी वातावरण में समर्थित है।
एक सहायक फ़ाइल की जरूरत है:
// 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');
ध्यान दें कि स्कोप सख्ती से अलग होती है:
// Worker-helper.js
self.onmessage = function(e) {
self.onmessage = null; // Clean-up
eval(e.data);
};
अपने वास्तविक कार्यकर्ता में, इस प्रकार इस सहायक फ़ाइल प्रयोग किया जाता है। चर केवल worker.postMessage
और worker.onmessage
का उपयोग करके पारित किया जा सकता है। सभी संदेश structured clones हैं।
स्रोत
2012-07-08 09:05:22
एक अन्य प्लगइन जो आपकी मदद कर सकती है [vkThread] (http://www.eslinstructor.net/vkthread/) है। [Http://www.eslinstructor.net/vkthread/](http://www.eslinstructor.net/vkthread/) पर एक नज़र डालें, आपको वहां उदाहरण और दस्तावेज़ीकरण मिलेगा। – vadimk
आपको एक यूआरएल का उपयोग करने की जरूरत है लेकिन कुछ ब्राउज़र आपको एक बीएलओबी यूआरएल का उपयोग करने की अनुमति देंगे। एक उदाहरण के लिए [यह] (http://stackoverflow.com/a/6454685/19676) उत्तर देखें। – Maurice
जैसा कि @Qix ने एक और reponses टिप्पणियों में कहा, vkThread भी function.toString पर आधारित है, जो ब्राउज़र के बीच असंगतता लाता है। –