Node.js 简介

Node.js 简介免费看

Node.js 是什么,Node.js 有什么作用和特点

2018-10-05侠课岛    基础入门       

后端/Node.js/Node.js入门 18     0     2185

Node.js 是什么以及能做些什么

Node.js 是一个基于V8引擎可以让我们前端用 JavaScript 直接进行服务端开发的平台。最初是 Ryan Dahl 发起的开源项目,现在由 Joyent 公司负责维护。Ryan Dahl 也因此被称为 Node 之父(Ryan Dahl 的 Github)。

随着 Node.js 的诞生,让原本仅仅只用于页面的 JavaScript 也摇身一变进入服务端语言的行列。强大而灵活的包管理器(NPM,node package manager)也是直接丰富和完善了 Node 的生态。目前已经有超过 700,000 个第三方模块在 npm 上了,可以说几乎是没有什么做不了的事情了。如果有,那就再装两个 npm 包。在实际的开发过程中,我们也更多地是将这些模块进行搭配组合,来满足我们的业务需求。

目前对于 Node.js 的应用最多的是在服务端开发方面,单线程、异步I/O的特点,在性能上有了充足的保障,在开发上也不用纠结多线程的问题。国内如腾讯云、阿里云等平台,都已经支持 Node.js 的环境。并且随着 electron、node-webkit 的出现,JavaScript 也可以被用来制作传统的桌面应用程序。现在的 JavaScript 是前后端通吃的语言,非常的“社会”。可以说,Node 的出现直接改变了 JavaScript 语言和使用这门语言的前端工程师的地位。

对于我们前端来说,由于几乎没有学习的成本,因此也有大批的前端转到了 Node 开发的行列。大前端、全栈工程师也随之应运而生。如果想从前端变为全栈或者架构师的话,对于后端语言的掌握和了解是必不可少的,而 Node 我相信会是其中的一条捷径。

事件驱动以及异步式I/O

Node.js 最大特点就是事件驱动以及异步方式I/O。这两大特色保证了 Node.js 在处理 Web 服务时出色的性能。编程其实无处不源于生活。为了方便理解,我们举一个身边的例子来解释一下这两大特性。

想象一下我们在麦当劳点一个巨无霸套餐的流程是怎样的呢?

  1. 我们走到柜台,向服务员点“我要一个巨无霸套餐”。

  2. 服务员下单,后厨开始准备套餐。服务员并向我们收款。

  3. 收款完成后,我们在一旁等待。服务员接待下一位顾客。

  4. 后台完成套餐,通过服务台叫号领取。至此点餐过程结束。

我们在点完单等餐的时候,服务员就立刻服务下一个顾客,而非等在那边直到把食物给我们。在服务员下单后,后台开始制作,这样的模式在编程领域就叫做异步处理。由于准备食物的时间远远大于点单、收款的时间,这样一来服务员的效率就大大地提升了。我们也没有影响到下一个顾客的点单,同样放到编程领域,这样就没有造成阻塞。当后厨准备好食物,就会通过服务台叫号。此时我们过去领取的这个动作,便叫做回调(call back)。而这一系列的动作都是由一个个事件来推动的(点餐->下单->准备食物->领取食物),这个过程便是事件驱动的。

那么回到程序上,我们可以通过下面的读取文件的例子来体验一下。

 var fs = require('fs')
 var path = require('path')
    
 console.info(`STEP1 : READ FILE`)
    
  fs.readFile(path.join(__dirname, `./1.2.1 hello.txt`), function (err, data) {
     console.log(`STEP2: SHOW DATA: ${data}`)
 })
    
 console.info(`STEP3 : READ END`)

这个程序的代码我们可以先不管,做的事情十分简单。就是从一个叫 hello.txt 的文件中读取内容然后显示出来。在读取的前后我们打印一下步骤提示。执行的结果如下(执行在下一章会讲)

1.2-1.png

肯定有同学会觉得奇怪,为什么 STEP3 会在 STEP2 的上面呢?这是因为文件读取是个比较费时的I/O操作,这时系统就会把它调到后台去做,优先执行后面的步骤。等读取操作完成后,再通知程序将结果返回给我们。整个流程是不是和前面的点餐一样呢?

异步I/O的方式虽然提高了性能,但是在编写代码时确实违反人的直觉的。并且在业务上需要顺序执行时,就只能一层嵌套一层,多了的话就会变成传说中的“回调地狱”。当然,我们并不用过多担心,因为 ES6 的 Promise、async/await 都可以帮我们解决这个问题。这些会在之后的章节中讲到。

  // 传说中的回调地狱
    ...
    oneFunction(param, function(err, data){
      // do something
      anotherFunction(data, function(err, data2){
        // do something
        anotherFunction2(data2, function(err, data3){
          // do something
          anotherFunction3(data3, function(err, data4){
            // this is call back hell
            ...
          })
        })
      })
    })
    ...

参考资料

1. Node.js 官网: https://nodejs.org/zh-cn/
2. NPM 官网: https://www.npmjs.com/
3. 《Node.js开发指南》 BYVoid 著


本教程图文或视频等内容版权归侠课岛所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发布或发表。

评价

18

本课评分:
  •     非常好
难易程度:
  •     适中的
|
教程
粉丝
主页

签到有礼

已签到2天,连续签到7天即可领取7天全站VIP

  • 1
    +2 金币
  • 2
    +3 金币
  • 3
    +5 金币
  • 6
    +7 金币
  • 5
    +6 金币
  • 4
    暖心福利
    自选分类VIP ×1天
  • 7
    惊喜大礼

    自选分类VIP ×3天 +20金币
  • 持续签到 +8 金币

金币可以用来做什么?