node基础知识-说说对node的理解

一.说说你对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请求参数

 

posted @ 2019-09-18 20:52  大笛子  阅读(372)  评论(0编辑  收藏  举报