2012-02-11 7 views
9

मेरे पास Requjs और Backbonejs के साथ एक अच्छी तरह से काम कर रहे ऐप लेखन है, लेकिन यह वास्तव में कभी-कभी धीमा हो रहा है ... उदाहरण के लिए जब कुछ अंकगणित कार्य करने की बात आती है!आवश्यकता के साथ एक मॉड्यूल निर्माण में वेब श्रमिकों का उपयोग कैसे करें?

मेरे मॉड्यूल (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 
}); 

लेकिन मुझे त्रुटि परिभाषित परिभाषित नहीं है !!

मैंने इसे this की तरह भी कोशिश की लेकिन कोई सफलता नहीं !!

वेब वर्कर का उपयोग requjs या backbonejs के साथ कैसे करें ??

धन्यवाद!

उत्तर

12

आप वेब श्रमिकों से आवश्यक जेएस का उपयोग कर सकते हैं: अधिक जानकारी के लिए API docs देखें।

एकमात्र आवश्यकता वेब वर्कर की शुरुआत में importScripts(…) के साथ आवश्यक जेएस लोड करना है। एक बार लोड होने के बाद, आप define का उपयोग कर सकते हैं और सामान्य की आवश्यकता जेएसएस का उपयोग कर सकते हैं।

मेरे लिए महत्वपूर्ण हिस्सा है जब मैं काम करने के लिए यह हो रही थी यकीन है कि तुम भी वेब कार्यकर्ता जिसे आपने अपने ऐप्लिकेशन के बाकी हिस्सों में उपयोग कर रहे हैं में एक ही बूटस्ट्रैप विन्यास (जैसे config.js या main.js) लोड कर रहे हैं बनाने के लिए किया गया था। यह वही दस्तावेज़ के बारे में जब यह कहते हैं बात कर रही है है:

आप की संभावना सुनिश्चित करें की आवश्यकता बनाने के लिए baseurl विन्यास विकल्प सेट करने की आवश्यकता होगी() स्क्रिप्ट लोड करने का मिल सकता है।

एक और बात यह है कि आप कार्यकर्ता अपने traffic.js फ़ाइल से एक मॉड्यूल आईडी के साथ this requireJS plugin उपयोग (बजाय स्क्रिप्ट पथ हार्डकोड का) लोड हो सके।

+0

मैं वेब कार्यकर्ता को लोड करने और शुरू करने में सक्षम हूं, लेकिन यह 'postMessage()' का जवाब नहीं देगा यदि 'addEventListener()' 'आवश्यकता (फ़ंक्शन {})' ब्लॉक के भीतर किया जाता है। मेरे कार्यकर्ता कार्यक्रम श्रोता को विभिन्न requjs मॉड्यूल कॉल करने की आवश्यकता है। आपके द्वारा उल्लिखित एपीआई दस्तावेज़ों में उदाहरण, अर्थात् https://github.com/jrburke/requirejs/blob/master/tests/workers.js, कोई 'ऑनमेज' श्रोता सेट नहीं करता है। कोई विचार? – Fuhrmanator

+0

@ फ़ुहरमैनेटर वैकल्पिक रूप से, आप सीधे 'ऑनमेसेज' ईवेंट हैंडलर सेट कर सकते हैं (हालांकि addEventListener हमेशा जावास्क्रिप्ट निंजा द्वारा प्रोत्साहित किया जाता है)। (Http://www.html5rocks.com/en/tutorials/workers/basics/)। ** यदि आप वेब श्रमिकों के लिए आवश्यकताएँ जेएस प्लगइन का उपयोग करते हैं, तो ऑनमेज सिंटैक्स का उपयोग करें, ** मूल कार्यकर्ता उपलब्ध नहीं होने पर अन्यथा, प्लगइन के साथ शामिल पॉलीफिल नकली-वर्कर.जेएस काम नहीं करेगा। –

+1

@puro_nervio मैं इसे अंत में काम करने में सक्षम था। एक कामकाजी उदाहरण मैंने पाया कि कार्यकर्ता 'addEventListener() 'से पहले मुख्य धागे के जवाब देने के लिए' postMessage()' करता है। मुझे लगता है कि मेरी समस्या यह थी कि धागा तैयार नहीं था जब मेरा मुख्य धागा इसे करने के लिए काम कर रहा था। कई मॉड्यूल की आवश्यकताएं कुछ समय लेती हैं, इसलिए 'addEventListener' को मुख्य थ्रेड से पहले' पोस्ट मैसेज() 'को कुछ करने के लिए कहने के लिए निष्पादित नहीं किया गया था। दूसरे शब्दों में, मुख्य धागे को इसके साथ पहले सिंक्रनाइज़ करना होगा। – Fuhrmanator

संबंधित मुद्दे