jQuery बनाम document.querySelectorAll


161

मैंने कई बार सुना है कि jQuery की सबसे मजबूत संपत्ति है जिस तरह से यह प्रश्नों और DOM में तत्वों को हेरफेर करता है: आप जटिल क्वेरी बनाने के लिए CSS प्रश्नों का उपयोग कर सकते हैं जो कि नियमित जावास्क्रिप्ट में करना बहुत कठिन होगा। हालाँकि, जहां तक ​​मुझे पता है, आप उसी परिणाम को प्राप्त कर सकते हैं document.querySelectorया जिसके साथ document.querySelectorAllइंटरनेट एक्सप्लोरर 8 और इसके बाद के संस्करण समर्थित हैं।

तो सवाल यह है कि 'jQuery के ओवरहेड' के जोखिम को क्यों कम किया जा सकता है क्योंकि इसकी सबसे मजबूत संपत्ति शुद्ध जावास्क्रिप्ट के साथ प्राप्त की जा सकती है?

मुझे पता है कि jQuery के पास बस CSS चयनकर्ताओं से अधिक है, उदाहरण के लिए क्रॉस ब्राउज़र AJAX, अच्छा ईवेंट अटैचमेंट आदि, लेकिन इसका क्वेरी हिस्सा jQuery की ताकत का एक बहुत बड़ा हिस्सा है!

कोई विचार?


4
(1) DOM ट्रैवर्सल / मॉडिफिकेशन jQuery के साथ ज्यादा तेज और आसान है। (2) यह अपने स्वयं के चयनकर्ताओं को जोड़ता है जो querySelectorविधियों में काम नहीं करेंगे । (3) AJAX कॉल करना jQuery के साथ बहुत तेज और आसान है। (4) IE6 + में सहायता। मुझे यकीन है कि कई और बिंदु हैं जो भी बनाए जा सकते हैं।
जेम्स एलार्डिस

12
(5) ... आलसी टाइपिस्टों के लिए आशुलिपि $ () आवश्यक है।
Dexter Huinda

4
आसान हाँ, क्यों जल्दी? jQuery का नियमित जावास्क्रिप्ट में अनुवाद जहाँ तक मुझे पता है ...
Joel_Blum

4
@ JamesAllardice- क्रॉस-ब्राउज़र XMLHttpRequest के लिए "यह सब गड़बड़" शायद कोड की 30 लाइनें हैं जो आप एक बार लिखते हैं और अपनी लाइब्रेरी में डालते हैं।
रॉब जूल

6
@RobG - हाँ, मैं यह नहीं कह रहा हूँ कि jQuery का उपयोग करें अगर यह सब आप इसके लिए उपयोग करने की कोशिश कर रहे हैं। यह सिर्फ फायदे में से एक है। यदि आपको आसान डोम ट्रैवर्सल, AJAX और querySelectorAll, की आवश्यकता है और पुराने ब्राउज़र में काम करने के लिए आपको इसकी आवश्यकता है, तो jQuery एक स्पष्ट विकल्प है। मैं यह नहीं कह रहा हूं कि आपको इसे इस तरह से उपयोग करना चाहिए ।
जेम्स एलार्डिस

जवाबों:


127

document.querySelectorAll() ब्राउज़रों में कई विसंगतियां हैं और पुराने ब्राउज़र में समर्थित नहीं है इसका नहीं है । इससे आजकल कोई परेशानी नहीं होगी । इसमें एक बहुत ही अनचाहा स्कूपिंग तंत्र है और कुछ अन्य में इतनी अच्छी विशेषताएं नहीं हैं । जावास्क्रिप्ट के साथ भी आपके पास इन प्रश्नों के परिणाम सेट के साथ काम करने में कठिन समय है, जो कई मामलों में आप करना चाहते हैं। : jQuery की तरह उन पर काम करने के लिए कार्य प्रदान करता filter(), find(), children(), parent(), map(), not()और कई और अधिक। छद्म श्रेणी के चयनकर्ताओं के साथ काम करने की jQuery क्षमता का उल्लेख नहीं करना।

