लॉश और अंडरस्कोर के बीच अंतर [बंद]


1602

क्यों कोई या तो लॉश को पसंद करेगा । दूसरे पर अंडरस्कोर या अंडरस्कोर उपयोगिता पुस्तकालय।

लोडश को अंडरस्कोर के बदले एक ड्रॉप-इन रिप्लेसमेंट लगता है, बाद वाले लंबे समय तक बने रहे।

मुझे लगता है कि दोनों प्रतिभाशाली हैं, लेकिन मुझे इस बारे में पर्याप्त जानकारी नहीं है कि वे एक शिक्षित तुलना करने के लिए कैसे काम करते हैं, और मैं मतभेदों के बारे में अधिक जानना चाहूंगा।


2
हो सकता है कि आप इसके गिथब पृष्ठ पर जुड़े हुए कुछ स्क्रीन-कास्ट पर नज़र रखना चाहें । व्यक्तिगत रूप से मैं अंडरस्कोर का उपयोग कर रहा हूं। जेएस, लेकिन अधिक इसलिए क्योंकि मैंने जो शुरू किया था और जैसा कि आप कहते हैं कि यह लंबे समय तक रहा है।
जैक

26
lodashऔर अब मर्ज धागे केunderscore तहत कर रहे हैं
zangw

जवाबों:


2022

मैंने एरेज़, स्ट्रिंग्स, ऑब्जेक्ट्स, और argumentsऑब्जेक्ट्स 1 के लिए अधिक सुसंगत क्रॉस-एनवायरनमेंट पुनरावृत्ति सहायता प्रदान करने के लिए लो-डैश बनाया । तब से यह अंडरस्कोर का सुपरसेट बन गया है, अधिक सुसंगत एपीआई व्यवहार प्रदान करता है, अधिक सुविधाएँ (जैसे AMD सपोर्ट, डीप क्लोन, और डीप मर्ज), अधिक गहन प्रलेखन और यूनिट टेस्ट (परीक्षण जो नोड, रिंगो, राइनो, नरवाल, फैंटम जेएस में चलते हैं) , और ब्राउज़र), बड़े सरणियों / वस्तु पुनरावृत्ति के लिए बेहतर समग्र प्रदर्शन और अनुकूलन, और कस्टम बिल्ड और टेम्पलेट पूर्व-संकलन उपयोगिताओं के साथ अधिक लचीलापन ।

क्योंकि लो-डैश अंडरस्कोर की तुलना में अधिक बार अपडेट किया जाता है, अंडरस्कोर के नवीनतम स्थिर संस्करण के साथ संगतता सुनिश्चित करने के लिए एक lodash underscoreबिल्ड प्रदान किया जाता है।

एक बिंदु पर मुझे अंडरस्कोर में पुश एक्सेस भी दिया गया था , क्योंकि लो-डैश 30 से अधिक मुद्दों को उठाने के लिए जिम्मेदार है; बग फिक्स, नई सुविधाओं, और अंडरस्कोर v1.4.x + में पूर्ण लाभ लैंडिंग।

इसके अलावा कम से कम 3 बैकबोन बॉयलरप्लेट हैं जिनमें डिफ़ॉल्ट रूप से लो-डैश शामिल हैं और लो-डैश अब बैकबोन के आधिकारिक दस्तावेज में उल्लिखित है ।

लो-डैश और अंडरस्कोर के बीच के मतभेदों पर गहन विराम के लिए, किट कैम्ब्रिज की पोस्ट, लो-डैश को "हैलो" कहें

फुटनोट:

  1. अंडरस्कोर में सरणियों, तारों, वस्तुओं और argumentsवस्तुओं के लिए असंगत समर्थन है । नए ब्राउज़रों में, अंडरस्कोर विधियाँ सरणियों में छिद्रों को अनदेखा करती हैं , "ऑब्जेक्ट्स" विधियाँ argumentsवस्तुओं को पुनरावृत्त करती हैं, तार को सरणी-प्रकार के रूप में माना जाता है, और विधियाँ सही रूप से पुनरावृति कार्य (उनकी "प्रोटोटाइप" संपत्ति की अनदेखी) और वस्तुओं ("toString" और "जैसे छायांकित गुणों को पुनरावृत्त करती हैं") "valueOf"), जबकि पुराने ब्राउज़रों में वे नहीं होंगे। इसके अलावा, अंडरस्कोर तरीके _.cloneएरे में छेदों को संरक्षित करते हैं, जबकि अन्य पसंद _.flattenनहीं करते हैं।

