node.js初见
官网上的定义:
Node.js®是基于 Chrome 的 V8 JavaScript 引擎构建的 JavaScript 运行时环境。
Node.js 使用事件驱动的非阻塞 I/O模型,轻量且高效。
Node.js 的包生态系统 npm 是世界上最大的开源库生态系统。
1:如何理解javascript的运行环境
JavaScript 原来是只能在浏览器中运行的,当把它扩展成为可以在你的计算机上作为独立的程序运行时,Node.js 就出现了。
2:如何理解阻塞喝非阻塞
阻塞I/O
在阻塞方法中,在 user1 的数据被输出到屏幕之前,不会启动 user2 的数据请求。
如果这是一个Web服务器,我们必须为每个新用户启动一个新线程。但 JavaScript 是单线程的(实际上不是真的,但它有一个单线程的事件循环,我们稍后会讨论)。所以这会使 JavaScript 不太适合多线程任务。
就是非阻塞的用武之地。
非阻塞
另一方面,如果用非阻塞请求,可以在为 user2 发起数据请求时,无需先等待对 user1 请求的响应。你可以并行启动这两个请求。
这种非阻塞 I/O 消除了对多线程的需要,因为服务器可以同时处理多个请求。
3:javascript事件循环
- 将 main() 送入调用栈。
- 将 console.log() 送入调用栈。然后立即运行并弹出。
- 将 setTimeout(2000) 送入栈。 setTimeout(2000)是一个 Node
API。在调用它时,先注册事件回调。事件将等待 2000 毫秒,然后回调这个函数。 - 在 API 中注册后,setTimeout(2000) 从调用堆栈中弹出。
- 现在第二个 setTimeout(0) 以相同的方式注册。我们现在有两个 Node API 等待执行。
- 等待 0 秒后,setTimeout(0) 被移动到回调队列,同样的事情发生在 setTimeout(2000)。
- 在回调队列中,函数等待调用栈为空,因为每个语句都执行一次。这由事件循环处理。
- 最后一个 console.log() 运行,并且 main() 从调用栈中弹出。
- 如果事件循环检测到到调用堆栈为空且回调队列不为空。它将回调(以先进先出顺序)移动到调用栈并执行。
4:npm
这些是由令人敬畏的社区所构建的库,它能解决你的大多数的常规问题。 npm(Node package manager))中有很多可以用在你的程序中包,可以使你的开发更快更有效。
5:事件
事件指的是我们可以对在程序中发生的事情作出回应。Node 中有两种类型的事件。
- 事件指的是我们可以对在程序中发生的事情作出回应。Node 中有两种类型的事件。
- 自定义事件:JavaScript 核心。
6:最后helloworld"
创建文件 app.js 并将以下内容添加到其中。
console.log("hello world!!!!");
打开终端,将目录切换到保存文件的文件夹,然后运行 node app.js。
就这么简单,你在 Node.js 中写的 “Hello World” 跑起来了。