Подтвердить что ты не робот

Почему Node.js не имеет собственного DOM?

Когда я обнаружил, что Node.js был построен с использованием движка JavaScript V8, я подумал:

Отлично, веб-скребок будет проще, поскольку страница будет отображаться как в браузере, с "родной" DOM, поддерживающей XPath, и любые вызовы AJAX на странице, выполненной.

  1. Почему у него нет родной DOM, когда он использует тот же движок JavaScript, что и Chrome?
  2. Почему у него нет режима для запуска JavaScript на извлеченных страницах?
  3. Что я не понимаю о механизмах JavaScript и движке в веб-браузере?

Большое спасибо!

4b9b3361

Ответ 1

DOM - это DOM, а реализация JavaScript - это просто отдельный объект. DOM представляет набор возможностей, которые веб-браузер предоставляет для среды JavaScript. Однако нет требования, чтобы какая-либо конкретная среда выполнения JavaScript имела любые объекты, открытые через глобальный объект.

Что Node.js - автономная среда JavaScript, полностью независимая от веб-браузера. Там нет внутренней связи между веб-браузерами и JavaScript; DOM - это не часть языка JavaScript или спецификация или что-то еще.

Я использую старую версию JavaScript на основе Java Rhino на моем Java-сервере. Эта среда также не имеет ничего общего с любым DOM. Это мое собственное приложение, которое отвечает за заполнение глобального объекта объектами, чтобы делать то, что мне нужно, чтобы это сделать, и это не DOM.

Обратите внимание, что существуют проекты типа jsdom, если вы хотите иметь виртуальную DOM в проекте Node. Из-за своей природы в качестве серверной платформы DOM - это средство, которое Node может обойтись и по-прежнему иметь смысл для широкого спектра серверных приложений. Это не означает, что DOM может быть не очень полезен для некоторых людей, но это просто не в той же категории услуг, что и такие, как управление процессом, ввод-вывод, сетевое взаимодействие, взаимодействие с базами данных и т.д.

Может быть какой-то "официальный" ответ на вопрос "почему?" но в основном это бизнес тех, кто поддерживает Node (теперь Node Foundation). Если какой-нибудь разработчик безвредности решит, что Node должен по умолчанию поставляться с набором модулей для поддержки виртуальной DOM и успешно работает и работает и делает это, тогда Node будет иметь DOM.

Ответ 2

PS: Когда я читал этот вопрос, мне также было интересно, если V8 (node.js построен поверх этого) имел DOM

Почему, когда он использует тот же JS-движок, что и Chrome, у него нет собственного DOM?

Но я искал Google и нашел страницу Google V8, в которой говорится следующее:

JavaScript чаще всего используется для сценариев на стороне клиента в браузере, который используется, например, для управления объектами Document Object Model (DOM). DOM, однако, обычно не предоставляется механизмом JavaScript, а вместо этого браузером. То же самое касается V8-Google Chrome предоставляет DOM. Однако V8 предоставляет все типы данных, операторы, объекты и функции, указанные в стандарте ECMA.

node.js использует V8 а не Google Chrome.

Точно так же, почему у него нет режима запуска JS на извлеченных страницах?

Я также думаю, что нам это действительно не так плохо. Райан Дал создал node.js как один человек (один программист). Может быть, теперь он (его команда) разработает это, но я был очень поражен количеством кода, который он произвел (сумасшедшим). Он хотел создать неблокирующую легкую/эффективную библиотеку, и я думаю, что он сделал хорошую работу.

Но опять же, еще один разработчик создал модуль, который довольно хорошо и активно развивается (сегодня) на https://github.com/tmpvar/jsdom.

Что я не понимаю о механизмах Javascript и движке в веб-браузере? :)

Это разные вещи, как мы надеемся, ясно из приведенной выше цитаты.

Ответ 3

node.js решил не включать его в свою стандартную библиотеку. Для любой функциональности есть неизбежный компромисс между полнотой, масштабируемостью и ремонтопригодностью.

Это не значит, что это не является потенциально полезным. Существует хотя бы одна JavaScript DOM, предназначенная для NodeJS (среди других реализаций CommonJS).

Ответ 4

Объектная модель документа (DOM вкратце) представляет собой программный интерфейс для документов HTML и XML, и он представляет страницу, чтобы программы могли изменять структуру, стиль и содержание документа. Подробнее об этом.


Необходимое различие между клиентской стороной (браузером) и сервером (Node.js) и их основными целями:

  • Клиентская сторона: доступ и отображение информации в Интернете
  • На стороне сервера: обеспечение стабильных и надежных способов доставки веб-информации

Почему DOM в Node.js отсутствует по умолчанию?

По умолчанию Node.js не имеет доступа и не знает о фактической DOM в вашем собственном браузере. Node.js просто доставляет данные, которые будут использоваться вашим собственным браузером для обработки и отображения всего веб-сайта, включая DOM. Сервер предоставляет данные вашему браузеру для использования и обработки. Это намеченный путь.

Почему бы вам не захотеть получить доступ к DOM в Node.js?

Доступ к вашему браузеру DOM с использованием Node.js будет просто просто не в том, что касается сервера. Ваша собственная роль браузера должна отображать данные, поступающие с сервера. Однако это, безусловно, возможно, и существует множество решений на разных уровнях глубин и разновидностей для предварительного рендеринга, управления или изменения DOM с помощью вызовов AJAX. Посмотрим, какие будущие тенденции приведут.

Почему вы хотите получить доступ к DOM в Node.js?

