NodeJS的背景

2016-12-03  本文已影响0人  月满轩尼诗大人

题外话:
现在NodeJS的重要性不言而喻,工作中总是能接触到 ,所以,打算花一点时间来认真的学习NodeJs,打算做一个系列文章。一个是加深自己的理解,同时也算是拿出自己的意见来进行分享,和交流,如果有不对的地方,欢迎指正!我也是翻阅了很多Nodejs的书籍,看了很多视频教程。但是网上的知识碎片化很严重,无法看清一门技术的全面貌,总有一种雨里雾里的感觉。所以初学一门技术或者是语言,还是先从这门语言的背景说起。NodeJS 以下简称Node。话不多说,下面步入正题。

一:Node的背景
这是一门09你那出现的技术,到现在短短的7,8年时间。很多人都疑问,NodeJS为什么要用JS写,和JS有什么关系?NodeJS到底是什么?有什么特点?下面带着问题去探索答案。

(1)Node为什么要用JS来实现?

Node的作者Ryan Dahl从事的就是高性能Web服务器。在尝试了失败之后,他找到了设计高性能Web服务器的两个重要因素,事件驱动和非阻塞IO。
JS的开发门槛低,在后端部分一直没有市场,为他导入I/O库没有大的阻力

JS在浏览器中拥有广泛的事件支持,满足事件驱动的要求。

其次就是Chrome的V8虚拟机的性能非常的棒
基于以上几点,才选择javaScript 这门语言来开发Node。

二:Node给JavaScript按上了翅膀
我们都知道前端一直都想染指后端,Node的出现,无疑大大的增加了可行性!

谷歌的ChromeV8引擎性能非常棒,那么Node和Chrome有什么相同又有什么不同呢?

在浏览器中,存在HTML的布局引擎,还有Js的解析引擎,但是在Node中,Node是不操作HTML的,所有Node没有Webkit布局引擎。

相同点就是,他们都是基于事件的驱动的异步架构,浏览器通过事件驱动来服务界面交互,Node通过事件驱动来服务I/O,Node中的js可以搭建服务器端,可以连接数据库,可以玩多进程!从此他不只是局限于在浏览器中修改DOM,修改css样式。

三:Node的特点
1:异步I/O
什么是异步?打个比方的例子,比如我要买一个煎饼和一瓶汽水,当我走到煎饼摊,我跟老板说给我来个煎饼,老板说好嘞,不过得等五分钟,这时候我有两个选择,一个是在这里等五分钟,等老板摊煎饼,摊好之后我拿着煎饼在去买汽水。二个就是我先去买汽水,买完汽水回来煎饼也已经弄好了。一个简单的比方。同步就是当前代码没有执行完成,不能执行其他代码、而异步就是可以同一时间执行不同代码。

比如在Node中


var fs = require( ' fs ' );

fs.readFile('/path' , function(err,file){

console.log('读取文件完成')

})

console.log('开始读取文件')

在上面这个代码块中,如果是同步的话,会先打印"读取文件完成",在打印“开始读取文件”。但是实际上是先打印的开始读取文件,在打印读取文件成。也就是,此处是异步操作的。


fs.readFile('/path1' , function(err , file ){

console.log('我要用30s')

})

fs.readFile('/path' , function(err,file){

console.log('我要用60s')

})

如果要是同步执行,总共时间加起来应该是90s,但是实际上只是60种,也就是说读取这两个文件是同时执行的!在Node中,很多一部分操作都是用异步的方式来进行的;

2:事件与回调函数


var callback = function(){

console.log('我是callback')

}

button.onClick = function(callback){

callback();

}

在上面例子中,我们给Button添加了click事件,并且在把函数作为参数传入到事件函数中。

无论前端还是后端,事件都是通用的。事件的方式具有轻量级,松耦合,等特点。事件和事件之间都是相互独立的。在Node中,除了异步和事件之外,回调函数是一个特色,回调函数也是接受异步调用返回数据的一种方式。因此,在异步操作中,代码的执行顺序和书写顺序并没有多大的关系。

3:单线程
Node保持了JavaScript 单线程的特点。

单线程的优点:

不用在意状态同步的问题,没有死锁的存在,没有上下文切换带来的性能开销

单线程的缺点

(1)无法利用多核cpu

(2)错误会引起整个应用退出,应用的健壮性值得考验

(3)大量的计算占用cpu导致无法继续异步调用I/O;

4:跨平台
Node可以在win,Linux上使用,他的中间层封装了。

5:Node的应用场景
(1)I/O密集型

从单线程角度来说,Node处理I/O的能力是非常棒的。Node面向网络,擅长并行I/O,能够有效的组织起来硬件资源。I/O密集的优势主要是利用Node的事件循环处理能力。

上一篇下一篇

猜你喜欢

热点阅读