हालाँकि, मैं इन चीजों को jQuery के सबसे मजबूत फीचर्स के रूप में नहीं बल्कि अन्य चीजों जैसे "वर्किंग" पर डोम (घटनाओं, स्टाइलिंग, एनीमेशन और जोड़-तोड़) को क्रॉसबोवर संगत तरीके से या अजाक्स इंटरफ़ेस के रूप में समझूंगा

यदि आप केवल jQuery से चयनकर्ता इंजन चाहते हैं, तो आप एक jQuery का उपयोग कर सकते हैं जो स्वयं उपयोग कर रहा है: Sizzle इस तरह से आपके पास jQuery के चयनकर्ता इंजन की क्षमता बिना ओवरहेड के है।

संपादित करें: केवल रिकॉर्ड के लिए, मैं एक विशाल वेनिला जावास्क्रिप्ट प्रशंसक हूं। फिर भी यह एक तथ्य है कि आपको कभी-कभी जावास्क्रिप्ट की 10 लाइनों की आवश्यकता होती है जहां आप 1 लाइन jQuery लिखेंगे।

बेशक आपको इस तरह jQuery नहीं लिखने के लिए अनुशासित होना होगा:

$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();

यह पढ़ना बहुत कठिन है, जबकि उत्तरार्द्ध बहुत स्पष्ट है:

$('ul.first')
   .find('.foo')
      .css('background-color', 'red')
.end()
   .find('.bar')
      .css('background-color', 'green')
.end();

समतुल्य जावास्क्रिप्ट ऊपर pseudocode द्वारा चित्रित अधिक जटिल होगा:

1) तत्व का पता लगाएं, सभी तत्व या केवल पहले लेने पर विचार करें।

// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");

2) कुछ (संभवत: नेस्टेड या पुनरावर्ती) लूप्स के माध्यम से बच्चे के नोड्स की सरणी पर फेरबदल करें और कक्षा की जांच करें (सभी ब्राउज़रों में उपलब्ध नहीं होने वाली क्लासलिस्ट!)

//.find('.foo')
for (var i = 0;i<e.length;i++){
     // older browser don't have element.classList -> even more complex
     e[i].children.classList.contains('foo');
     // do some more magic stuff here
}

3) सीएसएस शैली लागू करें

// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"

यह कोड आपके द्वारा jQuery के साथ लिखे जाने वाले कोड की कम से कम दो बार होगी। इसके अलावा, आपको क्रॉस-ब्राउज़र के मुद्दों पर विचार करना होगा जो मूल कोड के गंभीर गति लाभ (विश्वसनीयता के अलावा) से समझौता करेंगे ।


33
querySelectorAllब्राउज़रों के बीच किस तरह की विसंगतियां हैं? और jQuery का उपयोग कैसे किया जाएगा, जब उपलब्ध jQuery का उपयोग करता है , तो यह कैसे हल करेगा querySelectorAll?

3
सच है, कोड की एक पंक्ति में अंतहीन कोड की श्रृंखलाएं हो सकती हैं जो डीबगिंग के दौरान बहुत कष्टप्रद हो सकती हैं।
डेक्सटर हुइंडा जूल

1
"2) कुछ (संभवत: नेस्टेड या पुनरावर्ती) छोरों के माध्यम से चाइनीज के सरणी पर पुनरावृति करता है और कक्षा की जांच करता है" << यह एक कुल बकवास है। आप पिछले चरण में तत्व पर querySelectorAll का उपयोग कर सकते हैं।
वानुअन

5
इस @Vanuan सकता है आवश्यक नहीं हो, लेकिन अगर आप मेरा उत्तर पढ़ा होता अच्छी तरह से आपने गौर किया होगा, कि querySelector एक गंभीर scoping समस्या है जब जिस तरह से आप का प्रस्ताव में प्रयोग किया जाता है जो आप झूठे सकारात्मक का एक बहुत दे सकता है। फिर भी, जबकि आपके कुछ निपिकी कारण के लिए अप- या डाउनवोट के लिए स्वतंत्र हैं, मुझे लगता है कि यह अशिष्ट भाषा का उपयोग करने का कारण नहीं है।
क्रिस्टोफ

