当前位置: 首页 > 编程笔记 >

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

丌官寒
2023-03-14
本文向大家介绍Node.js的特点和应用场景介绍,包括了Node.js的特点和应用场景介绍的使用技巧和注意事项,需要的朋友参考一下

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架构)

 类似资料:
  • 本文向大家介绍Lua教程(一):简介、优势和应用场景介绍,包括了Lua教程(一):简介、优势和应用场景介绍的使用技巧和注意事项,需要的朋友参考一下 一、简介:   Lua作为目前最为流行的、免费轻量级嵌入式脚本语言,在很多工业级的应用程序中被广泛应用,如Adobe's Photoshop,甚至是在一些著名的游戏程序中也被大量使用,如星际。不仅如此,由于Lua具备很多特殊的优点,如语法简单(基于过程

  • 本文档介绍 TiDB Data Migration (DM) 支持的主要应用场景及相关的使用建议。 非合库合表场景 将 TiDB 作为 MySQL/MariaDB 的从库 如需将 TiDB 作为上游 MySQL/MariaDB 的从库,即将上游实例中的所有数据先以全量形式导入到 TiDB,然后以增量形式实时复制后续变更到 TiDB,则简单按如下规则配置数据迁移任务即可: 指定 task-mode

  • 本文向大家介绍简述Node.js的适用场景?相关面试题,主要包含被问及简述Node.js的适用场景?时的应答技巧和注意事项,需要的朋友参考一下 IIO 密集而非计算密集的情景;高并发微数据(比如账号系统)的情景。特别是高并发,Node.js 的性能随并发数量的提高而衰减的现象相比其他 server 都有很明显的优势。 Bad Use Cases 1.CPU heavy apps (高CPU消耗的a

  • 本文向大家介绍浅谈Node.js 子进程与应用场景,包括了浅谈Node.js 子进程与应用场景的使用技巧和注意事项,需要的朋友参考一下 背景 由于ons(阿里云 RocketMQ 包)基于 C艹 封装而来,不支持单一进程内实例化多个生产者与消费者,为了解决这一问题,使用了 Node.js 子进程。 在使用的过程中碰到的坑 发布:进程管理关闭主进程后,子进程变为操作系统进程(pid 为 1) 几种解

  • 《Node.js in action》一书里说,Node.js 所针对的应用程序有一个专门的简称:DIRT。它表示数据密集型实时(data-intensive real-time)程序。因为 Node.js 自身在 I/O 上非常轻量,它善于将数据从一个管道混排或代理到另一个管道上,这能在处理大量请求时持有很多开放的连接,并且只占用一小部分内存。它的设计目标是保证响应能力,跟浏览器一样。 这话不假

  • 典型的批处理程序通常是从数据库、文件或队列中读取大量数据,然后通过某些方法处理数据,最后将处理好格式的数据写回库中。通常SpringBatch工作在离线模式下,不需要用户干预、就能自动进行基本的批处理迭代,进行类似事务方式的处理。批处理是大多数IT项目的一个组成部分,而Spring Batch是唯一能够提供健壮的企业级扩展性的批处理开源框架。 业务场景 定期提交批处理任务 并发批处理:并行执行任务