Почему у Node.js нет встроенного DOM? - PullRequest
38 голосов
/ 12 июля 2011

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

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

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

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

Ответы [ 15 ]

0 голосов
/ 10 января 2018

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

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

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

0 голосов
/ 16 марта 2016

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

0 голосов
/ 12 июля 2011

Если вы читаете DOM как «связанные объекты, немедленно доступные из моего скрипта», тогда ответ « даёт , но сильно отличается от набора объектов, доступных из скрипта веб-документа».Основная причина в том, что узел - это «четный ввод-вывод для V8», а не «объекты дерева HTML для V8»

0 голосов
/ 12 июля 2011

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

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

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

0 голосов
/ 12 июля 2011

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

...