2009-06-08 9 views
11

मैं लाइन से अलग स्ट्रिंग पर कुछ काम करूंगा। पहले स्ट्रिंग.split के माध्यम से टेक्स्ट को विभाजित करने के लिए कौन सा तेज़ होगा और फिर परिणामस्वरूप सरणी पर चलें या सीधे पूरे टेक्स्ट को reg exp के माध्यम से चलें और रास्ते में अंतिम सरणी बनाएं?प्रदर्शन प्रश्न: String.split और फिर सरणी पर चलें, या RegExp?

उत्तर

12

ठीक है, आपका उत्तर पाने का सबसे अच्छा तरीका केवल 2 मिनट लेना है और एक लूप लिखना है जो यह एक हजार बार दोनों तरीकों से करता है और यह देखने के लिए फ़ायरबग जांचें कि कौन सा तेज़ है;)

मुझे एमएक्सएचआर पर काम करते समय बहुत सी स्ट्रिंग मुंगिंग को अनुकूलित करना पड़ा है और मेरे अनुभव में, सादे स्ट्रिंग विधियां मौजूदा ब्राउज़रों में RegExps की तुलना में काफी तेज हैं। सबसे कम स्ट्रिंग्स पर RegExps का उपयोग करें और स्ट्रिंग विधियों के साथ संभवतः आप जो भी कर सकते हैं वह करें।

उदाहरण के लिए, मैं अपने वर्तमान कोड में इस छोटे से नंबर का उपयोग:

var mime = mimeAndPayload.shift().split('Content-Type:', 2)[1].split(";", 1)[0].replace(' ', ''); 

यह नरक के रूप में बदसूरत है, लेकिन यह विश्वास है या नहीं यह अत्यधिक भार के बराबर RegExp की तुलना में काफी तेज है।

+1

मैंने फायरबग के माध्यम से परीक्षण माना लेकिन वास्तव में जेएस के समय माप पर भरोसा नहीं किया। एक सहायक उदाहरण के साथ आपके उत्तर के लिए बहुत बहुत धन्यवाद;) – BYK

+0

तो फायरबग पर भरोसा न करें - कुछ दिनांक वस्तुओं को बनाएं और तुलना करें – annakata

+0

वैसे मुझे जेएस डेट ऑब्जेक्ट्स पर भरोसा नहीं है जब से (कुछ समय पहले) मैं प्रदर्शन को मापने की कोशिश की, हालांकि दावा किया गया कि यह मिलीसेकंड सटीक था, यह हमेशा सेकंड के गुणक लौट रहा था। यही कारण है कि मुझे विश्वास नहीं है। – BYK

1

मुझे उम्मीद है कि विभाजन() का उपयोग करना बहुत तेज होगा। यह कई विनिर्देशों पर निर्भर करता है, लाइनों की लंबाई बनाम लंबाई, रेगेक्स की जटिलता इत्यादि।

+0

के लिए समय निकालने के लिए धन्यवाद (एक से अधिक ब्राउज़र के लिए मानदंड परिणाम है, साथ ही कार्यात्मक बेंचमार्क कोड में ही शामिल है) जवाब। मैंने यह भी उम्मीद की कि देशी विधियां तेजी से होंगी लेकिन इस सवाल के लिए आईएमओ के अनुभव से कुछ भी बेहतर नहीं हो सकता है। धन्यवाद वैसे भी =) – BYK

+1

वह उत्तर अनुभव पर आधारित है :) जैसा कि dfltr ने कहा था, आपको अपने विशेष मामले के लिए प्रयोग करने की आवश्यकता है। – RedFilter

+0

वैसे समस्या यह है कि, मैं स्ट्रिंग आकार को नहीं जानता और regexp एक साधारण \ n | \ r matcher होगा यदि मैं regexp का उपयोग करता हूं। कोई और सुझाव? =) (बीटीडब्ल्यू सोचने के लिए खेद है कि यह अनुमान था;)) – BYK

9

हालांकि इस 2½ है साल देर से, उम्मीद है कि यह कुछ प्रकाश इस मामले पर भविष्य में किसी भी दर्शकों के लिए शेड में मदद करता है: http://jsperf.com/split-join-vs-regex-replace

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