174
@ ब्रायन - लो-डैश को विकसित करते समय मैंने यह सवाल पूछना जारी रखा है कि "अंडरस्कोर की तुलना में लो-डैश में कोई व्यक्ति क्या इंगित कर सकता है?" और फिर उन्हें संबोधित करें। यही कारण है कि मैंने प्रलेखन को जोड़ दिया है, कस्टम बिल्ड जोड़े हैं, और स्रोत को अधिक पठनीय बनाया है।
जॉन-डेविड डाल्टन

10
मुझे कुछ बेंचमार्क पोस्ट करने का बहुत शौक है, लेकिन यह थकाऊ हो सकता है। पर्याप्त कहना है कि हर बेंचमार्क मैं के बाद शुरू लो-डैश साबित हो गया है तेजी से (होने के लिए ज्यादा तेजी से कई मामलों में) अंडरस्कोर से।
विल मूर III

186
मुझे लो-डैश से प्यार है और मैं इसका इस्तेमाल कर रहा हूं, इसलिए कृपया मुझे नहीं लगता कि मैं कोस रहा हूं, लेकिन एक नई लाइब्रेरी बनाने के बजाय अंडरस्कोर में योगदान क्यों नहीं दे रहा हूं?
Xananax

133
@Xananax - टिप्पणियों के धागे की जाँच करें: github.com/jashkenas/underscore/commit/… - यह उस प्रश्न का उत्तर दे सकता है।
रोब ग्रांट

41
क्या लॉकेट को वापस अंडरस्कोर में मर्ज करने का कोई प्रयास किया गया है?
स्ट्रीटलाइट

186

लो-डैश अंडरस्कोर से प्रेरित है, लेकिन आजकल बेहतर समाधान है। आप अपने कस्टम बिल्ड बना सकते हैं , उच्च प्रदर्शन कर सकते हैं , एएमडी का समर्थन कर सकते हैं और महान अतिरिक्त विशेषताएं रख सकते हैं । Jsperf पर इस लो-डैश बनाम अंडरस्कोर बेंचमार्क की जाँच करें और लो-डैश के बारे में यह भयानक पोस्ट :

जब आप संग्रह के साथ काम करते हैं, तो सबसे उपयोगी विशेषता शॉर्टहैंड सिंटैक्स है:

var characters = [
  { 'name': 'barney', 'age': 36, 'blocked': false },
  { 'name': 'fred',   'age': 40, 'blocked': true }
];

// using "_.filter" callback shorthand
_.filter(characters, { 'age': 36 });

// using underscore
_.filter(characters, function(character) { return character.age === 36; } );

// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]

( लॉश डॉक्स से लिया गया )


1
किट कैंब्रिज के ब्लॉग का लिंक बहुत जानकारीपूर्ण है।
ब्रायन एम। हंट

मुझे लगता है कि यह गलत है (प्लक उदाहरण)। अंतिम अद्यतन 1.8.3 के रूप में, आप उसी तरह का उपयोग कर सकते हैं जैसे कि लॉश। वैसे भी पिछले संस्करणों के लिए मुझे नहीं लगता कि अंडरस्कोर एक ऐसे फंक्शन का पर्दाफाश करेगा जो एक ही नक्शा हो (आपके अंडरस्कोर का उदाहरण एक मैप फंक्शन की तरह लगता है)
एलेक्सरवर

7
filter2012 से अंडरस्कोर में सुविधा github.com/jashkenas/underscore/issues/648 (इसका नाम है where)
मुहम्मद Hewedy

मैं लो-डैश बनाम अंडरस्कोर बेंचमार्क लिंक पर त्रुटि 500 ​​प्राप्त कर रहा हूं
हिलेले

86

अगर मेरी तरह आप अंडरस्कोर और लॉश के बीच उपयोग के अंतरों की एक सूची की उम्मीद कर रहे थे, तो अंडरस्कोर से लॉश करने के लिए माइग्रेट करने के लिए एक गाइड है

