दिलचस्प पोस्ट
Google Plus लॉगिन के एकीकरण के साथ "एक आंतरिक त्रुटि हुई" Java और .NET में स्ट्रिंग्स अचूक क्यों नहीं हो सकते? जावा में पूरा करने के लिए एकाधिक थ्रेड्स पर प्रतीक्षा की जा रही है मैं ब्राउज़र में CSS3 ट्रांज़िशन फ़ंक्शन को कैसे सामान्य कर सकता हूं? एकाधिक सूचियों से सभी संयोजन उत्पन्न करें घुमाओ HTML ड्रॉस्ट्रिंग कोशिश / पकड़ो + का प्रयोग, सही वाक्यविन्यास SQL सर्वर: पंक्तियों के लिए कॉलम UISlider की अंगूठे की छवि का केंद्र कैसे प्राप्त करें बटन पर क्लिक किए बिना अनंत फ़्रेम को छोटा करना विधि परिभाषा में पैरामीटर के रूप में नग्न तारांकन: def f (*) घोंसले के शिकार एनजी-कोयले जेएस में विचार PHP में डेटाबेस में सत्र सेट करें एनएलटीके और वर्डनेट का उपयोग करना; मैं अपने वर्तमान, अतीत या पिछले कृत्रिम रूप में सरल काल क्रिया कैसे बदलूं? PHP एईएस एन्क्रिप्ट / डिक्रिप्ट

+ ऑपरेटर कम प्रदर्शनकर्ता StringBuffer.append () से कम है

मेरी टीम में, हम आमतौर पर इस तरह से स्ट्रिंग कॉन्सटेन्टेशन करते हैं:

var url = // some dynamically generated URL var sb = new StringBuffer(); sb.append("<a href='").append(url).append("'>click here</a>"); 

जाहिर है निम्नलिखित अधिक पठनीय है:

 var url = // some dynamically generated URL var sb = "<a href='" + url + "'>click here</a>"; 

लेकिन जेएस विशेषज्ञों का दावा है कि + ऑपरेटर StringBuffer.append() से कम प्रदर्शनकर्ता है। क्या यह वाकई सच है?

वेब के समाधान से एकत्रित समाधान "+ ऑपरेटर कम प्रदर्शनकर्ता StringBuffer.append () से कम है"

इंटरनेट एक्सप्लोरर एकमात्र ब्राउज़र है जो वास्तव में आज की दुनिया में इस से ग्रस्त है। (संस्करण 5, 6 और 7 कुत्ते धीमे थे। 8 एक ही गिरावट नहीं दिखाता है।) और क्या है, IE धीमा हो जाता है और धीमी गति से आपकी स्ट्रिंग कितनी है

यदि आपके पास लंबे समय से जोड़ने के लिए तार हैं तो निश्चित रूप से एक सरणी का उपयोग करें। (या इसके चारों ओर स्ट्रिंगबफर आवरण, पठनीयता के लिए।) लेकिन अगर आपकी स्ट्रिंग्स कम हो तो परेशान न करें।

आपका उदाहरण एक अच्छा नहीं है, क्योंकि यह बहुत कम संभावना नहीं है कि प्रदर्शन signficantly अलग होगा। आपके उदाहरण की पठनीयता में प्रदर्शन को तुच्छ होना चाहिए क्योंकि दूसरे के बनाम प्रदर्शन लाभ लापरवाह है। सरणी (स्ट्रिंगबफर) के लाभ केवल तब स्पष्ट होते हैं जब आप कई संविदात्मकताएं कर रहे हैं। फिर भी आपका माइलेज आपके ब्राउज़र पर निर्भर करता है।

यहां एक विस्तृत निष्पादन विश्लेषण है जो कई अलग-अलग ब्राउज़रों में सभी अलग-अलग जावास्क्रिप्ट कन्टेनटाइनेशन विधियों का उपयोग कर प्रदर्शन दिखाता है; स्ट्रिंग प्रदर्शन एक विश्लेषण

एक बार में शामिल होने (), concat () एक बार, के लिए () के लिए, + = के लिए, concat () के लिए

अधिक:
Ajaxian >> स्ट्रिंग प्रदर्शन IE में: Array.join बनाम + = जारी रखा

हां यह सच है लेकिन आपको परवाह नहीं करना चाहिए पढ़ना आसान है कि एक के साथ जाओ। यदि आपको अपना ऐप बेंचमार्क करना है, तो बाधाओं पर ध्यान केंद्रित करें।

मुझे लगता है कि स्ट्रिंग कंसैनेटेशन आपके बाधाओं को नहीं होने जा रहा है।

