17

मैं वेब श्रमिकोंमैं वेब श्रमिकों के साथ क्या उपयोग कर सकता हूं?

  • कार्यकर्ता है भंडारण के लिए उपयोग किया के बारे में कुछ प्रश्न हैं? ईजी। अनुक्रमित डीबी/वेबएसक्यूएल और फ़ाइल के स्थानीय भंडारण से कार्यकर्ता शुरू किया गया था?

  • मैं किसी कार्यकर्ता में फ़ाइल कैसे शामिल कर सकता हूं? मेरे पास functions.js है जिसमें त्वरित ऐप से संबंधित फ़ंक्शंस हैं और यह वास्तव में किसी कार्यकर्ता में फ़ाइल की सामग्री को पेस्ट करने के लिए समझ में नहीं आता है, केवल दो अलग-अलग स्थानों को मेरे कार्यों को अपडेट करने के लिए।

  • क्या मेरे पास एक कर्मचारी के अंदर एक डोम हो सकता है? अपनी अवधि पढ़ने के लिए एक अस्थायी ऑडियो टैग में एक ऑडियो फ़ाइल लोड करने की तरह और यदि यह बजाने योग्य है या नहीं। मूल पृष्ठ के डोम तक नहीं पहुंचें, लेकिन कार्यकर्ता में स्वयं एक डोम है।

  • यदि किसी भी प्रश्न का उत्तर नकारात्मक है तो इसे मैन्युअल रूप से कैसे किया जा सकता है?

यह क्रोम ऐप के लिए है इसलिए मुझे नवीनतम क्रोम एपीआई तक पहुंच है और मुझे पिछड़े संगतता की परवाह करने की आवश्यकता नहीं है।

उत्तर

9

वेब कार्यकर्ता - अवधि से किसी भी प्रकार का कोई डोम एक्सेस नहीं है। सभी डीओएम हेरफेर मुख्य जेएस धागे से किया जाना चाहिए। वेब श्रमिक केवल संदेश के माध्यम से मुख्य धागे के साथ संवाद कर सकते हैं।

यह previous SO question आपको बताता है कि वेब कर्मचारी स्थानीय संग्रहण तक नहीं पहुंच सकते हैं, जो कि Google खोज के साथ आसानी से मिलता है।

उसी धागे की एक सूची है जो वेब श्रमिकों तक पहुंच सकते हैं।

यह स्पष्ट नहीं है कि "कार्यकर्ता में एक फ़ाइल शामिल करें" का क्या मतलब है। आप स्क्रिप्ट आयात कर सकते हैं। मुझे नहीं पता कि आप और क्या पूछ रहे हैं। आप डेटा लाने के लिए AJAX कॉल का उपयोग कर सकते हैं यदि इससे आपकी ऑडियो फ़ाइल में आपकी सहायता होगी।

यह मुझे लगता है कि आप वेब श्रमिकों के साथ क्या कर सकते हैं और नहीं कर सकते हैं इसके बारे में कुछ बुनियादी शोध करने की आवश्यकता है (जैसा कि वेब पर इसके बारे में लिखा गया है) और फिर बहुत अधिक विशिष्ट के साथ वापस आना प्रश्न जो उस ज्ञान को शामिल करते हैं।

वेब श्रमिकों के लिए कोई हैक नहीं है जो आपको करने में सक्षम होने से अधिक करने देता है।

आप मुख्य जेएस थ्रेड में काम कर सकते हैं और सेटटाइमआउट के साथ इसे छोटे टुकड़ों में कर सकते हैं यदि आपके पास बहुत काम है और मुख्य UI को यथासंभव उत्तरदायी रखना चाहते हैं। यह एक बहुत पुराना डिज़ाइन पैटर्न है जो थ्रेडिंग उपलब्ध होने या उपयोग करने में आसान होने से पहले दिन वापस चला जाता है। इसमें आपके काम को डिजाइन करना शामिल है जैसे कि इसे कुछ लगातार वस्तुओं में संग्रहीत राज्य के साथ छोटे टुकड़ों में किया जा सकता है और फिर आप बार-बार काम की थोड़ी मात्रा कर सकते हैं और फिर वापस लौट सकते हैं, केवल अगले टाइमर टिक पर काम के अगले भाग को लेने के लिए ।

+0

अच्छी तरह से हाँ लेकिन ऑडियो टैग में एमपी 3 लोड करने में बहुत समय लगता है। श्रमिक इसके लिए एक संभावित समाधान थे लेकिन उनके पास डोम नहीं है। तो आप कैसे सुझाव देते हैं कि मैं फ़ाइलों की अवधि पढ़ता हूं? और शामिल करने के बारे में क्या? एक हैक अगर अपरिहार्य ..: ओ – Achshar

+0

मैंने अपने जवाब में और जोड़ा। – jfriend00

+0

अच्छी तरह से शामिल है मेरा मतलब था 'मेरे पास एक function.js है जिसमें त्वरित ऐप से संबंधित फ़ंक्शंस हैं और यह वास्तव में किसी कार्यकर्ता में फ़ाइल की सामग्री पेस्ट करने के लिए समझ में नहीं आता है (जैसा कि [1] में बताया गया है) और हाँ' importScripts' मुझे क्या चाहिए, धन्यवाद! 'हैक' से मेरा मतलब कुछ फाइल की सामग्री पढ़ने और उन्हें eval में जोड़ने जैसा था। (हाँ मुझे पता है कि बुरा लगता है, लेकिन यह किसी कारण के लिए एक हैक होता) जब तक कि मैं आयातकों के बारे में नहीं पढ़ता। खेद है कि अगर मेरा प्रश्न लंगड़ा महसूस करता है, जैसा कि आप बता सकते हैं, मैं श्रमिकों के लिए नया हूं ..: ओ – Achshar

3

आप जावास्क्रिप्ट लाइब्रेरी लोड कर सकते हैं। यह उदाहरण देखें:

<body> 
    <button>Start</button> 
    <div id="output"></div> 
    <script id="worker_1" type="text/js-worker"> 
     importScripts(base_url + '/worker_lib2.js'); 

     function run(event) { 
      var msg = event.data; 
      this.postMessage({ answer: hello(event.data.name)}); 
     } 

     this.addEventListener('message', run, false); 
    </script> 

    <script> 
     var base_url = window.location.href.replace(/\\/g,'/').replace(/\/[^\/]*$/, ''); 
     var array = ['var base_url = "' + base_url + '";' + $('#worker_1').html()]; 
     var blob = new Blob(array, {type: "text/javascript"}); 

     $('button').click(function() { 
      var url = window.URL.createObjectURL(blob); 
      console.log(url); 
      var worker = new Worker(url); 
      worker.addEventListener('message', function(event) { 
       $('#output').html(event.data.answer); 
      }, false); 
      worker.postMessage({ 
       name: 'Steve' 
      }); 
     }); 
    </script> 
</body> 

पुस्तकालय कार्यकर्ता_lib2.js के साथ हैलो फ़ंक्शन वाला।

function hello(msg) { 
    return 'Hello... ' + msg; 
} 
संबंधित मुद्दे