यहाँ वर्तमान स्थिति के बाद के लिए है:

  • अंडरस्कोर _.anyलॉडश है_.some
  • अंडरस्कोर _.allलॉडश है_.every
  • अंडरस्कोर _.composeलॉडश है_.flowRight
  • अंडरस्कोर _.containsलॉडश है_.includes
  • अंडरस्कोर _.eachलौटने से बाहर निकलने की अनुमति नहीं देता हैfalse
  • अंडरस्कोर _.findWhereलॉडश है_.find
  • _.flattenलॉडश उथले है, जबकि डिफ़ॉल्ट रूप से अंडरस्कोर गहरा है
  • अंडरस्कोर _.groupByएक iteratee का समर्थन करता है जो मापदंडों को पारित करता है (value, index, originalArray), जबकि Lodash में, इसके लिए iteratee _.groupByकेवल एक ही पैरामीटर पारित किया जाता है (value):।
  • _.indexOf3 पैरामीटर के साथ अंडरस्कोर undefinedलॉडश है_.indexOf
  • _.indexOf3 पैरामीटर के साथ अंडरस्कोर trueलॉडश है_.sortedIndexOf
  • अंडरस्कोर _.indexByलॉडश है_.keyBy
  • अंडरस्कोर _.invokeलॉडश है_.invokeMap
  • अंडरस्कोर _.mapObjectलॉडश है_.mapValues
  • अंडरस्कोर ने _.maxलोधश _.maxऔर_.maxBy
  • अंडरस्कोर ने _.minलोधश _.minऔर_.minBy
  • अंडरस्कोर ने _.sampleलोधश _.sampleऔर_.sampleSize
  • अंडरस्कोर _.objectलॉडश _.fromPairsऔर को जोड़ती है_.zipObject
  • _.omitएक विधेय द्वारा अंडरस्कोर लोदश है_.omitBy
  • अंडरस्कोर _.pairsलॉडश है_.toPairs
  • _.pickएक विधेय द्वारा अंडरस्कोर लोदश है_.pickBy
  • अंडरस्कोर _.pluckलॉडश है_.map
  • अंडरस्कोर ने _.sortedIndexलोधश _.sortedIndexऔर_.sortedIndexOf
  • _.uniqएक द्वारा रेखांकित किया गया iterateeहै_.uniqBy
  • अंडरस्कोर _.whereलॉडश है_.filter
  • अंडरस्कोर _.isFiniteसे तालमेल नहीं है Number.isFinite
    (उदाहरण के लिए _.isFinite('1')रिटर्न trueअंडरस्कोर में लेकिन falseLodash में)
  • अंडरस्कोर _.matchesशॉर्टहैंड गहरी तुलना
    (जैसे _.filter(objects, { 'a': { 'b': 'c' } })) का समर्थन नहीं करता है
  • अंडरस्कोर ers 1.7 और लोडश _.templateसिंटैक्स है
    _.template(string, option)(data)
  • लोदाश _.memoizeकैश Mapवस्तुओं की तरह है
  • लॉडश contextकई तरीकों के पक्ष में तर्क का समर्थन नहीं करता है_.bind
  • लॉडश इम्प्लांटिंग चेनिंग , आलसी चेनिंग और शॉर्टकट फ्यूजन का समर्थन करता है
  • Lodash विभाजित अपने अतिभारित _.head, _.last, _.rest, और _.initialमें बाहर
    _.take, _.takeRight, _.drop, और _.dropRight
    (यानी _.head(array, 2)अंडरस्कोर में है _.take(array, 2)Lodash में)

1
जब मैं पलायन कर रहा हूं तो मैं खुद इन समस्याओं को लेकर आया हूं और एक (डब्ल्यूआईपी) क्रॉस प्रलेखन को एक और दूसरे के बीच बनाए रख रहा हूं । आशा है कि यह अन्य लोगों के लिए भी उपयोगी है!
लक्सन

60

