Node.js概述

许都博客 2021-06-15 21:36:04
JS node node.js 概述


最近几年,Web 领域出现了一个全新的 JavaScript 开发框架——Node.js。该框架一经问世,便以其独特的优势得到了广大开发人员的关注。以下主要从什么是 Node.js 框架,使用 Node.js 框架能够解决什么问题,为什么要用 Node.js 框架,在哪些场合下应该考虑使用 Node.js 来展开概述。

一、什么是 Node.js 框架

官网介绍:“Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。”。

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

二、使用 Node.js 框架能够解决什么问题

Node.js 的首要目标是提供一种简单的、用于创建高性能服务器及可在该服务器中运行的各种应用程序的开发工具。在 Java、php 或 ASP.NET 等服务器端语言中,为每一个客户端连接创建一个新的线程,而每一个线程需要耗费大约 2MB 的内存。也就是说,理论上,具有 8GB 内存的服务器可以同时连接的最大用户数为 4000 个左右。要让 Web 应用程序支持更多的用户,就需要增加服务器的数量,而 Web 应用程序的硬件成本也就随之增加了。不仅如此,在技术层面也会因此产生一些潜在的问题。例如,由于同一个用户的不同客户端请求可能会被不同的服务器处理,因此必须在所有的服务器之间共享所以的资源。由此可见,在一个 Web 应用程序中,一个主要的瓶颈是服务器所支持的最大同时连接用户量。

Node.js 修改了客户端到服务器端的连接方法,解决了这个问题。因为它并不为每个客户端连接创建一个新的线程,而是为每个客户端连接触发一个在 Node.js 内部进行处理的事件。因此,如果使用 Node.js,可以同时处理多达几万个用户的客户端连接。因此,当需要使 Web 应用程序能够支持大量用户的并发连接的时候,我们应该考虑使用 Node.js。

三、为什么要用 Node.js 框架

3.1 实现高性能服务器

严格地说,Node.js 是一个开发各种 Web 服务器的开发工具。在 Node.js 服务器中,运行的是高性能 V8 JavaScript 脚本语言,该语言是一种可以运行在服务器端的 JavaScript 脚本语言。

V8 JavaScript 脚本语言是一种被 V8 JavaScript 引擎所解析并执行的脚本语言。V8 JavaScript 引擎由 Google 公司使用 C++ 语言开发的一种高性能 JavaScript 引擎,该引擎并不局限于在浏览器中运行。Node.js 将其转用在了服务器中,并且为其提供了许多附加的具有各种不同用途的 API。例如,在一个服务器中,经常需要处理各种二进制数据。在 JavaScript 脚本语言中,只具有非常有限的对二进制数据的处理能力,而 Node.js 所提供的 buffer 类则提供了丰富的对二进制数据的处理能力。

另外,在 V8 JavaScript 引擎内部使用一种全新的编译技术。这意味着开发者编写的高端的 JavaScript 脚本代码与开发者编写的低端的 C 语言具有非常相近的执行效率,这也是 Node.js 服务器可以提供的一个重要特性。

3.2 非阻塞型 I/O 及事件环机制

为了实现高性能,Node.js 中采用了以下两种机制:

  • 非阻塞型 I/O
  • 事件环

JavaScript 脚本语言的一个特征是它只支持单线程。V8 JavaScript 脚本语言也是如此,因此不需要担心它会造成死锁现象。但是与客户端脚本语言不同的是,Node.js 中为 V8 JavaScript 脚本语言提供了非阻塞型 I/O 机制。例如,当在访问数据库取得搜索结果的时候,在开始访问数据库之后、数据库返回结果之前,存在一段等待时间。在传统的单线程处理机制中,在执行了访问数据库的代码之后,整个线程都将暂停下来,等待数据库返回查询结果之后才能继续执行其后面的代码。也就是说,I/O 操作阻塞了代码的执行,极大地降低了程序的执行效率。由于 Node.js 中采用了非阻塞型 I/O 机制,因此在执行了访问数据库的代码之后将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中执行,从而提高了程序的执行效率。

另外,在 Node.js 中,虽然不具有因为用户鼠标单击按钮或输入文字等操作而触发的事件,但是具有由于客户端请求建立连接、通过此连接而接收客户端提交数据、停止客户端提交数据的接收等行为而触发的事件。在 Node.js 中,在一个时刻只能执行一个事件回调函数,但是在执行一个事件回调函数的中途可以转而处理其他事件(包括触发新的事件、声明该事件的回调函数等),然后返回继续执行原事件回调函数,这种处理机制称为事件环机制。

四、在哪些场合下应该考虑使用 Node.js

当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,我们应该考虑使用 Node.js 来进行改应用程序的开发。例如,我们可以开发聊天服务器、综合服务类网站或电子商务网站的服务器等。

4.1 聊天服务器

在一个具有很高人气的聊天应用程序中,在同一时刻通常可能存在着大量用户与聊天服务器之间的并发连接,而服务器端本身并不存在非常复杂的处理。

4.2 综合服务类网站或电子商务网站的服务器

