node.js笔记

再看一遍node.js吧

    • Node.js REPL(交互解释器)
    • Node.js 回调函数
    • node.js事件循环
    • Node.js EventEmitter
    • Node.js Buffer(缓冲区)

Node.js REPL(交互解释器)

怎么理解这个交互解释呢,应该和windows的cmd,liunx 的git base here 。可以支持你在这里输入命令并接受系统的响应。
打开 在上面三种环境里输入node 命令 前提是你电脑有node环境的哈

node

这是我启动的位置
如上图所示这个东西就打开喽 它的作用主要有四种
1.读取 -读取用户输入,解析输入的Js数据结构并存储在内存中
2.执行-执行输入的数据结构
3.打印 -输出结果
4.循环-循环操作以上步骤知道用户按下两次ctrl-c退出
打开后和浏览器的控制台又很像就是说
node.js笔记_第1张图片
上图这个终端
node.js笔记_第2张图片
上图浏览器控制台 就是不能说一模一样也可以说毫无差别吧 啊哈哈

再然后就是它有一些自己的命令
1.ctrl-c 退出当前终端(感觉通用的吧 好多都是这么退出)
2.ctrl-c 按下两次 退出node REPL (退出这个环境) ctrl-d也是这样作用
3.上下箭头查看历史作用
4.tab 列出当前明明
5.help 列出使用命令
6.break 退出多行表达式
7.clear 退出多行表达式
8.save 文件名 保存会话到指定文件
9.load 文件名 载入打过去会话的文件内容
node.js笔记_第3张图片

Node.js 回调函数

node.js异步编程的直接提现就是回调,异步编程依托于回调去实现,但不能说使用了回调后程序就异步化了。回调函数在完成任务后会被调用,node.js使用了大量的回调函数,node所有的api都支持回调函数。例如,我们可以一边读取文件,一边执行其他命令。在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等到文件i/o执行操作。这种方式会提高node.js的性能,可以处理大量的并发请求。

node.js事件循环

node.js是单进程单线程应用程序,但是因为v8引擎提供的一部执行回调接口,通过这些接口可以处理大量的并发,所以性能很高。
node.js几乎每一个API都是支持回调函数的
node.js基本所有的事件机制都是用设计模式中观察者模式实现的
node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有时间发生就调用该回调函数

事件驱动程序
1.node.js使用事件驱动模型,当web server 接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。
2.它被放回处理队列,当到达队列开题,这个结果被返回给用户。
3.这个模型非常的高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作(这也称为非阻塞式IO或者事件驱动IO在这个事件驱动模型真难过,会生成一个主循环来监听事件,当检测到事件时触发回调函数)
node.js笔记_第4张图片

Node.js EventEmitter

1.ndoe.js所有的一部I/O操作在完成时都会发生一个事件到事件队列
2.node.js里面的许多对象都会分发事件:一个net.server对象会在每次有新连接时触发一个事件,一个fs.readStream 对象会在文件被打开的时候触发一个事件,所有产生事件的对象都events.eventemitter实例。

event模块值提供了一个对象:eventemitter 。eventemitter的核心就是时间触发与事件监听功能的封装。我们可以通过require("event”)来访问模块

就怎么说呢 如果是先学Vue后来补node基础的家人们要开始熟悉了
$emit $on 这里也是这一套就是说

node.js笔记_第5张图片
EventEmitter的每个事件由一个事件名和若干参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter支持若干个事件监听器
当事件触发时,注册到这个时间的事件监听器被依次调用,事件参数作为回调函数参数传递。

EventEmitter的属性(方法)
1.addListener(event,listener) 为指定事件添加一个监听器到监听数组的尾部
2.on(event,listener)为指定事件注册一个监听器,接受一个字符串event和一个回调函数
3.once(event,listener) 为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器
4.removeListener(event,listener) 移除指定事件的某个监听器,监听器必须是该数据已经注册过的监听器。它接受两个参数,第一个是事件名称,第二个是回调函数名称
5.removeAllListeners([event]) 移除所有事件的所有监听器,如果制定事件,则移除指定事件的所有监听器
6.setMaxListeners(n)默认情况下,eventemitters如果你添加的监听器超过10个就会输出警告信息,这个方法能改变那个最大量。
7.listeners(event) 返回制定事件的监听器数组
8.emit(event,[arg1].[arg2],[…])按监听器的顺序执行每个监听器 如果事件有注册监听返回true,否则返回false

EventEmitter的属性(事件)
1.newListener 该事件在添加新监听器时被触发
2.removeListener 从制定监听器数组中删除一个监听器,需要注意的是,此操作将会改变处于被删监听器之后那些监听器的索引

error事件
EventEmitter定义了一个特殊的事件error,它包含了错误的语义,我们在遇到异常的时候通常会触发error事件,当error被触发时,EventEmitter规定如果没有响应的监听器,node.js会把它当做异常,退出程序并输出错误的信息。我们一般要为触发error事件的对象设置监听器,避免遇到错误后导致的整个程序的崩溃

大多数时候我们不会直接使用EventEmitter,而是在对象中继承它。包括fs,net,http在内的,只要是支持事件响应的核心模块都是EventEmitter的子类。这么做的原因有两点
1.具有某个试题功能的对象实现时间符合语义,事件觉得监听和发生应该是一个对象的方法
2.js对象机制是基于原型的,支持部分多重继承,继承eventEmitter不会打乱原有的继承关系.

Node.js Buffer(缓冲区)

JS语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据

–未完待续–

你可能感兴趣的:(前端,javascript)