जॉन के जवाब के अलावा, और लॉश पर पढ़ना (जिसे मैंने हाईट्रो को अंडरस्कोर करने के लिए "मुझे-भी" के रूप में माना था), और प्रदर्शन परीक्षणों को देखकर, स्रोत-कोड और ब्लॉग पोस्टों को पढ़ते हुए , कुछ बिंदु जो लॉश करते हैं। अंडरस्कोर से बहुत बेहतर ये हैं:

  1. यह गति के बारे में नहीं है, क्योंकि यह गति की स्थिरता के बारे में है (?)

    यदि आप अंडरस्कोर के स्रोत-कोड में देखते हैं, तो आप पहले कुछ लाइनों में देखेंगे कि अंडरस्कोर कई कार्यों के मूल कार्यान्वयन पर वापस आ जाता है। हालांकि एक आदर्श दुनिया में, यह एक बेहतर दृष्टिकोण होता, यदि आप इन स्लाइड्स में दिए गए कुछ सही लिंक को देखते हैं , तो यह निष्कर्ष निकालना मुश्किल नहीं है कि उन 'मूल कार्यान्वयनों' की गुणवत्ता बहुत अधिक ब्राउज़र बदलती है- टू-ब्राउज़र। कुछ कार्यों में फ़ायरफ़ॉक्स लानत है और कुछ क्रोम में हावी है। (मुझे लगता है कि कुछ परिदृश्य होंगे जहां IE भी हावी होगा)। मेरा मानना ​​है कि ऐसे कोड को पसंद करना बेहतर है जिसका प्रदर्शन ब्राउज़रों में अधिक सुसंगत हो।

    पहले ब्लॉग पोस्ट पढ़ें, और इसके लिए विश्वास करने के बजाय, बेंचमार्क चलाकर अपने लिए जज करें । मैं अभी दंग रह गया, क्रोम में जैसे साधारण , देशी कार्यों में अंडरस्कोर की तुलना में 100-150% तेजी से प्रदर्शन कर रहे एक लॉश को देखकर Array.every!

  2. अतिरिक्त lodash में भी काफी उपयोगी होते हैं।

  3. के रूप में Xananax के अत्यधिक उत्कीर्ण टिप्पणी के लिए अंडरस्कोर के कोड में योगदान का सुझाव देते हैं: यह हमेशा GOOD प्रतिस्पर्धा करना बेहतर होता है , न केवल यह नवाचार को जारी रखता है, बल्कि आपको खुद को (या अपने पुस्तकालय) को अच्छे आकार में रखने के लिए भी ड्राइव करता है।

यहां लॉश के बीच मतभेदों की एक सूची है , और यह अंडरस्कोर-बिल्ड आपके अंडरस्कोर प्रोजेक्ट्स के लिए एक ड्रॉप-इन प्रतिस्थापन है।


6
किस मामले में "गति की स्थिरता" एक मूल्य है? मान लीजिए, मेरे पास एक विधि है जिसमें एफएफ में 100% की गति है और आईई में और एक देशी कार्यान्वयन में IE में 80% और एफएफ में 120% (या दूसरे तरीके से गोल) की गति होगी। तब मैं कहूंगा कि एफएफ में मूल कार्यान्वयन और IE में स्वयं के कार्यान्वयन का उपयोग करना अच्छा होगा। मैं किसी भी मामले की कल्पना नहीं कर सकता, जहां मैं कहूंगा: आइए एफएफ को धीमा कर दें, क्योंकि आईई में भी उसी तरह की गति है। कोड का आकार और स्थिरता या सभी ब्राउज़रों में औसत मंदी का तर्क होगा, लेकिन गति की स्थिरता?
stofl

2
मेरा मतलब था, "लगातार तेज गति"
कुमारहर्ष

1
आकार में अंतर के बारे में क्या? मान लेते हैं कि आप लॉस्ट के साथ एक कस्टम बिल्ड बनाते हैं जिसमें अंडरस्कोर जैसी ही कार्यक्षमता है? क्या उनके बीच एक बड़ा अंतर है? मुझे लगता है कि पुन: कार्यान्वयन साइट पर वजन जोड़ता है।
F Lekschas

5
मैं ब्राउज़र के मूल कार्यान्वयन में कमबैक करने के लिए इच्छुक हूं, क्योंकि ज्यादातर मामलों में इसका स्वीकार्य प्रदर्शन है और लाइब्रेरी अपडेट रखने के लिए बिना चिंता किए ब्राउज़र अपडेट के साथ सुधार कर सकते हैं।
orad

3
@ कुमार हर्ष शायद मैंने इसे अच्छी तरह से वाक्यांश नहीं दिया। मेरा मतलब है कि मैं एक पुस्तकालय का उपयोग करने के लिए इच्छुक हूं जो आंतरिक कार्यों का उपयोग करता है यदि उपलब्ध हो, तो हमेशा इसके स्वयं के कार्यान्वयन को प्राथमिकता दें।
orad

42