2
@Christoph चूंकि यह आसान है, इसलिए मैंने IE8 और इसके बाद के संस्करण के लिए हमदर्दी जोड़ी। अभी भी विशाल गति लाभ (5-20 बार)। यह कोड पुराने ब्राउज़र में धीमा चलेगा जैसे IE8 सिर्फ एक गलत धारणा है।
पास्कलियस

60

यदि आप IE8 या नए के लिए अपने पृष्ठ का अनुकूलन कर रहे हैं, तो आपको वास्तव में विचार करना चाहिए कि आपको jquery की आवश्यकता है या नहीं। आधुनिक ब्राउज़रों के पास मूल रूप से कई संपत्ति होती हैं जो jquery प्रदान करती हैं।

यदि आप प्रदर्शन की देखभाल करते हैं, तो आपको देशी जावास्क्रिप्ट का उपयोग करके अविश्वसनीय प्रदर्शन लाभ (2-10 तेज़) हो सकते हैं : http://jsperf.com/jquery-vs-native-selector-and-element-style/2

मैंने jquery से देशी जावास्क्रिप्ट (IE8 + संगत) में एक div-tagcloud को बदल दिया , परिणाम प्रभावशाली हैं। 4 बार थोड़ी सी ओवरहेड के साथ तेजी से।

                    Number of lines       Execution Time                       
Jquery version :        340                    155ms
Native version :        370                    27ms

आपको आवश्यकता नहीं हो सकती है Jquery एक बहुत अच्छा अवलोकन प्रदान करती है, जो देशी तरीके किस ब्राउज़र संस्करण के लिए प्रतिस्थापित करते हैं।

http://youmightnotneedjquery.com/


परिशिष्ट: आगे की गति की तुलना करती है कि कैसे देशी तरीके जेकरी से प्रतिस्पर्धा करते हैं


अच्छा अवलोकन हालांकि कुछ कोड उदाहरण गलत हैं ... उदाहरण के $(el).find(selector)लिए समान नहीं है el.querySelectorAll(selector)और देशी तरीकों का प्रदर्शन अक्सर काफी भयानक होता है: stackoverflow.com/q/14647470/1047823
क्रिस्टोफ

@ क्रिसटोफ़ क्या आप विस्तृत कर सकते हैं, आपको क्यों लगता है कि तरीके अलग हैं? बेशक ऐसे किनारे मामले हैं जहां jquery बेहतर प्रदर्शन कर सकती है, लेकिन मैंने DOM-मैनिपुलेशन के लिए एक नहीं देखा है।
पास्कलियस

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

2
@Christoph बेशक, ये विधियां 100% बराबर नहीं हैं और jquery अक्सर अधिक सुविधा प्रदान करती है। मैंने यह दिखाने के लिए उत्तर दिया कि यह केवल एक किनारे का मामला है, मैं वास्तव में कोई अन्य मामला नहीं ढूंढ सका जहां jquery ने बेहतर प्रदर्शन किया हो। प्रश्न का कोई मुख्य ध्यान नहीं है।
पास्कलियस

+1 शानदार जवाब! मैं धीरे-धीरे पिछले 4 या 5 वर्षों में कच्चे जावास्क्रिप्ट के साथ पुराने jQuery कोड की जगह ले रहा हूं और जब भी संभव हो .. बेशक, jQuery कुछ चीजों के लिए बहुत अच्छा है और मैं उन चीजों के लिए इसका उपयोग करता हूं जब मुझे लगता है कि मुझे एक ठोस लाभ मिलता है।
हाँ बैरी

13

यह समझने के लिए कि jQuery इतना लोकप्रिय क्यों है, यह समझना महत्वपूर्ण है कि हम कहाँ से आ रहे हैं!

लगभग एक दशक पहले, शीर्ष ब्राउज़र IE6, नेटस्केप 8 और फ़ायरफ़ॉक्स 1.5 थे। उन दिनों में, DOM के अलावा एक तत्व चुनने के लिए बहुत कम क्रॉस-ब्राउज़र तरीके थे Document.getElementById()

