2016-06-23 12 views
6

मुझे कहीं भी एक निश्चित उत्तर नहीं मिल रहा है।वेब वर्कर 20x खराब प्रदर्शन

मेरे पास बहुत ही सरल पीओसी है जो सिंक और एसिंक फैशन में एक ही फ़ंक्शन की गणना करता है।

Worker.js

onmessage = function(e) { 
    var s = new Date().getTime(); 
    i = 0; 
    var avg = Math.random(); 
    while (i < e.data){ 
    avg = (avg + Math.random())/2 ; 
    i++; 
    } 
    var d = new Date().getTime(); 
    console.log('Duration ' + (d - s)); 
    postMessage(avg); 
} 

Index.html

<script> 
var mw = new Worker("worker.js"); 

mw.onmessage = function(e) { 
    console.log('Worker says: ' + e.data); 
    }; 

function av (j){ 
    var s = new Date().getTime(); 
    i = 0; 
    var avg = Math.random(); 
    while (i < j){ 
    avg = (avg + Math.random())/2 ; 
    i++; 
    } 
    var d = new Date().getTime(); 
    console.log('Result is ' + avg); 
    console.log('Duration ' + (d - s)); 
} 



function runSync(){ 
    av(100000000); 
} 
function runAsync(){ 
    mw.postMessage(100000000); 
} 

</script> 

    <a href="#" onClick="runSync()" /> Run Sync </a> 

    <a href="#" onClick="runAsync()" /> Run Async </a> 

मेरी 4 कोर पर मैकबुक इस उत्पन्न करता है:

Result is 0.47398200501358567 
Duration 985 
Duration 23187 
Worker says: 0.7422913957976759 

आप वेब कार्यकर्ता देख सकते हैं की प्रक्रिया के लिए समय लेता है 20x । इसके लिए स्पष्टीकरण क्या है? अन्य संबंधित पदों ने कचरा संग्रह और ढेर का सुझाव दिया, लेकिन फिर अपराधी को कुछ एपीआई मुद्दा माना गया। मैं समझने के लिए उत्सुक हूं कि मजदूर क्या हैं और नहीं। जब कचरा कलेक्टर चलता है तो क्या उनके पास कुछ अजीब प्रदर्शन जुर्माना होता है? यदि हां, तो आप इस तरह की बाधाओं से बचने के तरीके में स्मृति का प्रबंधन कैसे करते हैं?

+5

यह महत्वपूर्ण नहीं हो सकता है, लेकिन मुझे लगता है कि कार्य बिल्कुल समान नहीं हैं। कार्यकर्ता संस्करण 'e.data' का उपयोग करता है जबकि मुख्य धागा एक' j'। यह भी जानना अच्छा होगा कि आपने किस ब्राउज़र में भाग लिया था। –

+5

'e.data' का उपयोग अपराधी है, अगर आप इसे एक चर में कैश करते हैं तो यह केवल रेखांकित स्क्रिप्ट (कम से कम क्रोम में) जितना तेज़ चलता है। – robertklep

+0

@robertklep आप सही हैं! यह इतना परेशानी क्यों कर रहा है? घटना के माध्यम से फिर से चल रहा है किसी भी तरह ढेर बढ़ता है? N.B. यह क्रोम पर चला गया। – dzh

उत्तर

0

वे नहीं बिल्कुल एक ही समारोह, आप e.data कार्यकर्ता में acessing कर रहे हैं कर रहे हैं, अपने, कैश की गई j सीधे जाकर की तुलना में बहुत धीमी जो करता है, तो आप बदल कि, वे एक ही समय के बारे में लेना चाहिए।

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