javascript Node.js का मूल डोम क्यों नहीं है?




dom v8 (12)

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

इसका मतलब यह नहीं है कि यह संभावित रूप से उपयोगी नहीं है। एनओडीजेएस (अन्य कॉमनजेएस कार्यान्वयन के बीच) के लिए कम से कम एक jsdom कार्यान्वयन है।

जब मुझे पता चला कि Node.js को V8 जावास्क्रिप्ट इंजन का उपयोग करके बनाया गया है , तो मैंने सोचा:

महान, वेब स्क्रैपिंग आसान हो जाएगी क्योंकि पेज को ब्राउज़र में "देशी" DOM ​​सपोर्ट करने वाले XPath और किसी AJAX कॉल को निष्पादित पृष्ठ पर रखा जाएगा।

  1. क्रोम के समान जावास्क्रिप्ट इंजन का उपयोग करने पर इसका मूल डोम क्यों नहीं है?
  2. जावास्क्रिप्ट को पुनः प्राप्त पृष्ठों में चलाने के लिए एक मोड क्यों नहीं है?
  3. मैं वेब ब्राउज़र में जावास्क्रिप्ट इंजन बनाम इंजन के बारे में क्या नहीं समझ रहा हूँ?

बहुत धन्यवाद!


अपने अंतर्निहित प्रश्न का उत्तर देने के लिए, आप नोड्स में पृष्ठों को खुरचने के लिए JSDom और jQuery का उपयोग कर सकते हैं। http://slog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs

मैंने इस दृष्टिकोण का उपयोग खुद कुछ बार किया है, और यह बहुत अच्छा काम करता है।


यदि आप DOM को 'मेरी स्क्रिप्ट से तुरंत लिंक की गई वस्तुओं' के रूप में पढ़ते हैं, तो उत्तर ' यह करता है , लेकिन यह वेब दस्तावेज़ स्क्रिप्ट से उपलब्ध वस्तुओं के सेट से बहुत अलग है'। मुख्य कारण यह है कि नोड 'V8 के लिए I / O' है, न कि 'V8 के लिए HTML ट्री ऑब्जेक्ट'


1) D doesocument O bject M odel के लिए इसका क्या अर्थ है? प्रतिनिधित्व करने के लिए कोई दस्तावेज नहीं है।

2) आप अधिकांश समय पृष्ठों को पुनः प्राप्त नहीं कर रहे हैं। आप कर सकते हैं, लेकिन अधिकांश नोड ऐप्स शायद नहीं होंगे।

3) एक दस्तावेज़ और एक ब्राउज़र के बिना, जावास्क्रिप्ट सिर्फ एक और प्रोग्रामिंग भाषा है। तो आप पूछ सकते हैं कि C # या Java में DOM क्यों नहीं है


2018 उत्तर: मुख्य रूप से ऐतिहासिक कारणों के लिए, लेकिन यह भविष्य में बदल सकता है।

ऐतिहासिक रूप से, सर्वर पर बहुत कम डोम हेरफेर किया गया था। Addiotinally, अन्य उत्तरों के रूप में allude, JS stdlib और DOM अलग-अलग लाइब्रेरियाँ हैं - यदि आप नोड का उपयोग कर रहे हैं, तो, यूनिक्स स्क्रिप्टिंग कहें, तो HTMLElement और NodeList आदि वास्तव में इसके लिए प्रासंगिक नहीं हैं।

हालाँकि: सर्वर-साइड DOM मैनिप्युलेशन अब वेब ऐप्स देने का एक बहुत ही सामान्य हिस्सा है । वेब सर्वर को पृष्ठों की संरचना को समझने की आवश्यकता होती है, और, यदि किसी संसाधन को HTML के रूप में प्रस्तुत करने के लिए कहा जाए, तो HTML सामग्री वितरित करें जो वेब एप्लिकेशन की प्रारंभिक स्थिति को दर्शाती है। इसका मतलब है कि वेब ऐप्स बहुत तेजी से लोड होते हैं यदि सर्वर केवल एक स्टब पेज डिलीवर करता है और उसके पास ब्राउजर है तो वास्तविक कंटेंट भरने का काम करते हैं। वर्तमान में यह JSDom और इसी तरह के साथ किया जाता है, लेकिन उसी तरह नोड में Request और Response ऑब्जेक्ट्स हैं, जिनमें होने वाले DOM कार्यों को stdlib के हिस्से के रूप में बनाए रखने में मदद मिलेगी।


यह संबंधित है: node-webkit नामक एक नई परियोजना (2012) है जो डोम को जोड़ने की कोशिश करती है और वेबकिट से नोड में बहुत अधिक है। इसका समर्थन करें!


क्योंकि वहाँ एक डोम नहीं है। DOM का उद्देश्य Document Object Model । नोड में कोई दस्तावेज नहीं है, इसलिए इसे हेरफेर करने के लिए डोम नहीं। यह निश्चित रूप से एक ब्राउज़र चीज़ है।

आप cheerio तरह एक पुस्तकालय का उपयोग कर सकते हैं जो आपको कुछ सरल डोम हेरफेर देता है।