在这类网站的服务器端,往往可能在每秒钟内接收到多达上千条数据并且需要将这些数据书写到数据库中,Node.js 是解决这类问题的关键。Node.js 将通过其队列机制将这些数据迅速书写在缓冲区中,然后再通过每一个单独的处理从缓冲区中取出这些数据并将其书写到数据库中。如果使用其他服务器(如 Apache 服务器或 tomcat 服务器)的话,由于这些服务器采用的均为阻塞型 I/O 机制,因此需要为每条数据(到数据库中)的写入等待一段时间。如果使用 Node.js 服务器,由于其采用的是非阻塞型 I/O 机制,因此可以同时实现这些数据到数据库中的写入,而不必再为每条数据的写入等待一段时间。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[许都博客]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1835466

  1. HTML + CSS + JavaScript to achieve cool Fireworks (cloud like particle text 3D opening)
  2. HTML + CSS + JavaScript realizes 520 advertising love tree (including music), which is necessary for programmers to express themselves
  3. Solve the problem of Web front-end deployment server (it can be deployed online without a server)
  4. HTML + CSS + JS make wedding countdown web page template (520 / Tanabata Valentine's Day / programmer advertisement)
  5. What else can driverless minibus do besides "Park connection"?
  6. Cloud native leads the era of all cloud development
  7. NRM mirror source management tool
  8. Bring it to you, flex Jiugong
  9. Lolstyle UI component development practice (II) -- button group component
  10. Deconstruction assignment in ES6
  11. Luo 2 peerless Tang clan was officially launched. The official gave a key point, and the broadcast time was implied
  12. 20初识前端HTML(1)
  13. 当新零售遇上 Serverless
  14. 20 initial knowledge of front-end HTML (1)
  15. When new retail meets serverless
  16. [golang] - go into go language lesson 5 type conversion
  17. [golang] - go into go language lesson 6 conditional expression
  18. HTML5(八)——SVG 之 path 详解
  19. HTML5 (8) -- detailed explanation of SVG path
  20. 需要开通VIP以后页面内容才能复制怎么办?控制台禁用javascript即可
  21. Web前端|CSS入门教程(超详细的CSS使用讲解,适合前端初学者)
  22. 实践积累 —— 用Vue3简单写一个单行横向滚动组件
  23. Serverless 全能选手,再下一城
  24. What if you need to open a VIP to copy the page content? Just disable JavaScript on the console
  25. Web front end | CSS introductory tutorial (super detailed CSS explanation, suitable for front-end beginners)
  26. Practice accumulation - write a single line horizontal scroll component simply with vue3
  27. Dili Reba is thin again. She looks elegant and high in a strapless hollow skirt, and her "palm waist" is beautiful to a new height
  28. Serverless all-round player, next city
  29. The difference between MySQL semi synchronous replication and lossless semi synchronous replication
  30. Vue表单设计器的终极解决方案
  31. The ultimate solution for Vue form designer
  32. Nginx从理论到实践超详细笔记
  33. Yu Shuxin's red backless swimsuit is split to the waist and tail, with a concave convex figure and excessive color matching, and his face is white to dazzling
  34. Nginx ultra detailed notes from theory to practice
  35. 【动画消消乐|CSS】086.炫酷水波浪Loading过渡动画
  36. typecho全站启用https
  37. CCTV has another popular employee. The off-site interpretation is very professional, and the appearance ability is no less than that of Wang Bingbing
  38. [animation Xiaole | CSS] 086. Cool water wave loading transition animation
  39. Enable HTTPS in Typecho
  40. 50天用JavaScript完成50个web项目,我学到了什么?
  41. 根据JavaScript中原生的XMLHttpRequest实现jQuery的Ajax
  42. What have I learned from completing 50 web projects with JavaScript in 50 days?
  43. "My neighbor doesn't grow up" has hit the whole network. There are countless horse music circles, and actor Zhou Xiaochuan has successfully made a circle
  44. 根据JavaScript中原生的XMLHttpRequest实现jQuery的Ajax
  45. Implement the Ajax of jQuery according to the native XMLHttpRequest in JavaScript
  46. Implement the Ajax of jQuery according to the native XMLHttpRequest in JavaScript
  47. 30 + women still wear less T-shirts and jeans. If they wear them like stars, they will lose weight
  48. 数栈技术分享前端篇:TS,看你哪里逃~
  49. Several stack technology sharing front end: TS, see where you escape~
  50. 舍弃Kong和Nginx,Apache APISIX 在趣链科技 BaaS 平台的落地实践
  51. Abandon the landing practice of Kong and nginx, Apache apisik on the baas platform of fun chain technology
  52. 浪迹天涯king教你用elementui做复杂的表格,去处理报表数据(合并表头,合并表体行和列)
  53. 前端HTML两万字图文大总结,快来看看你会多少!【️熬夜整理&建议收藏️】
  54. Wandering around the world king teaches you to use elementui to make complex tables and process report data (merge header, merge table body rows and columns)
  55. 路由刷新数据丢失 - vuex数据读取的问题
  56. Front end HTML 20000 word graphic summary, come and see how much you can【 Stay up late to sort out & suggestions]
  57. Route refresh data loss - vuex data reading problem
  58. Systemctl系统启动Nginx服务脚本
  59. Systemctl system startup nginx service script
  60. sleepless