Node的前世今生

Node的发展史

2009年2月,Ryan Dahl在博客上宣布准备基于V8创建一个轻量级的Web服务器并提供一套库.
2009年5月,Ryan Dahl在GitHub上发布了最初版本的部分Node.js包,随后几个月里,有人开始使用Node.js开发应用。
2009年11月和2010年4月,两届JSConf大会都安排了Node.js的讲座。
2010年年底,Node.js获得云计算服务商Joyent资助,创始人Ryan Dahl加入Joyent全职负责Node.js的发展。
2011年7月,Node.js在微软的支持下发布Windows版本。

Node是什么

Node或者Node.js,是一个可以让JavaScript运行在服务端的平台。
在官方文档上的解释为Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
官方的意思是: node.js是建立在Chrome的V8 上面的一个JavaScript引擎

node.js 和JavaScript

在传统意义上,JavaScript是由ECMAScript,文档对象模型(DOM)和浏览器对象模型(BOM)组成。是一个运行在浏览器端的脚本语言。而Node的诞生,可以让JavaScript运行在浏览器端之外的平台。

简单来说:Node就是一个让JavaScript运行在服务端的开发平台

Node的主要特点

异步式I/O与事件驱动

Node.js最大的特点就是采用异步式I/O与事件驱动的架构设计。对于高并发的解方案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式I/O调用的时间开销。Node.js使用的是单线程模型,对于所有I/O都采用异步式请求方式,避免繁琐的上下文切换,Node.js在执行过程中会维护一个事件队列,程序在事件循环等待下一个事件到来,每个异步式I/O请求完成后会被推送到事件队列,等待程序进程进行处理。

下面是一个Node.js中异步的方式读取文件的一个例子
const fs = require('fs')
fs.readFile('file.text', 'utf-8', (err, data) => {
    if (err) {
        console.log(err)
    } else(
        console.log(data)
    )
})
console.log('end')

-输出结果是

$ node text.js
end
这是一个测试文件
同步读取的例子
const fs = require('fs')
const data = fs.readFileSync('file.text', 'utf-8');
console.log(data)
console.log("end")

-输出结果是

$ node text.js
这是一个测试文件
end

同步式读取文件的方式比较容易理解,将文件名作为参数传入fs.readFileSync函数,阻塞等待读取完成后,将文件的内容作为函数的返回值赋给data变量,然后控制台输出data的值,最后输出end
而异步读取文件的方式就不太容易理解了。要理解的话,我们就必须先知道在Node中,异步式I/O是通过回调函数来实现的。fs.readFile,接收了三个参数,文件名,编码方式,和回调函数,fs.readFile调用时所做的工作只是将异步式I/O请求发送给了操作系统,然后返回并执行后面的语句,执行完以后进入事件循环监听事件。当fs接受到I/O请求完成的事件时,事件循环会主动调回回调函数以完成后续工作。所有我们会先看到end,在看到file.text文件的内容。

总结

  • Node.js 是一个基于Chrome V8 引擎的JavaScript运行环境
  • Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值