इसलिए, जब 2006 में jQuery वापस जारी किया गया था , तो यह काफी क्रांतिकारी था। उसके बाद, jQuery ने HTML तत्वों को आसानी से चुनने / बदलने और घटनाओं को ट्रिगर करने के लिए मानक निर्धारित किया, क्योंकि इसका लचीलापन और ब्राउज़र समर्थन अभूतपूर्व था।

अब, एक दशक से भी अधिक समय के बाद, jQuery को इतना लोकप्रिय बनाने वाली बहुत सारी सुविधाएँ javaScript मानक में शामिल हो गई हैं:

ये आम तौर पर 2005 में वापस उपलब्ध नहीं थे। तथ्य यह है कि वे आज स्पष्ट रूप से सवाल पूछ रहे हैं कि हमें jQuery का उपयोग क्यों करना चाहिए। और वास्तव में, लोग तेजी से सोच रहे हैं कि क्या हमें jQuery का उपयोग करना चाहिए

तो, अगर आपको लगता है कि आप जावास्क्रिप्ट को अच्छी तरह से समझते हैं बिना jQuery के करने के लिए, कृपया! JQuery का उपयोग करने के लिए मजबूर मत करो, सिर्फ इसलिए कि कई अन्य लोग ऐसा कर रहे हैं!


7

ऐसा इसलिए है क्योंकि jQuery की तुलना में बहुत अधिक कर सकते हैं querySelectorAll

सबसे पहले, jQuery (और विशेष रूप से Sizzle), IE7-8 जैसे पुराने ब्राउज़र के लिए काम करता है जो CSS2.1-3 चयनकर्ताओं का समर्थन नहीं करता है।

साथ ही, Sizzle (जो jQuery के पीछे चयनकर्ता इंजन है) आपको बहुत अधिक उन्नत चयनकर्ता उपकरण प्रदान करता है, जैसे कि :selectedछद्म वर्ग, एक उन्नत :not()चयनकर्ता, एक और अधिक जटिल वाक्यविन्यास जैसे $("> .children")और इतने पर।

और यह इसे क्रॉस-ब्राउज़र करता है, त्रुटिपूर्ण रूप से, वह सब पेश करता है जो jQuery की पेशकश कर सकता है (प्लगइन्स और एपीआई)।

हां, यदि आपको लगता है कि आप साधारण वर्ग और आईडी चयनकर्ताओं पर भरोसा कर सकते हैं, तो jQuery आपके लिए बहुत अधिक है, और आप एक अतिरंजित भुगतान कर रहे हैं। लेकिन अगर आप नहीं करते हैं, और सभी jQuery की अच्छाई का लाभ लेना चाहते हैं, तो इसका उपयोग करें।


7

jQuery के Sizzle चयनकर्ता इंजन का उपयोग कर सकते हैं querySelectorAllयदि यह उपलब्ध है तो है। यह समान परिणाम प्राप्त करने के लिए ब्राउज़र के बीच विसंगतियों को भी सुचारू करता है। यदि आप सभी jQuery का उपयोग नहीं करना चाहते हैं, तो आप अलग से Sizzle का उपयोग कर सकते हैं। यह आविष्कार करने के लिए एक सुंदर मौलिक पहिया है।

यहाँ स्रोत से कुछ चेरी-पिकिंग हैं जो आपके लिए jQuery (w / Sizzle) चीजों की तरह दिखाते हैं:

सफारी quirks मोड:

