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




dom v8 (10)

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

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

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

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

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

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

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


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

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

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

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

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


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

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


आपको एक त्रुटिपूर्ण धारणा लगती है कि V8 और DOM एक दूसरे से संबंधित हैं, ऐसी बात नहीं है। DOM वास्तव में Webkit द्वारा नियंत्रित किया जाता है, V8 DOM को हैंडल नहीं करता है, यह DOM को जावास्क्रिप्ट कॉल को हैंडल करता है। यह आपको हतोत्साहित न करें, Node.js ने realtime सर्वर मार्केट में एक महत्वपूर्ण स्थान पर नक्काशी की है, लेकिन किसी को भी यह नहीं बताएं कि यह केवल सर्वरों के लिए है। नोड जावास्क्रिप्ट के साथ लगभग कुछ भी बनाने के लिए संभव बनाता है।

यह करना संभव है कि आप किस बारे में बात कर रहे हैं। उदाहरण के लिए बहुत अच्छी jsdom लाइब्रेरी है यदि आपको वास्तव में DOM, और node-htmlparser तक पहुंच की आवश्यकता है, तो कुछ वास्तव में अच्छी स्क्रैपिंग लाइब्रेरी भी हैं जो apricot तरह इनका लाभ उठाती हैं।


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

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

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


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


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

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


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


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

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

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


दस्तावेज़ ऑब्जेक्ट मॉडल (संक्षेप में DOM) HTML और XML दस्तावेज़ों के लिए एक प्रोग्रामिंग इंटरफ़ेस है और यह पृष्ठ का प्रतिनिधित्व करता है ताकि प्रोग्राम दस्तावेज़ संरचना, शैली और सामग्री को बदल सकें। इस विषय पर अधिक।

क्लाइंट-साइड ( ब्राउज़र ) और सर्वर-साइड ( Node.js ) और उनके मुख्य लक्ष्यों के बीच आवश्यक अंतर:

  • क्लाइंट-साइड: वेब की जानकारी तक पहुँचना और प्रदर्शित करना
  • सर्वर-साइड: वेब जानकारी देने के लिए स्थिर और विश्वसनीय तरीके प्रदान करना

Node.js में कोई DOM क्यों डिफ़ॉल्ट नहीं है?

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

आप DOM को Node.js में एक्सेस क्यों नहीं करना चाहेंगे?

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

आप DOM को Node.js में क्यों एक्सेस करना चाहेंगे?

डिफ़ॉल्ट रूप से, आपको Node.js. का उपयोग करके अपने स्वयं के, वास्तविक DOM (कम से कम कुछ डेटा) का उपयोग नहीं करना चाहिए क्लाइंट-साइड और सर्वर-साइड को अनुभव और ज्ञान के वर्षों के आधार पर भूमिका, कार्यक्षमता और जिम्मेदारी के रूप में अलग किया जाता है। यद्यपि कई स्थितियाँ हैं, जहाँ ऐसा करने के ठोस कारण हैं:

  • उपयोग डेटा इकट्ठा करना (ए / बी परीक्षण, यूआई / यूएक्स दक्षता और प्रतिक्रिया)
  • बिना परीक्षण (विकास, स्वचालन, वेब-स्क्रैपिंग)

आप DOM को Node.js में कैसे एक्सेस कर सकते हैं?

  • jsdom : शुद्ध-जावास्क्रिप्ट कार्यान्वयन, अपने स्वयं के DOM / ब्राउज़र-संबंधित प्रोजेक्ट के परीक्षण के लिए अच्छा है
  • अगर आप पसंद करते हैं / अक्सर jQuery का उपयोग करते हैं, तो बढ़िया समाधान
  • puppeteer : Google Chrome का उपयोग करके बिना हेड परीक्षण के Google का अपना तरीका
  • स्वयं का समाधान (भविष्य में आपकी संभावित परियोजना लिंक)

हालाँकि ये समाधान आपके ब्राउज़र के अपने, वास्तविक DOM को डिफ़ॉल्ट रूप से एक्सेस करने का एक तरीका प्रदान नहीं करते हैं , लेकिन आप अपने DOM के बारे में डेटा का कुछ फ़ॉर्म सर्वर पर भेजने के लिए एक प्रोजेक्ट बना सकते हैं, फिर अपनी ज़रूरतों के आधार पर उस डेटा का उपयोग / रेंडर / हेरफेर करें। ।

... और हां, उपकरण और उपयोगिताओं के संदर्भ में वेब-स्क्रैपिंग और वेब विकास कई क्षेत्रों में अधिक परिष्कृत और निश्चित रूप से आसान हो गया।





headless-browser