माइकल हरेन के साथ सहमत

इसके अलावा एरे के उपयोग पर विचार करें और अगर वास्तव में कोई समस्या है तो इसमें शामिल होना चाहिए।

 var buffer = ["<a href='", url, "'>click here</a>"]; buffer.push("More stuff"); alert(buffer.join("")); 

इसे इस्तेमाल करे:

 var s = ["<a href='", url, "'>click here</a>"].join(""); 

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

मुझे संदेह है कि पुस्तकालय (जेएसएल में लिखे गए) कुछ भी तेज़ी से उत्पादन करेंगे, हालांकि मूल स्ट्रिंगबफर ऑब्जेक्ट हो सकता है निश्चित जवाब एक प्रोफ़फ़ेलर के साथ मिल सकता है (यदि आप एक ब्राउज़र में चल रहे हैं तो फायरबग आपको फ़ायरफ़ॉक्स में जेएस इंजिन के लिए प्रोफ़ाइल प्रदान करेगा)।

पहले से ही कुछ उपयोगकर्ताओं ने ध्यान दिया है: यह छोटे तारों के लिए अप्रासंगिक है।

और फ़ायरफ़ॉक्स, सफारी या गूगल क्रोम में नए जावास्क्रिप्ट इंजन इतने अनुकूल हैं

 "<a href='" + url + "'>click here</a>"; 

के रूप में उपवास के रूप में है

 ["<a href='", url, "'>click here</a>"].join(""); 

Knuth के शब्दों में, "समय से पहले अनुकूलन सभी बुराइयों की जड़ है!" छोटे से किसी भी तरह की ओर रुख के अंत में असर नहीं पड़ेगा; मैं और अधिक पठनीय एक चुनना चाहते हैं

विधि को पढ़ने में आसान समय मनुष्यों को संचित मात्रा में बचाता है, जबकि "तेज" पद्धति केवल अशुल्लक और समय की संभावना नगण्य मात्रा को बर्बाद करती है जब लोग पृष्ठ ब्राउज़ कर रहे हैं।

मुझे पता है कि यह पोस्ट लंगड़ा है, लेकिन मैं गलती से पूरी तरह से कुछ अलग तरह से सोच रहा था कि यह एक अलग धागा था और मुझे नहीं पता कि पोस्ट कैसे हटाना है। मेरी गलती…

एक त्वरित बेंचमार्क सेट करना और jspref.com का उपयोग करते हुए जावास्क्रिप्ट प्रदर्शन विविधताओं को देखना बहुत आसान है। जो शायद इस प्रश्न के बारे में नहीं पूछा गया था। लेकिन लोगों के लिए इस सवाल पर ठोकर खाई जा रही है कि उन्हें साइट पर एक ही जगह लेनी चाहिए।

मैंने http://jsperf.com/string-concat-methods-test पर concatenation के विभिन्न तरीकों का त्वरित परीक्षण किया।

मैं कार्यात्मक शैली का उपयोग करना चाहता हूं, जैसे कि:

 function href(url,txt) { return "<a href='" +url+ "'>" +txt+ "</a>" } function li(txt) { return "<li>" +txt+ "</li>" } function ul(arr) { return "<ul>" + arr.map(li).join("") + "</ul>" } document.write( ul( [ href("http://url1","link1"), href("http://url2","link2"), href("http://url3","link3") ] ) ) 

यह शैली पठनीय और पारदर्शी लगता है यह उपयोगिताओं के निर्माण की ओर जाता है जो कोड में पुनरावृत्ति को कम कर देता है।

यह भी स्वचालित रूप से मध्यवर्ती तार का उपयोग करने के लिए जाता है

जहां तक ​​मुझे पता है, हर सम्मिलन में एक स्मृति पुन: नियोजन है। तो समस्या यह करने वाले ऑपरेटर नहीं है, समाधान संयोजन की संख्या को कम करने के लिए है। उदाहरण के लिए, जब आप कर सकते हैं तब चलने वाले संरचनाओं के बाहर सम्मिलन करते हैं।

हां, सामान्य मानक के अनुसार। उदाहरण: http://mckoss.com/jscript/SpeedTrial.htm

लेकिन छोटे तारों के लिए, यह अप्रासंगिक है। आप केवल बहुत बड़ी स्ट्रिंग्स पर प्रदर्शन के बारे में ध्यान देंगे। क्या अधिक है, ज्यादातर जेएस लिपि में, बोतल की गर्दन शायद ही कभी स्ट्रिंग मेहनतों पर होती है क्योंकि इसमें पर्याप्त नहीं है।

आप बेहतर डोम हेरफेर देखना चाहते हैं