По умолчанию вы не должны получать доступ к своей собственной, фактической DOM (по крайней мере, к некоторым данным), используя Node.js. Клиентская сторона и серверная часть разделены с точки зрения роли, функциональности и ответственности на основе многолетнего опыта и знаний. Хотя есть несколько ситуаций, когда есть веские причины для этого:

  • Сбор данных об использовании (тестирование A/B, эффективность UI/UX и обратная связь)
  • Безгласное тестирование (разработка, автоматизация, веб-скребок)

Как вы можете получить доступ к DOM в Node.js?

  • jsdom: реализация pure-JavaScript, хорошая для тестирования вашего собственного проекта, связанного с DOM/браузером
  • cheerio: отличное решение, если вам нравится/часто используется jQuery
  • кукловод: собственный способ Google безгласного тестирования с использованием Google Chrome
  • собственное решение (ваша возможная будущая ссылка на проект здесь)

Хотя эти решения не предоставляют способ доступа к вашему собственному браузеру, фактическому DOM по умолчанию, но вы можете создать проект для отправки какой-либо информации о вашей DOM на сервер, а затем использовать/визуализировать/манипулировать этими данными на основе ваших потребностей,

... и да, веб-соскабливание и веб-разработка с точки зрения инструментов и утилит стали более сложными и, конечно же, проще в нескольких областях.

Ответ 5

У вас, похоже, есть ошибочное предположение, что V8 и DOM неразрывно связаны, что не так. DOM фактически обрабатывается Webkit, V8 не обрабатывает DOM, он обрабатывает вызовы Javascript в DOM. Не позволяйте этому препятствовать вам, Node.js вырезал значительную нишу на рынке серверов реального времени, но не позволяйте никому сообщать вам об этом только для серверов. Node позволяет строить практически все с помощью JavaScript.

Можно делать то, о чем вы говорите. Например, есть очень хорошая библиотека jsdom, если вам действительно нужен доступ к DOM, и node-htmlparser, есть также некоторые действительно хорошие библиотеки скремблирования, которые используют их как apricot.

Ответ 6

Это связано: существует новый проект (2012), называемый node-webkit, который пытается добавить DOM и многое другое из Webkit в Node. Поддержите его!

Ответ 7

Чтобы ответить на ваш основной вопрос, вы можете использовать JSDom и jQuery для очистки страниц в node.js: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs

Я использовал этот подход несколько раз сам, и он отлично работает.

Ответ 8

Javascript!= браузер. Javascript как язык не привязан к браузерам; node.js - это просто реализация Javascript, предназначенная для серверов, а не для браузеров. Следовательно, нет DOM.

Ответ 9

Узел - среда выполнения, она не отображает DOM, как браузер.

Ответ 10

Node.js предназначен для серверного программирования. DOM не будет отображаться на сервере.

Ответ 11

Если вы читаете DOM как "связанные объекты, которые немедленно доступны из моего script", тогда ответ " он делает, но он сильно отличается от набор объектов, доступных из веб-документа script '. Основная причина заключается в том, что node представляет собой" событие ввода/вывода для V8 ", а не" HTML-объекты дерева для V8"

Ответ 12

2018 ответ: в основном по историческим причинам, но это может измениться в будущем.

Исторически на сервере было сделано очень мало манипуляций с DOM. Кроме того, как утверждают другие ответы, JS stdlib и DOM являются отдельными библиотеками - если вы используете узлы, например, для сценариев Unix, то HTMLElement и NodeList и NodeList Д. На самом деле не имеют отношения к этому.

Тем не менее: серверная DOM-манипуляция теперь является очень распространенной частью доставки веб-приложений. Веб-серверам необходимо понимать структуру страниц, и, если их попросят предоставить ресурс как HTML, доставляйте содержимое HTML, которое отражает исходное состояние веб-приложения. Это означает, что веб-приложения загружаются намного быстрее, чем если сервер просто доставляет страницу-заглушку, а браузеры выполняют работу по заполнению реального контента. В настоящее время это делается с JSDom и аналогичным, но точно так же узел имеет объекты Request and Response встроенные в него, поскольку функции DOM, поддерживаемые как часть stdlib, помогут в этой задаче.

Ответ 13

Потому что нет DOM. DOM обозначает Document Object Model. В узле нет документа, поэтому DOM не манипулирует им. Это определенно вещь браузера.

Вы можете использовать библиотеку, такую как cheerio хотя это дает вам несколько простых манипуляций с DOM.

Узел - это серверный JavaScript. Это просто язык, применяемый к базовому системному API, более похожим на C++ или Java.

Ответ 14

Кажется, люди ответили "почему", но не так. Быстрый ответ о том, как это происходит в веб-браузере, отображается объект документа (следовательно, DOM, объектная модель документа). В окнах этот объект называется объектом документа. Вы можете обратиться к этой странице и посмотреть методы, которые она предоставляет, для обработки HTML-документов, таких как createElement. Я не использую node.js или не проделал COM-программирование через некоторое время, но я бы предположил, что вы можете использовать DOM в node.js, просто называя COM-объект IHTMLDocument3. Конечно, для других платформ, таких как Mac OS X или Linux, вам, вероятно, придется что-то использовать с их ОС api. Это должно позволить вам легко создавать серверную страницу веб-страницы с помощью DOM или очищать входящие веб-страницы.

Ответ 15

1) Что значит для него иметь D ocument O bject M odel? Нет документа для представления.

2) В большинстве случаев вы не получаете страницы. Вы можете, но большинство Node приложений, вероятно, не будет.

3) Без документа и браузера Javascript - это еще один язык программирования. Поэтому вы можете спросить, почему DOM не существует на С# или Java