Nodejs系列:为什么要使用Node.js ?

90 阅读2分钟

Nodejs 介绍

Nodejs是一个基于Chrome V8 引擎 的JavaScript运行环境,用于在服务端运行JavaScript代码

对象

  • 全局对象(不需要引入)

    • global:下面的全局对象都挂在global上
      • Class:Buffer
      • process
      • console
      • clearInterval、setInterval
      • clearTimeout、setTimeout
  • 每个模块都有,但不可以在命名交互中使用的 模块级别的全局变量

    • __dirname:获取当前文件的路径,不包括文件名
    • __filename:同上;包括后面的文件名
    • exports:导出
    • module:module.exports 导出
    • require:引入

NodeJS中,用var声明的变量并不属于全局的变量,只在当前模块生效

global全局对象则在全局作用域中,任何全局变量、函数、对象都是该对象的一个属性值

特点:

  • 事件驱动:一种编程范式,它基于事件的产生和处理
  • 高效的I/O处理:
  • 单线程
  • npm包管理器
  • 使用commonJS规范

libuv 是Nodejs的重要底层依赖,是一个高性能的跨平台的异步I/O库;主要负责处理I/O操作和事件循环;

特点1:事件驱动

实现事件驱动的基础:EventEmitter

实现事件驱动的核心机制: 事件循环

Nodejs的单线程事件循环模型是基于libuv构建的

  • 事件生产者:EventEmitter(事件发射器) emit一个事件;事件会被添加到对应的事件队列中
  • 消费者:事件循环的主要职责就是不断的从事件队列中取出事件

特点2:非阻塞I/O

  • 使用场景: 实时聊天,在线游戏服务器

对于文件系统操作和网络通信等I/O操作,libuv提供了异步处理的能力,在不同操作系统上,libuv会利用相应的底层机制实现高效的异步I/O

特点3:单线程模型

避免了多线程上下文切换开销、锁竞争等;通过事件循环和异步操作,能够在单线程环境下高效处理各种任务; 如何利用多核CPU

特点4:丰富的模块生态系统(npm)

yarn为什么比npm快?

特点5:使用commonJS 规范

  • require('xxx'); 引入模块:方便模块化开发
  • exports.xxx= {}; || module.exports = {} 导出方式2种
    • module.exports : 是nodejs模块系统中原始方法
    • exports: 本质上是对module.exports 的一个引用

require加载机制

我们常用的webpack就是基于Nodejs开发的;所以常可以看到webpack的配置文件是 module.exports={}

同时也可以使用Es6模块语法,但注意从Nodejs 12.7.0 和 13.2.0 版本开始,使用export语法需要将文件扩展名改为.mjs 或者通过babel转译,才能正确识别

应用场景:

  1. web服务器开发
  2. 命令行工具开发
  3. 实时应用开发