【笔记】Node.js概述和开发环境搭建

文章目录

  • 一、Node.js简介
    • 1.简介
    • 2.发展历史
    • 3.Node.js的结构
    • 4.Node.js的特点
      • 事件驱动
        • 优点
      • 异步、非阻塞I/O
      • 单线程
    • 5.Node.js的缺点
      • (1)不适合CPU计算密集型应用
      • (2)只支持单核CPU,不能充分利用CPU
      • (3)内存控制不足且容量有限制
      • (4)可靠性低
      • (5)其他
    • 6.Node.js的应用场景
      • REST/JSON APIs
      • 统一Web应用的UI层
      • 大量Ajax请求的应用
  • 二、部署Node.js开发环境
    • 1.Windows10下
      • (1)下载
      • (2)安装及验证
      • (3)环境变量配置
    • 2.Linux下
      • (1) 源码解压安装
        • 下载
        • 解压
        • 验证
      • (2)git安装
      • (3)通过linux包管理器安装
        • Arch Linux
        • 基于Debian和Ubuntu的Linux发布版
        • Red Hat Enterprise Linux/RHEL、CentOS和Fedora
    • 3.Mac OS X 下
      • (1)源码安装
      • (2).dmg安装包安装
      • (3)npm包管理器安装
    • 4.树莓派下


API 文档 | Node.js 中文网


一、Node.js简介

1.简介

  • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
  • Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。
  • 使用npm作为官方包管理器(当然可用其他,比如yarn)
  • 发布于2009年5月,由Ryan Dahl开发。

2.发展历史

网上都有,在此不赘述了:

  • 你需要了解的Node.js 发展史 - 简书
    【笔记】Node.js概述和开发环境搭建_第1张图片

3.Node.js的结构

  • Node.js标准库(即我们使用过程中能直接调用的API,在源码中的lib目录下可以看到)
  • Node bindings(这一层是JavaScript与底层C/C++能够沟通的关键,前者通过bindings调用后者,相互交换数据)
  • 支撑Node.js运行的基础构件:由C/C++实现的,其中包括4大部分:
    • V8 Google推出的JavaScript VM,也是Node.js用JavaScript的关键,为JavaScript提供了在非浏览器端运行的环境,是Nodejs之所以高效的原因之一。
    • libuv 为Nodejs提供了跨平台、线程池、事件池、异步I/O等能力,是Nodejs如此强大的关键
    • C-ares 提供了异步处理DNS相关的能力
    • http_parse OpenSSL zlib等 提供了包括HTTP解析、SSL、数据压缩等能力

4.Node.js的特点

事件驱动

主要体现在回调函数,开发人员可以通过项目业务逻辑来注册对应的回调函数,而这些回调函数并不是按照注册顺序来执行,而是待到相应事件触发时才加入时间循环队列:如下图的Event Loop
【笔记】Node.js概述和开发环境搭建_第2张图片

  • 当有事件触发时,node.js将这些事件放到事件队列中,此时不占CPU只占内存队列
  • Event Loop从队列中解析这些请求,如果存在回调函数,判断是否存在阻塞,存在的话事件循环从线程池中检索一个线程,否则,直接执行回调。回调函数主要执行的操作是:
    1. 发送一个响应
    2. 安排另一个事件
    3. 结束程序。
  • 当程序执行到回调函数时,浏览器运行回调函数。
    【笔记】Node.js概述和开发环境搭建_第3张图片

优点

能够让CPU 和内存在同一时间集中处理一件事,同时尽可能让耗时的 I/O 操作并行执行。对于低速连接攻击,Node.js 只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多线程开销,很大程度上可以提高 Web 应用的健壮性,防止恶意攻击。

在node.js中,一个时刻只能执行一个事件回调函数,但在执行一个事件回调函数的过程中,可以转而处理其他事情,然后返回继续执行原事件的回调函数,这种处理机制称为“事件环”机制。与其他web后端编程语言相比,node除了异步和事件外,回调函数也是一大特色,回调函数也是最好的接受异步调用返回数据的方式。代码的编写顺序和执行顺序无关。

异步、非阻塞I/O

  • 怎样理解阻塞非阻塞与同步异步的区别? - 知乎

一个异步I/O的大致流程:

(1) 发起I/O调用

  • 用户通过JavaScript代码调用Node核心模块,将参数和回调函数传入核心模块。
  • Node核心模块会将传入的参数和回调函数封装成一个请求对象。
  • 将这个请求对象推入I/O线程池等待执行。
  • JavaScript发起的异步调用结束,JavaScript线程继续执行后续操作。

(2)执行回调

  • I/O操作完成后会将结果存储到请求对象的result属性上,并发出操作完成的通知。
  • 每次事件循环时会检查是否有完成的I/O操作,如果有就将请求对象加入观察者队列中,之后当做事件处理。
  • 处理I/O观察者事件时会取出之前封装在请求对象中的回调函数,执行这个回调函数,并将result当做参数,以完成JavaScript回调的目的。