यह 2014 है और कुछ साल बहुत देर हो चुकी है। फिर भी मुझे लगता है कि मेरी बात सही है:

IMHO इस चर्चा के अनुपात से बाहर उड़ा दिया गया थोड़ा सा। उपरोक्त ब्लॉग पोस्ट का हवाला देते हुए :

अधिकांश जावास्क्रिप्ट उपयोगिता पुस्तकालय, जैसे कि अंडरस्कोर, वेलेंटाइन, और वू, "देशी-पहले दोहरे दृष्टिकोण" पर भरोसा करते हैं। यह दृष्टिकोण मूल कार्यान्वयन को प्राथमिकता देता है, केवल मूल समकक्ष समर्थित नहीं होने पर वेनिला जावास्क्रिप्ट पर वापस गिरता है। लेकिन jsPerf ने एक दिलचस्प प्रवृत्ति का खुलासा किया: किसी सरणी या सरणी-प्रकार के संग्रह पर पुनरावृति करने का सबसे प्रभावी तरीका मूल कार्यान्वयन से पूरी तरह से बचना है, इसके बजाय सरल छोरों का चयन करना।

जैसे कि "सिंपल लूप्स" और "वेनिला जावास्क्रिप्ट" ऐरे या ऑब्जेक्ट मेथड इंप्लीमेंटेशन से ज्यादा देशी हैं। जीज़ ...

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

हो सकता है कि y'all बड़े पैमाने पर परियोजनाओं पर काम कर रहा हो, जिसमें twitterish प्रदर्शन की आवश्यकता हो ताकि आप वास्तव में प्रति सेकंड 850,000 (अंडरस्कोर) बनाम 2,500,000 (लॉश) पुनरावृत्तियों की सूची में अंतर देखें !

मैं एक नहीं हूँ। मेरा मतलब है, मैंने उन परियोजनाओं पर काम किया जहां मुझे प्रदर्शन के मुद्दों को संबोधित करना था, लेकिन वे न तो हल किए गए थे और न ही अंडरस्कोर और न ही लो-डैश के कारण थे। और जब तक मैं कार्यान्वयन और प्रदर्शन में वास्तविक अंतर नहीं पकड़ता (हम अभी C ++ की बात कर रहे हैं) एक चलने योग्य (वस्तु या सरणी, विरल या नहीं!) पर एक लूप कहते हैं, मैं नहीं बल्कि किसी के साथ परेशान हो जाता हूं। बेंचमार्क प्लेटफ़ॉर्म के परिणामों के आधार पर दावे जो पहले से ही जनमत हैं

इसे राइनो को केवल एक एकल अद्यतन की आवश्यकता है, जो कहता है कि राइनो ने अपनी एरे विधि विधियों को इस तरह से आग में सेट किया है कि एक भी "मध्ययुगीन लूप विधियां बेहतर और हमेशा के लिए प्रदर्शन नहीं करती हैं और क्या नहीं" पुजारी सरल तथ्य के चारों ओर अपने तरीके से तर्क दे सकता है कि सभी FF में अचानक सरणी विधियाँ उसके विचारपूर्ण ब्रेनफक की तुलना में बहुत तेज़ हैं। यार, तुम सिर्फ अपने रनटाइम वातावरण को धोखा देकर अपने रनटाइम वातावरण को धोखा नहीं दे सकते! प्रचार करते समय इसके बारे में सोचें ...

आपकी उपयोगिता बेल्ट

... अगली बार।

तो इसे प्रासंगिक बनाए रखने के लिए:

  • यदि आप देशी ईश का त्याग किए बिना सुविधा में हैं तो अंडरस्कोर का उपयोग करें।
  • यदि आप सुविधा में हैं और अपनी विस्तारित फीचर कैटलॉग (गहरी प्रति आदि) की तरह लो-डैश का उपयोग करें और यदि आपको तत्काल प्रदर्शन की सख्त आवश्यकता है और सबसे महत्वपूर्ण बात यह है कि देशी एपीआई की रूपरेखा के रूप में जल्द ही विकल्प के लिए समझौता न करें काम करने की राय। जो जल्द ही होने वाला है। अवधि।
  • एक तीसरा उपाय भी है। DIY! अपने वातावरण को जानें। विसंगतियों के बारे में जानते हैं। उनका ( जॉन-डेविड का और जेरेमी का) कोड पढ़ें । इस का उपयोग न करें या यह बताए बिना कि एक संगति / संगतता परत की वास्तव में आवश्यकता क्यों है और आपके वर्कफ़्लो को बढ़ाता है या आपके ऐप के प्रदर्शन में सुधार करता है। यह बहुत संभव है कि आपकी आवश्यकताओं को एक साधारण पॉलीफ़िल से संतुष्ट किया जाए जो आप पूरी तरह से खुद को लिखने में सक्षम हैं। दोनों पुस्तकालयों में बस थोड़ी सी चीनी के साथ सादे वेनिला हैं। वे दोनों सबसे प्यारी पाई की सेवा करने वाले से लड़ते हैं । लेकिन मेरा विश्वास करो, अंत में दोनों केवल पानी से खाना बना रहे हैं। वहाँ कोई वेनिला भगवान नहीं है तो कोई वेनिला पोप नहीं हो सकता है, है ना?

