Node.js知识整理

Node.js入门

什么是node.js

  1. 本质是JavaScript解释器 Node.js 就是运行在服务端的 JavaScript
  2. V8内核

为什么使用Node.js

  1. 为了提供高性能的Web服务
  2. IO性能强大
  3. 时间处理机制完善
  4. 天然能够处理DOM
  5. 社区活跃,日趋完善

Node.js的优势

  1. 处理大流量数据
  2. 适合实时交互的应用
  3. 完美支持对象数据库
  4. 异步处理大量并发链接

学习Node.js需要具备的知识

  1. JavaScript
  2. ES6
  3. 服务器相关知识
  4. 最好在 Linux系统下进行开发

node相关学习

  1. node中文网 http://nodejs.cn/
    github: https://github.com/nodejscn
  2. 内置包管理器npm https://www.npmjs.com/
  3. 淘宝镜像 https://npm.taobao.org/
    npm install cnpm

升级node

Node.js的更新之快,最新稳定版本也频繁变化,经常会发现,某个模块不能在你当前的Node版本上使用了,此时你需要升级Node。而管理Node版本,则有一个模块叫做Node Binary的管理模块,简称“n”,是专门用来管理node.js的版本的,更新node需要先安装n模块。

    // 安装n模块
    npm install -g n
     
    // 升级node.js到最新稳定版
    n stable
    
    //安装指定的node版本:
    n v4.4.2

linux内置编辑器vim

vi hello.js  // 进入vim 编辑
node hello.js  // 执行js

node常用命令

  1. 终端输入node进入node环境
  2. 退出ndoe环境 按2次ctr+c 或输入.exit
  3. tab键,列出当前命令
  4. .help 列出使用命令
  5. .break 退出多行表达式
  6. .clear 退出多行表达式
  7. .save filename 保存当前的 node REPL会话到指定文件
  8. .load filename 载入当前的 node REPL会话的文件内容

npm命令

    npm install
    npm uninstall

Node.js 回调函数

  1. 回调函数
  2. 阻塞与非阻塞
    // 阻塞
    var fs = require('fs');
    var data = fs.readFileSync('data.txt');
    console.log(data.toString());
    // => ABCDEFG 
    
    // 非阻塞
    var fs = require('fs');
    fs.readFile('data.txt', function(err,data){
    	if(err){
    		console.lohg(err);
    	}else{
    		console.log(data.toString());
    	}
    })
    console.log('程序执行完毕')
    // => 程序执行完毕
    // => ABCDEFG

Node.js 事件驱动机制

事件驱动模型

  1. node.js是单进程单线程程序,不能并发完成,只能通过事件回调来实现并发效果
  2. 事件驱动使用观察者模式实现
    3.非阻塞式IO 或 事件驱动的IO
  3. 事件处理代码流程 引入events对象,并创建eventEmitter对象

在这里插入图片描述

事件与事件绑定

    // 引入Event模块并创建eventEmitter对象
    var events = require('events');
    var eventEmitter = new events.EventEmitter();
    
    // 事件处理函数
    var connectHandler = function connected() {
    	console.log('connected被调用!');
    }
    
    // 事件绑定
    eventEmitter.on('connection', connectHandler);
    
    // 触发事件
    eventEmitter.emit('connection');
    console.log('程序执行完毕!')
    
    // => connected被调用!
    // => 程序执行完毕!

Node.js 模块化

模块化的概念和意义

  1. 为了让Node.js的文件可以相互调用
  2. 文件和模块是一一对应的,一个Node.js文件就是一个模块
  3. 这个文件可能是JavaScript代码、JSON或者编译过的C/C++扩展
  4. Node.js中存在4类模块原生模块和3种文件模块)

Node.js 的模块加载流程

在这里插入图片描述

示例

    // hello.js
    function Hello() {
    	var name;
    	this.setName = function(argname) {
    		name = argname;
    	}
    	this.sayHello = function() {
    		console.log('Hello,' + name)
    	}
    }
    module.exports = Hello;
    // main.js
    var Hello = require('./hello');
    var hello = new Hello;
    hello.setName('dunzi');
    hello.sayHello();
    
    // =>  Hello,dunzi

函数

路由

全局对象

  1. __filename

__filename 表示当前正在执行的脚本的文件名。

  1. __dirname

__dirname 表示当前执行脚本所在的目录。

  1. setTimeout(cb, ms)
  2. clearTimeout(t)
  3. setInterval(cb, ms)
  4. console
  5. process

工具

util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足。

underscorejs 提供更多的工具

文件系统

  1. 同步和异步
var fs = require("fs");

// 异步读取
fs.readFile('input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("异步读取: " + data.toString());
});

// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());

console.log("程序执行完毕。");

express

  1. node框架
  2. 中间件
  3. RESTful

大规模Node.js项目及优化方案

NodeJS异步原理解析及优化方案

异步IO的好处
  1. 前端通过异步IO可以消除UI堵塞
  2. 假设请求资源A的时间为,请求资源B的时间为N,那么同步的请求消耗时间为M+N.如果采用异步方式占用时间为Max(M, N);
  3. 随着业务的复杂,会引入分布式系统,时间会线性的增加,M+N+…和Max(M, N…),这会放大同步和异步之间的差异
  4. I/OS是昂贵的,分布式I/O是更昂贵的
  5. NodeJS适用于IO密集型(请求处理能力),不适用CPU密集型(计算能力)
1. CPU 时钟: 1/CPU主频
2. 并行和串行的比列 公式
3. 文件描述符(异步IO不直接消耗文件描述符)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值