翻译进度
12
分块数量
8
参与人数

Node.js 到底是什么?

这是一篇协同翻译的文章,你可以点击『我来翻译』按钮来参与翻译。

Node.js 是一个 JavaScript 的运行环境,听起来很棒,然而是什么意思呢?它又是怎么使用的呢?

Node 运行环境涵盖所有你运行用 JavaScript 编写的项目所需要的东西。

如果你知道 Java 的话,这里有很多的相似性。

当早期 JavaScript 开发者将只能运行在浏览器上拓展到可以作为独立的应用运行在计算机上时,Node 就应运而生了。

yanger 翻译于 1周前

现在你可以使用 JavaScript 做更多的事情, 而不仅仅是使网站具有交互性.

JavaScript 现在有能力做其他脚本语言(比如 Python)可以做的事情.

你的浏览器 Javascript 和 Node.js 都运行在 V8 JavaScript 运行时引擎. 该引擎将 JavaScript 代码转换为更快的机器代码. 机器代码是低级代码, 计算机不需要首先解释它而直接运行.

mowangjuanzi 翻译于 1周前

查看其他 1 个版本

为什么会是 Node.js?

这里给出了一些 Node 官网 的官方定义:

Node.js® 是一个基于 Chorme V8 引擎 的 JavaScript 运行环境
Node.js 使用一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效
Node.js 的包管理器,npm(https://www.npmjs.com/), 是世界上最大的开源生态社区库

我们已经解释了关于第一条的定义:「Node.js® 是一个基于 Chorme V8引擎的 JavaScript 运行环境」。现在我们研究一下其他两条中的定义从而去探寻 Node 如此流行的秘诀

yanger 翻译于 1周前

I/O 指 输入/输出。它可以是从读取/写入本地文件到向 API 发送一个 HTTP 请求的任何内容

I/O 过程中需要时间,因此会阻碍到其他事件的进程

设想这样一个脚本,我们向后台数据库分别发送获取用户一和用户二相关信息的请求然后把它们打印在控制台里。虽然请求响应的过程中需要等待,但是我们可以让这两个请求在同一时间内以相互独立的方式同步进行

yanger 翻译于 1周前

阻塞的 I/O

在阻塞的条款中,用户二的数据请求在用户一请求的数据没有打印出来之前是不能启动的。

如果这是一个网络服务,我们可能会给每一位新用户开启一个新的线程,但是 JavaScript 是单线程的(不完全是,但是它有一个单线程事件循环,我们稍后将会提到)。因此 JavaScript 并不适合多线程任务。

这就是非阻塞部分的来源。

yanger 翻译于 1周前

非阻塞的 I/O

另一方面,使用非阻塞的请求,你可以并行的启动用户二的数据请求而不必等到用户一的请求得到响应之后。

当服务器端可以同时处理多个请求的时候,非阻塞的 I/O 的存在就消除了对多线程的依赖

yanger 翻译于 1周前

The JavaScript event loop

Otherwise, here’s a quick step-by-step explanation of how the JavaScript Event Loop works.

  1. Push main() onto the call stack.
  2. Push console.log() onto the call stack. This then runs right away and gets popped.
  3. Push setTimeout(2000) onto the stack. setTimeout(2000) is a Node API. When we call it, we register the event-callback pair. The event will wait 2000 milliseconds, then callback is the function.
  4. After registering it in the APIs, setTimeout(2000) gets popped from the call stack.
  5. Now the second setTimeout(0) gets registered in the same way. We now have two Node APIs waiting to execute.
  6. After waiting for 0 seconds, setTimeout(0) gets moved to the callback queue, and the same thing happens with setTimeout(2000).
  7. In the callback queue, the functions wait for the call stack to be empty, because only one statement can execute a time. This is taken care of by the event loop.
  8. The last console.log() runs, and the main() gets popped from the call stack.
  9. The event loop sees that the call stack is empty and the callback queue is not empty. So it moves the callbacks (in a first-in-first-out order) to the call stack for execution.

npm

1240

这些库是由很棒的社区构建,它可以解决大多数的一般性问题。npm(Node 包管理器)包可以让你的应用开发更快捷,高效。

要求

要求做三件事:

  • 它从[Node.js API](http://nodejs.org/api/)加载与 Node.js 绑定在一起的模块,如文件系统和 HTTP 。
  • 加载从npm安装的第三方库,如 Express 和 Mongoose 。
  • 允许您引入文件并模块化项目。

Require 函数接受一个参数 “path” (路径字符串)并返回 module.exports

pardon110 翻译于 2天前

Node 模块

Node 模块是一个可重用的代码块,其存在不会意外地影响其他代码。

你可以编写自己的模块并在各种应用程序中使用它。 Node.js有一组内置模块,无需进一步安装即可使用。

V8 通过利用 C++ 来加速 JavaScript

V8 是一个用 C++ 编写的开源运行引擎。

JavaScript -> V8(C++) -> 机器语言

dreamfish 翻译于 1周前

V8 implements a script called ECMAScript as specified in ECMA-262. ECMAScript was created by Ecma International to standardize JavaScript.

V8 can run standalone or can be embedded into any C++ application. It has hooks that allow you to write your own C++ code that you can make available to JavaScript.

This essentially lets you add features to JavaScript by embedding V8 into your C++ code so that your C++ code understands more than what the ECMAScript standard otherwise specifies.

Note: there are many different JavaScript runtime engines apart from V8 by Chrome like SpiderMonkey by Mozilla, Chakra by Microsoft, etc. Details of the same can be found on this page.

事件

在应用中产生某些可回调逻辑。Node 中有两种事件类型。

  • 系统事件:C++核心从一个名为 libuv 的库。(例如,读取完一个文件)。

-自定义事件:javascript 核心。

pardon110 翻译于 4天前

在node.js中编写hello world

我们必须这么做,不是吗?

创建一个app.js文件并添加以下内容。

console.log("你好,世界!");

打开节点终端,将目录更改为保存文件的文件夹,然后运行node app.js
你刚刚在node.js中写了hello world。

jqw19930727 翻译于 1周前

本文章首发在 LearnKu.com 网站上。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/free-code-camp/what-e...

译文地址:https://learnku.com/nodejs/t/33802

参与译者:8
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!