जो भी दृष्टिकोण आपकी आवश्यकताओं के अनुकूल हो उसे चुनें। हमेशा की तरह। मैं कभी भी रायशुमारी रनटाइम धोखा देती है पर वास्तविक कार्यान्वयन पर कमियाँ चाहते हैं, लेकिन यह भी आजकल स्वाद का मामला है। गुणवत्ता संसाधनों जैसे http://developer.mozilla.com और http://caniuse.com पर जाएं और आप ठीक रहेंगे।


लुकास को पोस्ट करने के लिए धन्यवाद। क्या अंतर्निहित इन्स को और अधिक अनुकूलित किया जा सकता है? मैंने इकट्ठा किया कि उनके पास मानकों द्वारा लगाए गए अवरोध हैं जो उन्हें पुस्तकालयों के बराबर अनुकूलन करने से रोकते हैं, लेकिन मुझे विवरण का पता नहीं है या यह सच है या नहीं।
ब्रायन एम। हंट

उदाहरण के लिए "99% उपयोग के मामले के लिए अनुकूलन करके, fast.js विधियां अपने मूल समकक्षों की तुलना में 5x तक तेज हो सकती हैं।" - github.com/codemix/fast.js
ब्रायन एम। हंट

1
हाय ब्रायन, मुझे खेद है कि अगर यह भ्रामक था, तो मेरे कहने का मतलब यह नहीं था कि वे पुस्तकालय अपने मूल समकक्षों की तुलना में बहुत तेज नहीं हैं। यदि आपको अभी प्रदर्शन की सख्त आवश्यकता है , तो आप शायद LoDash या fast.js जैसे टूलकिट के साथ बेहतर हैं क्योंकि वे मानक विधियों के तेजी से कार्यान्वयन प्रदान करते हैं। लेकिन अगर आप किसी ऐसे पुस्तकालय का उपयोग करना चुनते हैं जो देशी तरीकों पर वापस नहीं आता है तो आप भविष्य में अंतर्निहित प्रदर्शन पर किसी भी भविष्य के प्रदर्शन के अनुकूलन को याद कर सकते हैं। ब्राउज़र अंततः विकसित होंगे।
लुकास बुंजर

4
ब्राउज़र "निर्माताओं" के पास अपने ब्राउज़र मानकों के अनुपालन के लिए एक कठिन समय है, बहुत कम प्रदर्शन करने वाला। देशी कार्यान्वयन में अधिकांश प्रदर्शन लाभ तेजी से हार्डवेयर का परिणाम हैं। "देशी क्रियान्वयन जोर पकड़ेगा" बहाना लगभग वर्षों से है। वर्ष = इंटरनेट पर अनंत काल। यदि देशी कार्यान्वयन कभी पकड़ लेते हैं, तो पुस्तकालयों को उनका उपयोग करने के लिए अद्यतन किया जाएगा। खुले स्रोत के बारे में यह अच्छी बात है। यदि कोई एप्लिकेशन देव नवीनतम लाइब्रेरी में अपडेट नहीं होता है, तो उनका ऐप अचानक धीमा नहीं होगा, यह बस गति नहीं देगा।
एंड्रयू स्टीविज

