说 nodeJS 建立在 V8 引擎上是啥意思?

Posted

技术标签:

【中文标题】说 nodeJS 建立在 V8 引擎上是啥意思?【英文标题】:What does it mean to say nodeJS is built on the V8 engine?说 nodeJS 建立在 V8 引擎上是什么意思? 【发布时间】:2017-05-14 23:07:25 【问题描述】:

我是 MEAN 堆栈的初学者,在学习 NodeJS 时,我想到了以下语句

Node.js 是一个非常强大的基于 javascript 的框架/平台 在 Google Chrome 的 JavaScript V8 引擎上。

但它究竟是什么意思

基于 Google Chrome 的 JavaScript V8 引擎构建。

如果它是基于 Chrome 的 JS V8 引擎构建的,为什么它也可以在 Firefox 上运行?

【问题讨论】:

nodejs 没有在浏览器中运行。 nodejs 是一种服务器端语言,使用 google 的 v8 引擎运行 javascript。 就个人而言,每当我从ChromeFirefox 打开localhost 时,我发现了一些不同之处。例如,我正在运行一个示例node.js 应用程序,它只是使用response.write() 打印。每当我从Chrome 浏览localhost 时,它都可以正常工作,但是当我在Firefox 中执行相同操作时,打印的文本将作为文件下载而不是在浏览器上显示。我不知道为什么! 【参考方案1】:

MEAN 堆栈,从后到前重新组织:

MongoDB:数据持久化,存储数据供以后检索 Node.js:Web 应用服务器,响应来自客户端的请求 Express:Web 应用程序框架,减少 Node 样板文件 Angular.js:浏览器框架

所以 Node.js 不能“在 Firefox 上运行”(它也不能在 Google Chrome 上运行):它是一种服务器端技术。将其视为该角色中 Python/Ruby/Java 的替代品。因此它可以/确实响应来自各种客户端(如 Google Chrome 和 Firefox)的请求。

“基于 V8 构建”的意思是它使用与 Google Chrome 相同的 JavaScript 解释器/即时编译器。但与 chrome 的相似之处几乎止于此:Node 没有渲染引擎/css 解析器/DOM,但在服务器中确实有您需要的东西,例如 HTTP 库和文件系统 API。

另外,我无意冒犯:我们都是从你现在的位置开始的,事实上你甚至在问这个问题(这又不是一件坏事!)意味着像 MEAN 这样的堆栈构建超出了你的想象。该文档将假定您知道您似乎不知道的事情。我强烈建议在尝试将数据库和框架混在一起之前,通过一些教程和准系统测试应用程序来进一步了解 JavaScript 和 Node。

【讨论】:

【参考方案2】:

为了让计算机执行一种编程语言,它需要被翻译成机器可以理解的格式(通常称为machine code)。 Javascript 也不例外。当您的浏览器在网站上显示 Javascript 代码时,需要编译某些内容,或者在 Javascript 的情况下,将指令解释为机器代码。

V8 是由 Google 开发的用于执行此操作的程序。当您使用 Chrome 并在页面上检测到 Javascript 时,它会将其传递给 V8 以运行编译,然后您的计算机执行生成的代码。

V8 由 Google 开源。 Node 的创建者 Ryan Dahl 修改了源代码,以便 V8 可以在 Chrome 之外和 Linux 或 MacOS 等操作系统内部使用。这就是你的第一句话的意思。

这里要注意的重要一点是,您不是在浏览器中执行 Node 程序,而是在您使用的实际计算机上执行。 V8 与 Firefox、Safari、IE 等没有关联。所有这些浏览器都有自己的 Javascript 解释器。

【讨论】:

感谢您提供如此详细的解释——尤其是最后一段。【参考方案3】:

好的,让我们解决这个问题:

Node.js 是一个非常强大的基于 JavaScript 的框架/平台,基于 Google Chrome 的 JavaScript V8 引擎。

JavaScript 是一种用于互联网浏览器的编程语言。我认为它是由 NetScape 于 1995 年发明,并于 1996 年提交给名为 ECMA 的认证组织。

ECMA 采用了 JavaScript 的原始思想,并制定了一个名为 ECMAScript 的标准,每个 JavaScript 实现都应遵循该标准。你看,JavaScript 不是一种只存在于以太中某处的语言 - 每个互联网浏览器都有它自己的语言实现 - 这意味着 JavaScript 通常只能在互联网浏览器中工作,例如 Mozilla、Safari、Opera 或 Chrome例如。 (Internet Explorer 还附带了 ECMAScript 的实现,但我相信出于许可原因,他们将其称为 JScript)

Google Chrome 附带的 JavaScript 实现在强大的 V8 引擎上运行,该引擎是用一种称为 C++ 的语言编写的。 V8 解释您的 JavaScript 代码并为其提供所有变量类型、管理内存等。V8 的优点在于它是开源的,并且可以嵌入到任何其他 C++ 程序中。

因此 Node 的创建者产生了采用 V8 并通过添加服务器为网站提供服务所需的功能来增强它的想法 - 读取文件、响应请求、路由等。这意味着它是现在可以使用 JavaScript 对网站的服务器端实现进行编程,这要归功于 Node.js 应用程序,它可以解释您的代码并将其本质上转换为 C++ 和以后的机器代码。 重要的区别是 Node.js 不能在您的浏览器中运行!它在服务器上运行,就像您使用 php 和 apache 编写后端代码一样。

【讨论】:

【参考方案4】:

V8 引擎是 Google Chrome 中使用的 Javascript 的解释器。 NodeJS 建立在这个引擎之上的声明意味着它使用这个解释器来做自己的事情,所以它也可以在服务器上使用,而不仅仅是在桌面环境中(比如在谷歌浏览器中)。

NodeJS 是一个单独的应用程序,您可以通过 Internet 与之通信,它类似于 Apache、nginx 或类似的,但它不仅仅用于一件事(就像上面提到的那样),但它主要用于制作 web-server 之类的应用程序。

【讨论】:

【参考方案5】:

Node 使用运行 chrome 的相同 JS“引擎”。 在这种情况下,引擎是一种将您的 JS 代码编译或“翻译”为机器代码的软件;或您的计算机可以理解的 0 和 1。 这个编译是一个复杂的过程,有几种不同的方法可以解决它,例如 google 的 v8 或 mozilla 的 spidermonkey。它们中的每一个都支持整个 JS 标准(在一定程度上),即任何 JavaScript 代码都可以在它们上面运行。

当您运行节点服务器时,它会在充当服务器的机器上运行。代码根本不在用户的机器上运行;因此,使用哪个浏览器查看您的内容并不重要。

在 MEAN 堆栈中,它是在用户计算机上运行的 Angular 代码。但是,它是用 JavaScript 编写的,可以在任何 JavaScript 引擎上运行。

【讨论】:

【参考方案6】:

Node.js 是服务器上的 JavaScript。例如,您可以在http://localhost:8000/ 上启动一个 Node.js 服务器,您可以使用 Chrome 或 Firefox 访问它。

使用 Node.js(使用 V8),服务器可以用 JavaScript 而不是 PHP 或 Ruby 编写。

【讨论】:

【参考方案7】:

其实 NodeJS 是跨平台的服务器端框架。您可能知道它最适合 I/O 绑定和数据流应用程序,它使用 Google Chrome 的 JavaScript V8 引擎实现上述目的 所以它独立于浏览器和平台。

【讨论】:

以上是关于说 nodeJS 建立在 V8 引擎上是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

nodejs 安装

nodejs介绍

Nodejs入门简介

nodejs从0到1(Node简介+模块机制)

nodejs环境安装

nodejs php go语言了解