2011-03-12 12 views
14

का प्रदर्शन क्या कोई मुझे विभिन्न परिदृश्यों में XPath और DOM के बीच कुछ व्यापक प्रदर्शन तुलना प्रदान करेगा? मैंने SO12 xPath vs DOM API, which one has a better performance और XPath or querySelector? जैसे कुछ प्रश्न पढ़े हैं। उनमें से कोई भी विशिष्ट मामलों का उल्लेख नहीं करता है। यहां कुछ ऐसा है जो मैं शुरू कर सकता हूं।XPath बनाम डीओएम

  1. कोई पुनरावृत्ति शामिल नहीं है। getElementById (foobar) बनाम // * [@ id = 'foobar']। क्या पूर्व बाद में लगातार तेज है? क्या हुआ अगर उत्तरार्द्ध अनुकूलित किया गया है, उदा।/Html/शरीर/div [@ id = 'foo']/div [@ id = 'foobar']?
  2. इटरेशन शामिल है। getElementByX तब बच्चे नोड्स बनाम XPath स्नैपशॉट उत्पन्न करता है, फिर स्नैपशॉट आइटम के माध्यम से ट्रैवर्स करता है।
  3. एक्सिस शामिल थे। getElementByX फिर अगले भाई बहन बनाम // निम्नलिखित-भाई :: foobar के लिए आगे बढ़ें।
  4. विभिन्न कार्यान्वयन। विभिन्न ब्राउज़रों और पुस्तकालयों ने XPath और DOM को अलग-अलग लागू किया। XPath का कौन सा ब्राउज़र कार्यान्वयन बेहतर है?

xPath vs DOM API, which one has a better performance में जवाब कहते हैं, औसत प्रोग्रामर अप पेंच हो सकता है जब डोम तरह से जटिल कार्य (जैसे कई कुल्हाड़ियों शामिल) को लागू करने, जबकि XPath गारंटी है अनुकूलित। इसलिए, मेरा प्रश्न केवल सरल चयनों की परवाह करता है जो दोनों तरीकों से किया जा सकता है।

किसी भी टिप्पणी के लिए धन्यवाद।

+0

प्रदर्शन और अनुकूलन के संबंध में लगभग किसी भी प्रश्न के साथ, यह आपकी विशिष्ट परिस्थितियों और सामग्री पर निर्भर करेगा। जवाब है "अपने ऐप को अपने डेटा से प्रोफाइल करें, और चुनें कि जो भी आपके लिए सबसे अच्छा काम करता है"। इसके अलावा, आपने बहुत से सामान्य प्रश्न पूछे हैं। इसे शायद "असली सवाल नहीं" के रूप में बंद किया जाना चाहिए, और यदि कोई और सोचता है तो मैं ऐसा करने के लिए मतदान में शामिल हो जाऊंगा। –

+0

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

+0

XPath को गैर-डीओएम एपीआई पर बनाया जा सकता है, उदाहरण के लिए, vtd-xml का xpath कार्यान्वयन वर्चुअल टोकन डिस्क्रिप्टर के शीर्ष पर बनाया गया है ... –

उत्तर

22

XPath और DOM दोनों विनिर्देश हैं, कार्यान्वयन नहीं। आप विशिष्ट कार्यान्वयन के बारे में केवल एक spec के प्रदर्शन के बारे में प्रश्न नहीं पूछ सकते हैं। एक तेज़ XPath इंजन और धीमे एक के बीच कम-से-कम एक-एक अंतर होता है: और उन्हें अलग-अलग चीज़ों के लिए अनुकूलित किया जा सकता है, उदा। कुछ लोग इस धारणा पर एक प्रश्न को अनुकूलित करने में बहुत समय व्यतीत करते हैं कि इसे कई बार निष्पादित किया जाएगा, जो सिंगल-शॉट निष्पादन के लिए गलत काम हो सकता है। एक बात यह कह सकती है कि XPath का प्रदर्शन आपके द्वारा उपयोग किए जा रहे इंजन पर अधिक निर्भर करता है, और डीओएम का प्रदर्शन एप्लिकेशन प्रोग्रामर की क्षमता पर अधिक निर्भर करता है, क्योंकि यह निम्न-स्तरीय इंटरफ़ेस है। बेशक सभी प्रोग्रामर खुद को औसत से बेहतर मानते हैं ...

+0

+1 मिश्रण में XPath इंजन के बीच अंतर जोड़ने के लिए। –

+0

सबसे आम कार्यान्वयन के बारे में: फ़ायरफ़ॉक्स, क्रोम, आईई, ओपेरा? मुझे लगता है कि वे इंजन को काफी संतुलित तरीके से अनुकूलित करते हैं। इस तरह की धारणा के तहत, क्या सवाल का कोई जवाब है? –

+0

मुझे "बहुत बेहतर तो औसत" कॉल करने के लिए धन्यवाद :) :) –

2

मैं माइकल से सहमत हूं कि यह कार्यान्वयन पर निर्भर हो सकता है, लेकिन मैं आमतौर पर कहूंगा कि डोम तेज़ है। इसका कारण यह है कि ऐसा कोई तरीका नहीं है कि मैं देखता हूं कि आप XPath को तेज़ी से बनाने के लिए पार्स किए गए दस्तावेज़ को अनुकूलित कर सकते हैं।

यदि आप HTML को ट्रैवर्स कर रहे हैं और एक्सएमएल नहीं हैं, तो विशेष पार्सर दस्तावेज़ में सभी आईडी और कक्षाओं को अनुक्रमणित करने में सक्षम है। इससे getElementById और getElementsByClass बहुत तेज़ हो जाएगा।

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

3

इस पृष्ठ में एक ऐसा अनुभाग है जहां आप दो की तुलना करने के लिए परीक्षण चला सकते हैं और परिणामों को विभिन्न ब्राउज़रों में देख सकते हैं। उदाहरण के लिए, क्रोम के लिए, xpath getElementById से 100% धीमी है।

अधिक जानकारी के लिए getElementById vs QuerySelector देखें।

+0

हाय क्लाउडियो, स्टैक ओवरफ्लो में आपका स्वागत है! जबकि आपके द्वारा पोस्ट किया गया लिंक सहायक हो सकता है, स्टैक ओवरव्लो का लक्ष्य आने वाले वर्षों के लिए ज्ञान का भंडार बनना है ताकि अन्य लोग जो इस पृष्ठ पर जाते हैं, आपके उत्तर से लाभ उठा सकते हैं। यदि लिंक कभी तोड़ना था, तो आपका जवाब बेकार होगा। लिंक से उदाहरण शामिल करने के लिए अपने उत्तर को संपादित करने पर विचार करें, ताकि यदि लिंक मर जाए, तो आपके उत्तर का मूल्य है। शुभकामनाएँ, और StackOverflow में आपका स्वागत है! :) – jmort253

+0

मैं आगे बढ़ गया और कुछ सुधार किए। सौभाग्य! – jmort253