2
... लेकिन अगर आप उनसे इस बारे में पूछते तो Array.fromशायद उन्हें पता भी नहीं चलता कि यह क्या करना है। जेएस "यूटिलिटी बेल्ट" लोगों को अपने ओह-सो-जीन वर्कअराउंड को बढ़ावा देने के साथ बहुत अधिक चिंतित लगता है कि वे यह भूल जाते हैं कि ऐसा करके, वे वास्तव में मानकीकरण प्रक्रिया को कमजोर कर रहे हैं। सुविधाओं की कोई आवश्यकता नहीं ब्राउज़र "निर्माताओं" पर कोई दबाव नहीं होता है। मजेदार तथ्य: 4 प्रमुख ब्राउज़रों में से 2 ओपन सोर्स प्रोजेक्ट्स ( 1 , 2 ) पर आधारित हैं ।
लुकास बुंजर

20

मैं यहां कही गई अधिकांश बातों से सहमत हूं, लेकिन मैं सिर्फ अंडरस्कोर के पक्ष में एक तर्क देना चाहता हूं। जेएस: लाइब्रेरी का आकार।

विशेष रूप से यदि आप एक ऐप या वेबसाइट विकसित कर रहे हैं, जो ज्यादातर मोबाइल उपकरणों पर उपयोग करने का इरादा रखता है, तो परिणामस्वरूप बंडल का आकार और बूट या डाउनलोड समय पर प्रभाव की एक महत्वपूर्ण भूमिका हो सकती है।

तुलना के लिए, ये आकार वे हैं जिन्हें मैंने आयनिक सर्व चलाने के बाद स्रोत-मानचित्र-एक्सप्लोरर के साथ देखा था:

lodash: 523kB
underscore.js: 51.6kb

संपादित फ़रवरी 2020 :

लो-डैश और अंडरस्कोर के वर्तमान आकार की जांच करने के लिए एक बंडलफोबिया का उपयोग कर सकता है


1
धन्यवाद पीटर, यह यहाँ ध्यान देने योग्य बात है। कहीं और चर्चा होती है, जिसमें शामिल हैं: gist.github.com/alekseykulikov/5f4a6ca69e7b4ebed726 । (यह उत्तर कुछ अन्य चर्चाओं को जोड़कर और संबंधित बिट्स को उद्धृत करके सुधार किया जा सकता है) आकार के अंतर को लॉश के उप-वर्गों, प्लस ट्री-हिलिंग लॉश को चुनकर कम किया जा सकता है। Hunt
ब्रायन एम। हंट

Thx @ BrianM। आपके उत्तर के लिए, पता नहीं था कि यह संभव है कि लश के उपसमुच्चयों को शामिल किया जाए, एक नज़र रखना चाहिए। हाल ही में आयनिक-मूल के साथ, आयोनिक ने अपने मूल कामों के लिए भी ऐसा रास्ता निकाला, यह ध्यान दें कि अधिक से अधिक ऐप आकार के बारे में चिंतित हैं
डेविड दाल बुस्को

1
मुझे आश्चर्य है कि आपको 523kB कहां से मिला? lodash.com का कहना है कि यह केवल 24kB संकुचित है। डाउनलोड केवल 74kB है
Martian2049

1
मेरी पोस्ट अप्रैल 2017 में की गई थी। जैसा मैंने अपनी टिप्पणी में कहा,source-map-explorer after running ionic serve
डेविड दाल बुस्को

5
मार्च 2018 में - lodash.min.js 72,5 kB और अंडरस्कोर- min.js 16,4 kB है
मिलाएं

10

यह निश्चित नहीं है कि ओपी का क्या मतलब है, लेकिन मैं इस सवाल पर आ गया क्योंकि मैं उन मुद्दों की एक सूची खोज रहा था जिन्हें मुझे अंडरस्कोर से पलायन करने पर ध्यान में रखना होगा।

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

  • _.flattenअंडरस्कोर डिफ़ॉल्ट रूप से गहरा है और आपको इसे उथला बनाने के लिए दूसरे तर्क के रूप में सही होना होगा। लॉश में यह डिफ़ॉल्ट रूप से उथला है और दूसरे तर्क के रूप में सच है जो इसे गहरा बना देगा! :)
  • _.lastअंडरस्कोर में एक दूसरा तर्क स्वीकार करता है जो बताता है कि आपको कितने तत्व चाहिए। इसमें lodashऐसा कोई विकल्प नहीं है। आप इसके साथ अनुकरण कर सकते हैं.slice
  • _.first (वही मुद्दा)
  • _.templateअंडरस्कोर में कई तरह से उपयोग किया जा सकता है, जिनमें से एक टेम्पलेट स्ट्रिंग और डेटा प्रदान कर रहा है और HTMLवापस मिल रहा है (या कम से कम यह कुछ समय पहले कैसे काम किया है)। में lodashआप एक समारोह है जिसे आप डेटा के साथ खिलाने चाहिए प्राप्त करते हैं।
  • _(something).map(foo)अंडरस्कोर में काम करता है, लेकिन लॉश में मुझे इसे फिर से लिखना पड़ा _.map(something,foo)। शायद वह सिर्फ एक TypeScriptथी

