美文网首页
NodeJS的背景

NodeJS的背景

作者: 月满轩尼诗大人 | 来源:发表于2016-12-03 21:06 被阅读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的事件循环处理能力。

    相关文章

      网友评论

          本文标题:NodeJS的背景

          本文链接:https://www.haomeiwen.com/subject/hlicmttx.html