javascript - 为什么 Node.js 没有原生 DOM?

标签 javascript node.js dom v8 headless-browser

当我发现 Node.js 是使用 V8 JavaScript 引擎构建的时,我想:

Great, web scraping will be easier as the page will be rendered like in the browser, with a "native" DOM supporting XPath and any AJAX calls on the page executed.

  1. 当它使用与 Chrome 相同的 JavaScript 引擎时,为什么没有原生 DOM?
  2. 为什么它没有在检索到的页面中运行 JavaScript 的模式?
  3. 关于 JavaScript 引擎与 Web 浏览器中的引擎,我有哪些不了解的地方?

非常感谢!

最佳答案

DOM 就是 DOM,JavaScript 实现只是一个单独的实体。 DOM 表示 Web 浏览器向 JavaScript 环境公开的一组工具。没有要求,但是任何特定的 JavaScript 运行时都将具有通过全局对象公开的任何设施。

Node.js 是一个独立的 JavaScript 环境,完全独立于网络浏览器。 Web 浏览器和 JavaScript 之间没有内在联系; DOM 不是 JavaScript 语言或规范或任何东西的一部分。

我在基于 Java 的 Web 服务器中使用旧的 Rhino 基于 Java 的 JavaScript 实现。该环境也与任何 DOM 无关。这是我自己的应用程序,它负责使用工具填充全局对象以执行我需要它能够执行的操作,它不是 DOM。

请注意,有些项目像 jsdom如果您想在 Node 项目中使用虚拟 DOM。由于其作为服务器端平台的本质,DOM 是 Node 可以不用的工具,并且对于各种服务器应用程序仍然非常有意义。这并不是说 DOM 可能对某些人没有用处,只是它与进程控制、I/O、网络、数据库互操作等属于不同的服务类别。

对于“为什么”这个问题,可能会有一些“官方”回答。在那里,但它基本上只是维护 Node 的人(现在的 Node 基金会)的业务。如果某个勇敢的开发人员决定 Node 应该默认附带一组模块来支持虚拟 DOM,并且成功地工作和工作并实现了这一点,那么 Node 将拥有一个 DOM。 p>

关于javascript - 为什么 Node.js 没有原生 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657216/

相关文章:

javascript - 如何从 Firestore Node.js 获取时间戳格式数据

node.js - 在不重建和重新启动的情况下 react 更改文件

node.js - 如何杀死子进程/关闭Chrome?

node.js - 启动工头时出错(Dotenv::FormatError)

javascript - 使用 Javascript 获取 HTML ul 列表中的列表项索引

javascript - Grunt.js;了解不同的配置

javascript - 当我可以在控制台中看到该值时,为什么我的nodejs postgres函数返回未定义?

javascript - JSON Javascript 解析字符串

css - 选择正确的元素

javascript - 导航(突出显示)表中的指定行