4
लॉश में, चेज़िंग एक आलसी इटरेटर को पास करता है, और जैसे आवश्यकता होती है और समापन बिंदु _(something).map(foo).value()
ब्रायन एम। हंट

यदि आप इन पुस्तकालयों को कॉल करने वाले बैकबोन कलेक्शन का उपयोग करते हैं, तो यह सब आपको प्रभावित कर सकता है - उदाहरण के लिए संग्रह। फ़र्स्ट (5) आपको पहले 5 तत्व नहीं देगा, बल्कि पहले एक :)
qbolec

8

http://benmccormick.org/2014/11/12/underscore-vs-lodash/

नवीनतम लेख बेन मैककॉर्मिक द्वारा दो की तुलना:

  1. लो-डैश का एपीआई अंडरस्कोर का सुपरसेट है।

  2. हुड के नीचे [लो-डैश] पूरी तरह से फिर से लिखा गया है।

  3. लो-डैश निश्चित रूप से अंडरस्कोर की तुलना में धीमा नहीं है।

  4. लो-डैश ने क्या जोड़ा है?

    • प्रयोज्यता में सुधार
    • अतिरिक्त कार्यशीलता
    • प्रदर्शन लाभ
    • चांडिंग के लिए शॉर्टहैंड सिंटैक्स
    • कस्टम बिल्ड का केवल वही उपयोग करना है जो आपको चाहिए
    • सिमेंटिक वर्जनिंग और 100% कोड कवरेज

6

मुझे सिर्फ एक अंतर मिला जो मेरे लिए महत्वपूर्ण था। Lodash के गैर अंडरस्कोर संगत संस्करण _.extend()है नहीं वर्ग स्तरीय परिभाषित गुण या तरीकों पर कॉपी।

मैंने CoffeeScript में एक जैस्मिन टेस्ट बनाया है जो इसे प्रदर्शित करता है:

https://gist.github.com/softcraft-development/1c3964402b099893bd61

सौभाग्य से, lodash.underscore.jsअंडरस्कोर के हर चीज को कॉपी करने के व्यवहार को संरक्षित करता है, जो मेरी स्थिति के लिए वांछित व्यवहार था।


4

लॉश मिल गया है _.mapValues()जो अंडरस्कोर के समान है _.mapObject()


0

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


उस समय, हमारे पास _. पैपवैल्यूज़ हैं
क्रैपथिंग्स

@ क्रैपिंग - इस पोस्ट के समय मुझे पता था कि mayValues ​​और mapKeys हो सकते हैं लेकिन वे mapObject के समान नहीं हैं। हो सकता है कि एक के बाद एक मामलों को लागू करने के मामले हों, लेकिन mapObject एक फ़ंक्शन है।
रशद

0

वे बहुत समान हैं, साथ में लोदश ले रहा है ...

वे दोनों एक उपयोगिता पुस्तकालय हैं जो जावास्क्रिप्ट में उपयोगिता की दुनिया में ले जाता है ...

लगता है लोदश अब और अधिक नियमित रूप से अपडेट हो रहा है, इसलिए नवीनतम परियोजनाओं में अधिक उपयोग किया जाता है ...

साथ ही लोडश लगता है केबी के एक जोड़े द्वारा हल्का है ...

दोनों के पास एक अच्छा एपीआई और डॉक्टर है, लेकिन मुझे लगता है कि लोदाश एक बेहतर है ...

सरणी के पहले मान प्राप्त करने के लिए प्रत्येक दस्तावेज़ के लिए यहां स्क्रीनशॉट है ...

अंडरस्कोर:

अंडरस्कोर

lodash: lodash

जैसे-जैसे चीजें समय-समय पर अपडेट हो सकती हैं, बस उनकी वेबसाइट भी देखें ...

lodash

अंडरस्कोर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.