概述
文章目录
- 一、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 发展史 - 简书
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将这些事件放到事件队列中,此时不占CPU只占内存队列
- Event Loop从队列中解析这些请求,如果存在回调函数,判断是否存在阻塞,存在的话事件循环从线程池中检索一个线程,否则,直接执行回调。回调函数主要执行的操作是:
- 发送一个响应
- 安排另一个事件
- 结束程序。
- 当程序执行到回调函数时,浏览器运行回调函数。
优点
能够让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的软肋:CPU密集型应用、模板渲染、压缩/解压、加密/解密
二、部署Node.js开发环境
官网:https://nodejs.org/en/
中文网:http://nodejs.cn/
1.Windows10下
(1)下载
- 建议选择长期支持版(LTS:Long Time Support),最新稳定版本
- 首页默认win*64,可点进下载页面选择需要的版本、平台、64/32。。。
- windows建议下载安装版,带.msi后缀的
(2)安装及验证
- 下载之后傻瓜式安装即可
- 默认安装了npm包管理器
- 安装验证
(3)环境变量配置
- 在nodejs的安装目录【D:Program Filesnodejs】下创建两个文件夹【node_global】及【node_cache】
- 命令行运行如下命令:
npm config set prefix "D:Program Filesnodejsnode_global"
npm config set cache "D:Program Filesnodejsnode_cache"
- win+E打开我的电脑 => 右击此电脑 => 属性 => 高级系统设置 => 环境变量
- 将nodejs路径添加到变量Path中(默认已添加)
- 添加:
D:Program Filesnodejsnode_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.js概述和开发环境搭建一、Node.js简介二、部署Node.js开发环境的全部内容,希望文章能够帮你解决【笔记】Node.js概述和开发环境搭建一、Node.js简介二、部署Node.js开发环境所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复