node 你到底懂多少,等你,来~~
栏目: JavaScript · 发布时间: 5年前
内容简介:Node的首要目标是提供一种简单的,用于创建高性能服务器的开发工具 Web服务器的瓶颈在于并发的用户量,对比Java和Php的实现方式其实node 火爆最大的原因是前端的火爆,前端后重视后,在的大前端的大潮中推向顶峰,因为Web主要场景就是接收客户端的请求读取静态资源和渲染界面,所以Node非常适合Web应用的开发Node.js是一个基于 Chrome V8 引擎的JavaScript运行环境(runtime),Node
Node的首要目标是提供一种简单的,用于创建高性能服务器的开发工具 Web服务器的瓶颈在于并发的用户量,对比 Java 和 Php 的实现方式
Node在处理高并发,I/O密集场景有明显的性能优势
- 高并发,是指在同一时间并发访问服务器
- I/O密集指的是文件操作、网络操作、数据库,相对的有CPU密集,CPU密集指的是逻辑处理运算、压缩、解压、加密、解密
其实node 火爆最大的原因是前端的火爆,前端后重视后,在的大前端的大潮中推向顶峰,因为Web主要场景就是接收客户端的请求读取静态资源和渲染界面,所以Node非常适合Web应用的开发
Node是什么?
Node.js是一个基于 Chrome V8 引擎的JavaScript运行环境(runtime),Node 不是一门语言 是让js运行在后端的运行时,并且不包括javascript全集,因为在服务端中不包含DOM和BOM,Node也提供了一些新的模块例如http,fs模块等。Node.js 使用了事件驱动、非阻塞式 I/O 的模型,使其轻量又高效并且Node.js 的包管理器 npm,是全球最大的开源库生态系统。
我个人对node的事件轮询的理解是这样的,主线程分配任务下去,注册回调函数。主线程里在执行代码的时候io继续等待,主线程执行完毕后进行轮询,因为这个时候主线程是空闲状态,所以可以一直轮询,直到发现有某一个io操作给他发了信号告诉他我现在弄好了,你可以用这个数据,主线程的资源就拿来执行回调函数。也就是说从始至终都只有主线程在做事情,主线程要不然是在执行函数,要不然就是在进行事件的轮询,去寻找有哪个事件完成了需要执行他的回调函数。
大概就是所谓的单线程异步吧
当然很多童鞋可能会问,为什么js是单线程, javascript在最初设计时设计成了单线程,如果多个线程同时操作DOM那岂不会很混乱?这里所谓的单线程指的是主线程是单线程的,所以在Node中主线程依旧是单线程的。
顺便扯一下进程与线程
来一张图关于浏览器的
- 用户界面-包括地址栏、前进/后退按钮、书签菜单等
- 浏览器引擎-在用户界面和呈现引擎之间传送指令(浏览器的主进程)
- 渲染引擎,也被称为浏览器内核(浏览器渲染进程)
本人查了一些资料,其实渲染引擎内部是多线程的,内部包含两个最为重要的线程ui线程和js线程。这里要特别注意ui线程和js线程是互斥的,因为JS运行结果会影响到ui线程的结果。ui更新会被保存在队列中等到js线程空闲时立即被执行。
其他线程就是涉及事件循环(Event Loop),大家可以自行谷歌。
关于buffer
其实就是相当于我们js数组理解就可以了,那为什么node需要用buffer表示。 缓冲区Buffer是暂时存放输入输出数据的一段内存。 JS语言没有二进制数据类型,而在处理TCP和文件流的时候,必须要处理二进制数据 。 貌似es6也出了一个TypedArray,应该是差不多的。
node的可读流和可写流
之前写的,现在基本忘记了~~流相关-机票
let http = require('http'); //req 流对象 是可读流 //res 是一个可写流 write let server = http.createServer(); let url = require('url'); //当客户端连接上服务器之后执行回调 server.on('connection', function () { console.log('客户端连接 '); }); //req代表客户端的连接,server服务器把客户端的请求信息进行解析,然后放在req上面 //res代表响应,如果希望向客户端回应消息,需要通过 res server.on('request', function (req, res) { console.log(req.method);//获取请求方法名 let { pathname, query } = url.parse(req.url, true); console.log(pathname); console.log(query); console.log(req.url);//获取请求路径 console.log(req.headers);//请求头对象 let result = []; req.on('data', function (data) { result.push(data); }); req.on('end', function () { let r = Buffer.concat(result);//请求体 console.log(r.toString()); //如果进行响应 res.end(r); }) }); server.on('close', function (req, res) { console.log('服务器关闭 '); }); server.on('error', function (err) { console.log('服务器错误 '); }); server.listen(8089, function () { console.log('server started at http://localhost:8089'); }); 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
解放战争(上)(1945年8月—1948年9月)
王树增 / 人民文学出版社 / 2009-8 / 60.00
《解放战争》为王树增非虚构文学著述中规模最大的作品。武器简陋、兵力不足的军队对抗拥有现代武器装备的兵力庞大的军队,数量不多、面积有限的解放区最终扩展成为九百六十万平方公里的共和国,解放战争在短短四年时间里演绎的是人类历史上的战争传奇。国际风云,政治智慧,时事洞察,军事谋略,军队意志,作战才能,作品具有宏阔的视角和入微的体察,包含着惊心动魄的人生沉浮和变幻莫测的战场胜负,尽展中国历史上规模最大的一场......一起来看看 《解放战争(上)(1945年8月—1948年9月)》 这本书的介绍吧!