NodeJs系列之--相见恨晚

第一部分 NodeJs 初识

不知了了几行代码是否可以引起你的兴趣

// service.js
var http = require("http");
http.createServer(function(req,res){
res.write("Hello NodeJs");
res.end();
}).listen(8888);

1 Nodejs是什么?

  • Node.js是一个让 JavaScript 运行在服务端的开发平台;

  • Node.js可以作为服务器向用户提供服务,它跳过了 Apache、Nginx 等 HTTP 服务器,直接面向前端开发。

  • 优秀的第三方包管理器(node package manager,npm)

2 Nodejs不是什么?

  1. Node.js 不是一种独立的语言
  2. Node.js 不是一个 JavaScript 框架 ;

3 Nodejs能做什么?

 具有复杂逻辑的网站;
 基于社交网络的大规模 Web 应用;
 Web Socket 服务器;
 TCP/UDP 套接字应用程序; 8  命令行工具;
 交互式终端程序;
 带有图形用户界面的本地应用程序;
 单元测试工具;
 客户端 JavaScript 编译器。

4 Nodejs 原理

Node.js 是基于Chrome V8引擎构建的,由事件循环(Event Loop)分发 I/O 任务,最终工作线程(Work Thread)将任务丢到线程池(Thread Pool)里去执行,而事件循环只要等待执行结果就可以了。

核心概念

* Chrome V8 是 Google 发布的开源 JavaScript 引擎,
采用 C/C++ 编写,在 Google 的 Chrome 浏览器中被使用。
Chrome V8 引擎可以独立运行,也可以用来嵌入到 C/C++ 应用程序中执行。
* Event Loop 事件循环(由 libuv 提供)
* Thread Pool 线程池(由 libuv 提供)

重点: 整体思路梳理

重点: 整体思路梳理

重点: 整体思路梳理

1. Chrome V8 是 JavaScript 引擎
2. Node.js 内置 Chrome V8 引擎,所以它使用的 JavaScript 语法
3. JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事
4. 单线程就意味着,所有任务需要排队,前一个任务结束,
才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。
5. 如果排队是因为计算量大,CPU 忙不过来,倒也算了,
但是很多时候 CPU 是闲着的,因为 I/O 很慢,不得不等着结果出来,再往下执行。
6. CPU 完全可以不管 I/O 设备,挂起处于等待中的任务,先运行排在后面的任务,
将等待中的 I/O 任务放到 Event Loop 里,由 Event Loop 将 I/O 任务放到线程池里,
只要有资源,就尽力执行。

重点理解如下这句话

Nodejs接受任务是单线程,执行任务是多线程。

思路如下:

  1. Nodejs内置V8,采用Js语言,是单线程的,故接受任务是单线程,无需进程/线程切换,非常高效
  2. EventLoop派发任务给线程池里的I/O去执行,故是多线程执行任务。

第二部分 配置开发环境

1. 安装<官方文档>

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

Mac安装后如果提示nvm: command not found, 是因为没有[.bash_profile file]文件,

第一种方法: 创建touch ~/.bash_profile, 然后重新执行curl操作;
第二种方法: 打开.bash_profile, 添加source ~/.bashrc

2 下载不同版本

                        now
(io.js) v2.0 : v2.x
| | : |
v0.10.x /--------------:-----------------\ Node.js 2.0
____|____/ : \______|_____
\ : /
\--------------:-----------------/
| | : | |
(node.js) v0.12.x : v0.13.x v0.14.x

对于nodejs与io.js的版本区别以及渊源,建议大家参考Node.js与io.js那些事儿

#罗列可以安装的版本
$ nvm ls-remote
.
.
.
v6.4.0
v6.5.0
v6.6.0

3 下载版本

#为了演示,选择了6.6.0
$ nvm install v6.6.0

$ nvm install v5.12.0
######################################################################## 100.0%
WARNING: checksums are currently disabled for node.js v4.0 and later
Now using node v5.12.0 (npm v3.8.6)

4 切换版本

$ nvm use v5
Now using node v5.12.0 (npm v3.8.6)

$ nvm use v6
Now using node v6.6.0 (npm v3.10.3)

5 常用命令

# 下载
$ nvm install ***
#切换版本
$ nvm use 版本号
#罗列下载的版本
$nvm ls
# 罗列远程版本
$nvm ls-remote
#设置默认的版本
$nvm alias default 版本

第三部分 注意事项

  1. 当关闭终端在此打开时, 输入 nvm会提示找不到, 解决办法:
    .bash_profile文件中添加source ~/.bashrc;即可;

  2. nvm安装的路径是: ~/.nvm;

  3. 使用nvm安装node, 会安装在该路径下: ~/.nvm/versions/node;

附加

Mac 环境变量配置

1./etc/profile: (不建议修改这个文件)全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
2./etc/bashrc: 系统级环境变量. 全局(公有)配置,bash shell执行时,不管是何种方式,都会读取此文件。
3.~/.bash_profile: 用户级环境变量.每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!