Node.js的特点和应用场景介绍

 更新时间:2014年11月04日 11:44:59   投稿:junjie  
这篇文章主要介绍了Node.js的特点和应用场景介绍,本文讲解了Node.js的异步I/O、 事件循环与回调函数、单线程、 跨平台等特性,然后总结了它的使用场景,需要的朋友可以参考下

Node.js应该是当今最火热的技术之一。本文主要介绍Node.js的特点及应用场景。

Node.js是一个基于Chrome JavaScript运行时建立的一个平台,用来方便地搭建快速的 易于扩展的网络应用。Node.js借助事件驱动,非阻塞I/O模型变得轻量和高效,非常适合 运行在分布式设备的数据密集型实时应用。

1. 特点

1.1 异步I/O

所谓的异步I/O,是相对同步I/O而言的。程序执行过程中必然要进行很多I/O操作,如读写文件、输入输出、请求响应等等。通常来说,I/O操作是非常费时的。例如在传统的编程模式中,你要读一个几G的文件,整个线程都暂停下来,等待文件读完后继续执行。换言之,I/O操作阻塞了代码的执行,极大地降低了程序的效率。

关于异步I/O,其实对于前端工程师来说并不陌生,因为发起Ajax请求就是最常见的一种“异步”调用。在Node中,以读取文件(读文件是一种耗时的I/O操作)为例,它与发起Ajax请求的写法很像:

复制代码 代码如下:

var fs = require('fs');
fs.readFile('/path', function(err, file) {
    console.log('读取文件完成');
});
console.log('开始读取文件');

上述代码在调用fs.readFile后,后续代码是被立即执行的,“读取文件完成”的时刻是无法预知的。当线程遇到I/O操作时不会以阻塞的方式等待I/O操作结束,而只是将I/O请求发送给操作系统,继续执行后续语句。当操作系统完成I/O操作时以事件的形式通知执行I/O操作的线程,线程会在特定时间处理这个事件。

1.2 事件循环与回调函数

所谓事件循环是指Node会把所有的异步操作使用事件机制解决,有个线程在不断地循环检测事件队列。事件循环会检查事件队列中有没有未处理的事件,直到程序结束。事件的编程方式具有轻量级、松耦合、只关注事务点等优势,但是在多个异步任务的场景下,事件与事件之间各自独立,如何协作是一个问题。在Javascript中,回调函数无处不在,回调函数是最好的接受异步调用返回数据的方式。

1.3 单线程

Node保持了JS在浏览器中单线程的特点。单线程的最大好处是不用像多线程编程那样出处在意状态的同步问题,没有死锁的存在,也没有线程上下文切换的开销。单线程也有其弱点,主要表现在三方面:无法利用多核CPU;错误会引起整个应用退出,应用的健壮性值得考研;大量计算会占用CPU导致无法继续调用异步I/O。

为了解决上述问题,Node采用了与HTML5 Web Workers相同的思路,使用child_process来解决但单线程中大计算量的问题。通过将计算分发到各个子进程,可以将大量计算分解掉,然后再通过进程之间的事件消息来传递结果。

1.4 跨平台

Node是跨平台的,即同样的一套JS代码都可以部署运行在Windows、Linux、OSX等平台。这主要得益于Node在操作系统与Node上层模块系统之间构建了一层平台层架构libuv。

2. 应用场景

1)、实时应用:如在线聊天,实时通知推送等等(如socket.io
2)、分布式应用:通过高效的并行I/O使用已有的数据
3)、工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形界面应用程序
4)、游戏类应用:游戏领域对实时和并发有很高的要求(如网易的pomelo框架)
5)、利用稳定接口提升Web渲染能力
6)、前后端编程语言环境统一:前端开发人员可以非常快速地切入到服务器端的开发(如著名的纯Javascript全栈式MEAN架构)

相关文章

  • nodejs实现获取某宝商品分类

    nodejs实现获取某宝商品分类

    这篇文章主要介绍了nodejs实现获取某宝商品分类,十分的简单实用,进入后台直接打开控制台,把代码粘进去运行就OK了,有需要的小伙伴可以参考下。
    2015-05-05
  • 详谈Node.js之操作文件系统

    详谈Node.js之操作文件系统

    下面小编就为大家带来一篇详谈Node.js之操作文件系统。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • node基于puppeteer模拟登录抓取页面的实现

    node基于puppeteer模拟登录抓取页面的实现

    本篇文章主要介绍了node基于puppeteer模拟登录抓取页面的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)

    用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)

    这篇文章主要介绍了用纯Node.JS弹出Windows系统消息提示框实例(MessageBox),非常具有实用价值,需要的朋友可以参考下
    2017-05-05
  • node.js的http.createServer过程深入解析

    node.js的http.createServer过程深入解析

    这篇文章主要给大家介绍了关于node.js的http.createServer过程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • node.js WEB开发中图片验证码的实现方法

    node.js WEB开发中图片验证码的实现方法

    这篇文章主要介绍了node.js WEB开发中图片验证码的实现方法,使用ccap模块实现,需要的朋友可以参考下
    2014-06-06
  • node.js 中的require用法和import的区别解析

    node.js 中的require用法和import的区别解析

    在Node.js中,require是一个内置的函数,用于在当前模块中加载和缓存其他模块,这篇文章给大家介绍node.js 中的require用法和import的区别,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • Node.js中http模块和导出共享问题

    Node.js中http模块和导出共享问题

    这篇文章主要介绍了Node.js中http模块和导出共享,通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 web 服务器,从而对外提供 web 资源服务,本文给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • Nodejs开发grpc的实例代码

    Nodejs开发grpc的实例代码

    Nodejs开发grpc包含静态和动态两种代码生成方式,静态代码生成需要提前通过.proto文件编译生成JS源码,而动态代码生成则是在运行时指定IDL文件位置,实时生成源码,两者各有优缺点,本文给大家介绍Nodejs开发grpc的实例代码,感兴趣的朋友一起看看吧
    2024-10-10
  • 安装 node-Sass 报错的解决记录(三步解决法)

    安装 node-Sass 报错的解决记录(三步解决法)

    本文主要介绍了安装 node-Sass 报错的解决记录(三步解决法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05

最新评论