一.说说你对node的理解
从定义+特点+作用来说对node的理解
定义:node是基于Chrmo v8引擎的JavaScript运行环境;
特点:具有事件驱动,非阻塞I/O模型,高并发和轻量级,单线程,单进程特点;
事件驱动:
非阻塞I/O:在执行I/O操作的时候,不会影响程序执行其他内容,这得益于node的事件循环机制.下面的代码执行时会先打印1,在输出2!,这就是非阻塞IO的一个例子
var fs = require("fs"); fs.readFile("./testfile", "utf8", function(error, file) { if (error) throw error; console.log("2!"); }); console.log("1");
作用:执行js并不受浏览器安全级别的限制(跨域),可以操作系统级别的api:如文件读写,进程管理,网络通信等
二.对chrome v8引擎的理解
1.v8是谷歌开源的高性能JavaScript引擎的名称,谷歌在浏览页面时由v8负责js的处理并执行
2.v8引擎提供了JavaScript的运行环境,dom和其他web api则由浏览器来提供.
3.v8引擎独立于托管它的浏览器,基于这个关键特性 V8 于 2009 年被选为为 Node.js 提供支持的引擎
4.底层是基于c++开发的,既能独立运行,又可以嵌入c++应用中
5.经过不断的改进v8引擎具有高性能和跨平台的特性,且可运行于 Mac、Windows、Linux 和其他一些系统
6.v8使用了JIT编译出即时机器码,能极大提高js编译速度
7.借鉴了java vm的垃圾回收机制,能精准回收垃圾
三.node规范
nodejs遵循commonjs规范
对于nodejs来说,每一个文件都是一个模块,模块内的成员私有
每个文件都有一个module,代表当前模块;每个模块都有exports属性,代表对外提供的接口.module.exports={...}
使用require来加载模块,加载的时候会去执行被加载模块内的代码,结果返回加载模块的exports对象
模块的加载顺序按照在js中出现的顺序
模块可以多次加载,但是第一次加载完成后,就会将结果缓存,之后每次使用都是从缓存中读取结果(一个模块多次require,只有第一次会执行)
四.require的加载过程
require在加载模块时,会先去module.cache缓存中寻找是否有缓存
没有缓存的时候,创建一个新的module实例,把实例存储在缓存中;
用module.load()去加载指定模块
一旦加载/解析过程中出现异常就删除缓存中该模块
加载成功后返回该模块的module.exports对象
五.中间层
理解node的中间层,java后台有多个接口,我们通过node中间层把多个接口合并为一个接口
六.中间件
内置中间件
在node官网上的基本上都是内置中间件,所谓的内置中间件就是已经在node环境中存在的中间件,引用时直接require中间件名字
querystring//编码,解码,解析参数等
path//路径方面
Error//错误
http,https//请求
url//处理路径
fs//文件系统
第三方中间件
需要下载的中间件
http-proxy-middleware//跨域
cheerio//解析html,可以用于爬虫
bodyParser//用于express获取post请求参数