单线程

node.js的主线程采用单线程异步非阻塞模式,即主线程独占cpu,遇到I/O请求不阻塞后面的计算,当I/O完成后,以事件的方式通知,从线程池调用对应线程继续执行

5.Node.js的缺点

(1)不适合CPU计算密集型应用

CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;

  • 解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;

(2)只支持单核CPU,不能充分利用CPU

(3)内存控制不足且容量有限制

Javascript的面向对象是基于JSON的,而Java是直接使用内存结构。通过JSON序列化和反序列的过程控制内存,这方面显然是不如Java的。此外,由于V8引擎有内存设计的限制,32位环境中最大堆是1G,64位环境中最大堆也不到2G,如果要一次读入10G数据,对于Nodejs来说也无法实现。

(4)可靠性低

一旦代码某个环节崩溃,整个系统都崩溃
原因:单进程,单线程

  • 解决方案:
    • Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
    • 开多个进程监听同一个端口,使用cluster模块;

(5)其他

  • 不适合无异步的应用,比如系统管理,自行化脚本等,还是Python更顺手,Nodejs的异步调用可能会给编程带来一些麻烦。
  • 开源组件库质量参差不齐,更新快,向下不兼容
  • Debug不方便,错误没有stack trace

6.Node.js的应用场景

Node.js 擅长处理 I/O,不善于计算(单线程的缺点)

因此 Node.js 适用于:当应用程序需要处理大量并发的 I/O,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,Node.js 也非常适合与 web socket 配合,开发长连接的实时交互应用程序。

REST/JSON APIs

这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。

统一Web应用的UI层

大量Ajax请求的应用

具体场景可以表现为如下:

  • 第一大类:用户表单收集系统、后台管理系统、实时交互系统、考试系统、联网软件、高并发量的web应用程序;
  • 第二大类:基于web、canvas等多人联网游戏;
  • 第三大类:基于web的多人实时聊天客户端、聊天室、图文直播;
  • 第四大类:单页面浏览器应用程序;
  • 第五大类:操作数据库、为前端和移动端提供基于json的API;

【笔记】Node.js概述和开发环境搭建_第4张图片

Node.js的软肋:CPU密集型应用、模板渲染、压缩/解压、加密/解密

二、部署Node.js开发环境

官网:https://nodejs.org/en/

中文网:http://nodejs.cn/

1.Windows10下

(1)下载

【笔记】Node.js概述和开发环境搭建_第5张图片

  • 建议选择长期支持版(LTS:Long Time Support),最新稳定版本
  • 首页默认win*64,可点进下载页面选择需要的版本、平台、64/32。。。
    【笔记】Node.js概述和开发环境搭建_第6张图片
  • windows建议下载安装版,带.msi后缀的

(2)安装及验证

  • 下载之后傻瓜式安装即可
  • 默认安装了npm包管理器
    【笔记】Node.js概述和开发环境搭建_第7张图片
  • 安装验证
    【笔记】Node.js概述和开发环境搭建_第8张图片

(3)环境变量配置

  • 在nodejs的安装目录【D:\Program Files\nodejs】下创建两个文件夹【node_global】及【node_cache】
  • 命令行运行如下命令:
npm config set prefix "D:\Program Files\nodejs\node_global"
npm config set cache "D:\Program Files\nodejs\node_cache"
  • win+E打开我的电脑 => 右击此电脑 => 属性 => 高级系统设置 => 环境变量
    【笔记】Node.js概述和开发环境搭建_第9张图片
    【笔记】Node.js概述和开发环境搭建_第10张图片
    【笔记】Node.js概述和开发环境搭建_第11张图片
  • 将nodejs路径添加到变量Path中(默认已添加)
    【笔记】Node.js概述和开发环境搭建_第12张图片
  • 添加:D:\Program Files\nodejs\node_global
  • 确认 - 应用 - 用如下命令测试设置是否生效:
npm i vue -g # -g是全局安装的意思
  • node_global文件夹下安装了vue对应文件即可证明设置成功

2.Linux下

(1) 源码解压安装

下载

wget https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz

解压

tar xf  node-v12.16.3-linux-x64.tar.xz

验证

cd node-v12.16.3-linux-x64/
./bin/node -v

(2)git安装

sudo git clone https://github.com/nodejs/node.git

(3)通过linux包管理器安装

Arch Linux

pacman -S nodejs npm

基于Debian和Ubuntu的Linux发布版

sudo apt-get install nodejs 
sudo apt-get install npm

Red Hat Enterprise Linux/RHEL、CentOS和Fedora

。。。没有试过就不赘述了

3.Mac OS X 下

只是看看,作者并没有mac可以操作。。。

(1)源码安装

(2).dmg安装包安装

傻瓜式

(3)npm包管理器安装

4.树莓派下

目前无操作,有机会再补充


拓展:

  • 从头开始讲Node.js——异步与事件驱动
  • RESTful API的理解

你可能感兴趣的:(node)