नोड सर्वर-स्तरीय जावास्क्रिप्ट है। यह सिर्फ मूल प्रणाली एपीआई पर लागू की जाने वाली भाषा है, जैसे C ++ या Java।


Node.js सर्वरसाइड प्रोग्रामिंग के लिए है। सर्वर में प्रदान किया जाने वाला कोई DOM नहीं है।


नोड एक रनटाइम वातावरण है, यह एक ब्राउज़र की तरह डोम को प्रस्तुत नहीं करता है।


जावास्क्रिप्ट! = ब्राउज़र। एक भाषा के रूप में जावास्क्रिप्ट ब्राउज़र से बंधा नहीं है; नोड.जेएस केवल जावास्क्रिप्ट का एक कार्यान्वयन है जो सर्वरों के लिए अभिप्रेत है, ब्राउज़रों के लिए नहीं। इसलिए कोई डोम नहीं।


पुनश्च: इस प्रश्न को पढ़ते समय मैं यह भी सोच रहा था कि क्या V8 (नोड .js इसके ऊपर बनाया गया है) में DOM था

जब यह उसी जेएस इंजन का उपयोग करता है तो क्रोम के पास मूल डोम क्यों नहीं है?

लेकिन मैंने Google खोजा और Google का V8 पृष्ठ पाया, जो निम्नलिखित पाठ करता है:

उदाहरण के लिए डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM) ऑब्जेक्ट्स में हेरफेर करने के लिए किसी ब्राउज़र में क्लाइंट-साइड स्क्रिप्टिंग के लिए जावास्क्रिप्ट का सबसे अधिक उपयोग किया जाता है। हालाँकि, DOM आमतौर पर जावास्क्रिप्ट इंजन द्वारा प्रदान किया जाता है, लेकिन इसके बजाय एक ब्राउज़र द्वारा। यही V8 का सच है- Google Chrome DOM प्रदान करता है। हालांकि वी 8 ईसीएमए मानक में निर्दिष्ट सभी डेटा प्रकार, ऑपरेटर, ऑब्जेक्ट और फ़ंक्शन प्रदान करता है।

नोड.जेएस V8 का उपयोग करता है न कि Google Chrome

इसी तरह, जेएस को पुनः प्राप्त पृष्ठों में चलाने के लिए एक मोड क्यों नहीं है?

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

लेकिन फिर, एक और डेवलपर ने एक मॉड्यूल बनाया जो बहुत अच्छा है और सक्रिय रूप से (आज) jsdom पर विकसित किया गया है।

मैं एक वेब ब्राउज़र में जावास्क्रिप्ट बनाम इंजन के बारे में क्या नहीं समझ रहा हूँ? :)

वे अलग-अलग चीजें हैं जो उपरोक्त उद्धरण से स्पष्ट रूप से स्पष्ट हैं।


DOM एक DOM है, और JavaScript कार्यान्वयन एक अलग इकाई है। DOM एक ऐसी सुविधाओं का प्रतिनिधित्व करता है जो एक वेब ब्राउज़र जावास्क्रिप्ट वातावरण में उजागर होता है। हालाँकि, किसी विशेष जावास्क्रिप्ट रनटाइम की वैश्विक ऑब्जेक्ट के माध्यम से उजागर होने वाली कोई भी सुविधा नहीं होगी।

Node.js एक वेब ब्राउज़र से पूरी तरह से स्वतंत्र एक अकेला जावास्क्रिप्ट वातावरण है। वेब ब्राउज़र और जावास्क्रिप्ट के बीच कोई आंतरिक लिंक नहीं है; DOM जावास्क्रिप्ट भाषा या विनिर्देश या किसी भी चीज़ का हिस्सा नहीं है।

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

ध्यान दें कि यदि आपके नोड प्रोजेक्ट में वर्चुअल DOM चाहिए तो jsdom जैसे प्रोजेक्ट हैं। सर्वर-साइड प्लेटफ़ॉर्म के रूप में अपनी बहुत ही प्रकृति के कारण, एक DOM एक ऐसी सुविधा है जो नोड बिना कर सकता है और फिर भी कई प्रकार के सर्वर अनुप्रयोगों के लिए सही अर्थ बनाता है। यह कहना नहीं है कि एक DOM कुछ लोगों के लिए उपयोगी नहीं हो सकता है, लेकिन यह सिर्फ उसी श्रेणी की सेवाओं में नहीं है जैसे कि प्रक्रिया नियंत्रण, I / O, नेटवर्किंग, डेटाबेस इंटरॉप, और इसी तरह की चीजें हैं।

सवाल का कुछ "आधिकारिक" उत्तर हो सकता है "क्यों?" वहाँ से बाहर है, लेकिन यह मूल रूप से उन लोगों का व्यवसाय है जो नोड (अब नोड फाउंडेशन) को बनाए रखते हैं। यदि कुछ निडर डेवलपर वहां यह तय करते हैं कि नोड को वर्चुअल डोम का समर्थन करने के लिए मॉड्यूल के एक सेट के साथ डिफ़ॉल्ट रूप से जहाज करना चाहिए, और सफलतापूर्वक काम करता है और ऐसा होता है, तो नोड के पास डोम होगा।





headless-browser