2012-12-13 17 views
47

मैं समझता हूँ की तरहफास्ट तरीका

var a = "hello"; 
a += " world"; 

यह अपेक्षाकृत बहुत धीमी है कुछ कर रही है कि, जैसा कि ब्राउज़र O(n) में करता है। क्या नई पुस्तकालयों को स्थापित किए बिना ऐसा करने का एक तेज तरीका है?

+4

भले ही यह सच होगा (स्ट्रिंग का समन्वय बहुत धीमा है), क्या आपका कोड इस पर निर्भर करता है कि यह भी महत्वपूर्ण है? – WTK

उत्तर

32

जावास्क्रिप्ट में स्ट्रिंग्स में शामिल होने के लिए यह सबसे तेज़ तरीका है।

अधिक जानकारी के लिए, देखें:

Why is string concatenation faster than array join?

JavaScript: How to join/combine two arrays to concatenate into one array?

+1

मेरे परीक्षणों में, स्ट्रिंग कॉन्सटेनेशन nodejs v 0.12.2 (और ut.format से 100 गुना तेज) में array.join से 10 गुना तेज था http://edsykes.blogspot.de/2015/08/a-quick-comparison -of-speed-of.html –

8

स्ट्रिंग को जोड़ने के लिए जावास्क्रिप्ट में वास्तव में कोई अन्य तरीका नहीं है।
आप सैद्धांतिक रूप से .concat() इस्तेमाल कर सकते हैं, लेकिन यह सिर्फ +

पुस्तकालय से way slower है विशेष रूप से स्ट्रिंग संयोजन या सांख्यिक संचालन जैसे बुनियादी कार्यों पर अधिक बार नहीं देशी जावास्क्रिप्ट की तुलना में धीमी की तुलना में कर रहे हैं।

बस डालें: + सबसे तेज़ है।

14

सवाल पहले से ही उत्तर है, लेकिन जब मैं पहली बार इसे देखा मैं NodeJS बफर के बारे में सोचा। लेकिन यह + से धीमा तरीका है, इसलिए यह संभव है कि स्ट्रिंग कॉन्सटेनेशन में + से कुछ भी तेज न हो।

निम्न कोड के साथ परीक्षण किया गया:

function a(){ 
    var s = "hello"; 
    var p = "world"; 
    s = s + p; 
    return s; 
} 

function b(){ 
    var s = new Buffer("hello"); 
    var p = new Buffer("world"); 
    s = Buffer.concat([s,p]); 
    return s; 
} 

var times = 100000; 

var t1 = new Date(); 
for(var i = 0; i < times; i++){ 
    a(); 
} 

var t2 = new Date(); 
console.log("Normal took: " + (t2-t1) + " ms."); 
for (var i = 0; i < times; i++){ 
    b(); 
} 

var t3 = new Date(); 

console.log("Buffer took: " + (t3-t2) + " ms."); 

आउटपुट:

Normal took: 4 ms. 
Buffer took: 458 ms. 
+1

उस बफर के साथ, आप एक स्ट्रिंग वाले रैपर को प्रारंभ कर रहे हैं, फिर आप 2 रैपर से एक सरणी बना रहे हैं, जिसमें सरणी के माध्यम से कॉन्सटेनेट फ़ंक्शन लूप है, (और शायद ' तारों को संयोजित करने के लिए), और इसे वापस करें। मुझे लगता है कि यह बताता है कि बफर धीमा क्यों है। – Cerbrus

1

आप प्रदर्शन के बारे में पूछा। यह perf test 'कॉन्सट', '+' और 'जॉइन' की तुलना में देखें - संक्षेप में + ऑपरेटर कम से कम जीतता है।

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