if ( document.querySelectorAll ) {
  (function(){
    var oldSizzle = Sizzle,
      div = document.createElement("div"),
      id = "__sizzle__";

    div.innerHTML = "<p class='TEST'></p>";

    // Safari can't handle uppercase or unicode characters when
    // in quirks mode.
    if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
      return;
    }

यदि वह गार्ड विफल हो जाता है तो वह इसका उपयोग करता है यह Sizzle का एक संस्करण है जिसे बढ़ाया नहीं गया है querySelectorAll। इसके अलावा नीचे IE, ओपेरा, और ब्लैकबेरी ब्राउज़र में विसंगतियों के लिए विशिष्ट हैंडल हैं।

  // Check parentNode to catch when Blackberry 4.6 returns
  // nodes that are no longer in the document #6963
  if ( elem && elem.parentNode ) {
    // Handle the case where IE and Opera return items
    // by name instead of ID
    if ( elem.id === match[3] ) {
      return makeArray( [ elem ], extra );
    }

  } else {
    return makeArray( [], extra );
  }

और अगर बाकी सब विफल हो जाता है तो इसका परिणाम वापस आ जाएगा oldSizzle(query, context, extra, seed)


6

कोड स्थिरता के संदर्भ में, व्यापक रूप से उपयोग किए जाने वाले पुस्तकालय के साथ छड़ी करने के कई कारण हैं।

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

अपनी खुद की लाइब्रेरी लिखना आपके लिए काम कर सकता है , लेकिन अगले डेस्क पर बैठे इंटर्न को jQuery जैसी किसी चीज़ के साथ गति करने में आसान समय मिल सकता है।

पसंद आने पर इसे नेटवर्क इफेक्ट कहें। यह कहना नहीं है कि कोड jQuery में बेहतर होगा; सिर्फ इतना है कि कोड की संक्षिप्त प्रकृति सभी कौशल स्तरों के प्रोग्रामर के लिए समग्र संरचना को पकड़ना आसान बनाती है, यदि केवल इसलिए कि आपके द्वारा देखी जा रही फ़ाइल में एक बार में अधिक कार्यात्मक कोड दिखाई दे रहा है। इस लिहाज से कोड की 5 लाइन 10 से बेहतर है।

संक्षेप में, मैं संक्षिप्त कोड, और सर्वव्यापक होने के रूप में jQuery के मुख्य लाभ देखता हूं।


6

यदि मैं समान विशेषता लागू करना चाहता हूं, तो यहां एक तुलना है, उदाहरण के लिए "मेरी-क्लास" के सभी तत्वों को छिपाएं। यह jQuery का उपयोग करने का एक कारण है।

jQuery:

$('.my-class').hide();

जावास्क्रिप्ट:

var cls = document.querySelectorAll('.my-class');
for (var i = 0; i < cls.length; i++) {
    cls[i].style.display = 'none';
}

JQuery पहले से ही इतने लोकप्रिय होने के साथ, उन्हें दस्तावेज़ बनाना चाहिए ।querySelector () बिलकुल $ () की तरह व्यवहार करें। इसके बजाय, document.querySelector () केवल पहले मिलान तत्व का चयन करता है जो इसे केवल आधा उपयोगी बनाता है।


4
मैं यहाँ एक।
फिलिप सन् 19

वैसे आप हमेशा आसान रास्ते से जा सकते हैं document.querySelectorAll('.my-class').forEach(el => el.style.display = 'none');। फिर भी अगर कम, प्रदर्शन बुद्धिमान देशी हमेशा बेहतर होता है।
एलन क्रूज़

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

3

जैसा कि आधिकारिक साइट कहती है: "jQuery: द राइट कम, डू मोर, जावास्क्रिप्ट लाइब्रेरी"

बिना किसी पुस्तकालय के निम्नलिखित jQuery कोड का अनुवाद करने का प्रयास करें

$("p.neat").addClass("ohmy").show("slow");

1
मैं इससे सहमत हूं, हालांकि पठनीयता के बारे में क्या? आप बहुत सी गैर-संबंधित चीज़ों के साथ कोड की लंबी पंक्तियों का दस्तावेज़ कैसे बना सकते हैं? आप ऐसे मठों को कैसे डीबग कर सकते हैं?
जोएल_ब्लम

@ user1032663 यह दस्तावेज-सम्मेलनों की बात है।
क्रिस्टोफ

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

2
आपके द्वारा चुना गया उदाहरण वास्तव में आपकी बात को प्रमाणित नहीं करता है: प्रश्न "चयनकर्ता" प्रांत में अंतर खोज रहा है। addClass()और show()वास्तव में गिनती नहीं है। और जैसा कि $('p.neat'), आप क्वेरीसलेटर / ऑल पर एक नज़र डाल सकते हैं।
कुमारहर्ष

document.querySelectorAll('p.neat').forEach(p=>p.classList.add('ohmy'));और सीएसएस को बाकी काम करने दें। थोड़ा लंबा कोड, लेकिन बहुत अधिक कुशल। बेशक, उसका समाधान लिगेसी IE दिनों में उपलब्ध नहीं था। "डू मोर" भाग विडंबनापूर्ण है। jQuery को कुछ खोजने के लिए कोड की लगभग सौ लाइनें लगती हैं, इसलिए अधिक करना हमेशा उत्पादक नहीं होता है।
मन्नजो

2

मुझे लगता है कि सही उत्तर यह है कि jQuery को बहुत पहले विकसित किया गया था querySelector/querySelectorAll सभी प्रमुख ब्राउज़रों में उपलब्ध ।

2006 में jQuery की प्रारंभिक रिलीज हुई थी । वास्तव में, यहां तक ​​कि jQuery भी पहला नहीं था जिसने सीएसएस चयनकर्ताओं को लागू किया

IE लागू करने के लिए अंतिम ब्राउज़र थाquerySelector/querySelectorAll । इसका 8 वां संस्करण 2009 में जारी किया गया था

तो अब, DOM एलिमेंट्स सिलेक्टर्स अब jQuery के सबसे मजबूत बिंदु नहीं हैं। हालांकि, यह अभी भी अपनी आस्तीन ऊपर बहुत सारे अच्छाइयाँ है, जैसे तत्व के सीएसएस और HTML सामग्री, एनिमेशन, इवेंट बाइंडिंग, अजाक्स को बदलने के लिए शॉर्टकट।


1

पुराना सवाल है, लेकिन आधे दशक बाद, यह फिर से देखने लायक है। यहाँ मैं केवल jQuery के चयनकर्ता पहलू पर चर्चा कर रहा हूँ।

document.querySelector[All]IE8 के नीचे, सभी वर्तमान ब्राउज़रों द्वारा समर्थित है , इसलिए संगतता अब कोई समस्या नहीं है। मुझे बोलने के लिए कोई प्रदर्शन मुद्दे भी नहीं मिले (यह पहले की तुलना में धीमा होना चाहिए था document.getElementById, लेकिन मेरा अपना परीक्षण बताता है कि यह थोड़ा तेज़ है)।

इसलिए जब सीधे किसी तत्व में हेरफेर करने की बात आती है, तो इसे jQuery पर पसंद किया जाना है।

उदाहरण के लिए:

var element=document.querySelector('h1');
element.innerHTML='Hello';

के लिए बहुत बेहतर है:

var $element=$('h1');
$element.html('hello');

कुछ भी करने के लिए, jQuery को कोड की एक सौ लाइनों के माध्यम से चलना पड़ता है (मैं एक बार कोड के माध्यम से पता लगाता हूं जैसे कि ऊपर यह देखने के लिए कि jQuery वास्तव में इसके साथ क्या कर रहा था)। यह स्पष्ट रूप से सभी के समय की बर्बादी है।

JQuery की अन्य महत्वपूर्ण लागत तथ्य यह है कि यह एक नई jQuery वस्तु के अंदर सब कुछ लपेटता है। यह ओवरहेड विशेष रूप से बेकार है यदि आपको ऑब्जेक्ट को फिर से खोलना या उन गुणों से निपटने के लिए ऑब्जेक्ट विधियों में से एक का उपयोग करने की आवश्यकता होती है जो मूल तत्व पर पहले से ही उजागर होते हैं।

हालांकि jQuery का एक फायदा है, हालांकि यह संग्रह को कैसे संभालता है। यदि आवश्यकता कई तत्वों के गुणों को सेट करने की है, तो jQuery में एक अंतर्निहित eachपद्धति है जो कुछ इस तरह की अनुमति देती है:

var $elements=$('h2');  //  multiple elements
$elements.html('hello');

वेनिला जावास्क्रिप्ट के साथ ऐसा करने के लिए कुछ इस तरह की आवश्यकता होगी:

var elements=document.querySelectorAll('h2');
elements.forEach(function(e) {
    e.innerHTML='Hello';
});

जो कुछ कठिन लगता है।

jQuery के चयनकर्ता भी थोड़े अलग हैं, लेकिन आधुनिक ब्राउज़रों (IE8 को छोड़कर) को अधिक लाभ नहीं मिलेगा।

एक नियम के रूप में, मैं नई परियोजनाओं के लिए jQuery का उपयोग करने के खिलाफ चेतावनी देता हूं :

  • jQuery एक बाहरी लाइब्रेरी है जो प्रोजेक्ट के ओवरहेड और तीसरे पक्ष पर आपकी निर्भरता को जोड़ता है।
  • jQuery फ़ंक्शन बहुत महंगा है, प्रोसेसिंग-वार है।
  • jQuery एक कार्यप्रणाली लगाता है जिसे सीखने की आवश्यकता है और आपके कोड के अन्य पहलुओं के साथ प्रतिस्पर्धा कर सकती है।
  • जावास्क्रिप्ट में नई सुविधाओं को उजागर करने के लिए jQuery धीमा है।

यदि उपरोक्त मामलों में से कोई भी नहीं है, तो वह करें जो आप करेंगे। हालाँकि, jQuery अब क्रॉस-प्लेटफ़ॉर्म डेवलपमेंट के लिए उतना महत्वपूर्ण नहीं है जितना पहले हुआ करता था, क्योंकि आधुनिक जावास्क्रिप्ट और सीएसएस इसके इस्तेमाल की तुलना में बहुत आगे जाते हैं।

यह jQuery की अन्य विशेषताओं का कोई उल्लेख नहीं करता है। हालांकि, मुझे लगता है कि उन्हें भी, करीब से देखने की जरूरत है।


1
आपका सिंटैक्स अन्य गलत सामानों का उल्लेख करने के लिए सही नहीं है जैसे "जावास्क्रिप्ट में नई सुविधाओं को उजागर करने के लिए धीमा" JQuery का काम नई सुविधाओं को उजागर करने के लिए भी नहीं है, यह आपके लिए डोम हेरफेर करना आसान है और साधारण सामान कर सकता है जो कि हो सकता है जावास्क्रिप्ट में 10 लाइनों की तरह। आपकी पूरी टिप्पणी का कोई मतलब नहीं है और इसमें कई गलत चीजें हैं। इसे सुधारने पर विचार करें।
बॉय प्रो

@Boypro आपकी टिप्पणी के लिए धन्यवाद, लेकिन यह भी त्रुटियों से भरा है। शायद आप मेरे जवाब के बारे में क्या साझा करना चाहते हैं जो आपको बहुत परेशान करता है। क्या "सही भी नहीं है"। बेहतर अभी भी, आप अपने स्वयं के anwser योगदान करना चाह सकते हैं। सवाल jQuery का उपयोग करने की लागत के बारे में है जब वेनिला जावास्क्रिप्ट इतना कर सकता है। इसका उत्तर देने पर विचार करें।
मेन्जियो

0
$ ("# आईडी") बनाम दस्तावेज़। प्रश्नपत्रक ("# आईडी")

यह सौदा $ () फ़ंक्शन के साथ है जो इसे एक सरणी बनाता है और फिर इसे आपके लिए तोड़ देता है लेकिन document.querySelectorAll () के साथ यह एक सरणी बनाता है और आपको इसे तोड़ना होगा।


0

बस इस पर एक टिप्पणी, जब सामग्री डिजाइन लाइट का उपयोग करते हैं, तो jquery चयनकर्ता किसी कारण से सामग्री डिजाइन के लिए संपत्ति वापस नहीं करता है।

के लिये:

<div class="logonfield mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
        <input class="mdl-textfield__input" type="text" id="myinputfield" required>
        <label class="mdl-textfield__label" for="myinputfield">Enter something..</label>
      </div>

यह काम:

document.querySelector('#myinputfield').parentNode.MaterialTextfield.change();

यह नहीं करता:

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