Node.js入门之 - 初识Node.js

news2024/12/23 12:26:24

在这里插入图片描述

初识 Node.js

1. 起源

Node.js 起源于 2009 年,由 Ryan Dahl 开发,起初的目的是为了解决一些网络应用运行缓慢的问题。
在 Node.js 之前,一般会采用 LAMP(Linux + Apache + MySQL + PHP)或者 MEAN等技术栈开发 web 应用。这些技术通常会采用请求-响应模型:

  1. 客户端(浏览器)发送一个请求
  2. 请求被送到服务端(Apache 服务器)
  3. 服务端处理请求,读取数据(连接 MySQL 数据库)
  4. 返回响应给客户端

在这个过程中,发送请求和读取数据库等操作都需要等待,这会使 web 应用的性能表现不佳。Ryan Dahl 发现,JavaScript 实际上是一个非常轻量级的语言,而且 V8 引擎拥有优异的性能,所以他构想了在服务端使用 JavaScript 的想法,于是便诞生了Node.js 。

2.什么是Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量和,是一个开源和跨平台的 JavaScript 运行时环境。 它是几乎任何类型项目的流行工具!

3.Node.js 的主要功能:

  1. 事件驱动
    Node.js 基于事件驱动模型,当某个事件触发时,相应的事件处理函数(事件回调)就会被执行。
    这意味着 Node.js 会一直监听各种事件,当监听到事件时立即异步响应,而不会造成阻塞。这使得 Node.js 可以处理高并发的场景。

  2. 异步非阻塞 I/O
    Node.js 中的 I/O 操作(读写文件、网络请求等)都是非阻塞的,这意味着这些 I/O 操作会立即返回,而不会等待结果。 当这些操作完成时,Node.js 会将完成结果作为事件通知注册的事件处理函数。
    这样我们的代码就不需要等待 I/O 操作结果,从而不会阻塞,可以处理并发请求。

  3. 单线程
    Node.js 是单线程的,它只有一个事件循环来处理所有事件。
    单线程避免了多线程之间的上下文切换开销,使性能更高。但也意味着如果某个操作过长时间阻塞线程,会影响其他任务的执行。
    所以在 Node.js 中,最好采用非阻塞的异步编程方式,避免长时间的计算任务阻塞线程,要充分利用 Node.js 的高性能,关键就是采用非阻塞的异步编程方式,避免长时间的计算任务阻塞线程。

  4. 高性能模块
    Node.js 的模块很大一部分都使用 C/C++ 编写,并通过 libuv 库并行执行。这使得 Node.js 拥有快速的模块加载速度和执行效率。
    常用的原生模块有:

  • fs:文件系统模块
  • http:HTTP 服务器和客户端模块
  • os:提供操作系统相关功能的模块
  • path:处理文件路径的模块
  • etc.
  1. V8 引擎
    Node.js 运行在 V8 引擎之上,V8 是 Google 开发的开源高性能 JavaScript 引擎。它带来以下优点:
  • 快速的执行速度,性能优异
  • 可以运行在资源受限设备上
  • 支持即时编译(JIT)

此外Node.js 还常用于:

  • web 服务器后端开发
  • API 服务开发
  • 实时服务开发(聊天室、实时评论等)
  • 命令行工具开发
    它天生适合构建轻量高效的服务端程序。许多知名企业也都广泛使用 Node.js,如 Netflix、Uber、PayPal 等。
    Node.js 拥有世界最大的包生态 - npm,有大量可复用的第三方包,可以极大降低开发难度。
    Node.js 支持的平台包括:
  • Windows
  • Linux
  • macOS
  • 等等
    所以我们可以利用 Node.js 编写跨平台应用。

4.应用前景

Node.js 作为一个流行的后端开发框架,有非常广阔的应用前景。我们可以从以下几个方面来深度剖析:

  1. Web 后端开发
    Node.js 非常适合开发 web 服务器后端和 API 接口,许多大公司的 web 服务都是采用 Node.js 栈开发的,如 PayPal、Netflix、Uber、eBay等。
    随着前端技术(Vue、React 等)不断发展,前后端分离架构逐渐流行,Node.js 作为优秀的后端编程语言,必将受益于此,拥有广阔的前景。
  2. 渐进式网络应用(PWA)
    PWA 是近年来流行的一种网络应用模式,Node.js 非常适合开发 PWA 应用。许多知名 PWA 应用也是基于 Node.js 栈开发的,如 VS Code、Skype 等。
    PWA 将是 web 应用的未来发展方向,这也为 Node.js 的应用前景带来一定的推动作用。
  3. 微服务
    微服务是一种流行的架构风格,Node.js 本身具有轻量高效的特点,非常适合构建微服务。许多公司都会采用 Node.js 对既有的架构进行微服务改造。
    微服务一定会是未来的主流架构模式,这也必将促进 Node.js 的更广泛应用。
  4. 物联网与 Monroe 设备
    Node.js 轻量级且跨平台的特性也使其非常适合在物联网和嵌入式设备上运行。许多公司会选择在这些设备上采用 JavaScript 或 Node.js 来实现业务逻辑。
    随着 5G 网络与 AIoT(人工智能物联网)的发展,这一领域也将是 Node.js 应用的重要方向。
  5. 桌面应用与 CLI 工具
    Node.js 也常被用于开发桌面应用、GUI 和各种命令行工具(CLI)。一些知名的 VS Code、Gitpod 等也是采用 Node.js + Electron 开发的桌面应用。
    此外,众多的前端工具(Vue CLI、Angular CLI 等)也基于 Node.js 实现。这说明 Node.js 在这一领域也拥有广阔的应用前景。

5.优缺点

优点:
  1. 事件驱动和非阻塞 I/O 模型
    Node.js 的 I/O 操作是非阻塞的,采用事件驱动模型,这使其轻量高效,可以实现高并发。
  2. 单线程与高性能
    Node.js 是单线程的,没有线程上下文切换的开销,执行效率高。但也意味着不能利用多核 CPU,单个进程的性能有限。
  3. 丰富的模块生态
    Node.js 拥有 npm - 世界最大的包模块注册和管理平台,有非常丰富的第三方模块可供使用。
  4. 跨平台
    Node.js 可以在 Windows、Linux 和 macOS 等平台上运行,是真正的跨平台。
缺点:
  1. 不利于 CPU 密集型任务
    单线程模型不适合 CPU 密集型任务,容易造成线程阻塞。Node.js 更适合 I/O 密集型任务。
  2. 回调地狱
    大量的回调函数嵌套可能会导致"回调地狱",产生程序难以维护的情况。
  3. 版本管理困难
    npm 上的包更新太快,版本之间的变化可能会导致版本之间的兼容性问题,使版本管理和依赖变得困难。
  4. 缺乏标准
    Node.js 在企业级项目开发中,某些方面的标准还不够完善,在大规模项目中易出现问题,许多企业还是更倾向于采用 Java 等 Backend Framework。

结语

总之,随着 web 前后端分离、PWA、微服务架构的流行,以及 5G、AIoT 等技术的兴起,Node.js 将在 web 后端、移动互联网、企业应用和嵌入式设备等领域有非常广阔的应用前景。Node.js 的跨平台与轻量级特点,也使其非常适合构建桌面应用与各种工具软件。可以说,Node.js 是一门具有长期生命力和广阔前景的技术,值得我们深入学习与长期投入。虽然Node.js 具有事件驱动高效、单线程高性能、丰富生态和跨平台等优点,适合于 I/O 密集型任务和实时应用。但其单线程模型不适合 CPU 密集任务,且生态管理难度较大。对于大型企业项目来说, Node.js 可能还缺乏相应的标准和成熟度。要充分发挥Node.js 的优势,关键是选择适合的场景,通过异步非阻塞的方式编程,并且管理好版本和依赖。

Node.js 是一个相当广阔的技术领域,要深入精通还需不断学习与积累,希望我可以和大家一起进步共同学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习 day19(使用python和np实现前向传播)

烤咖啡豆模型 使用一维数组来表示这些向量和参数,所以只有一个方括号W1_1:表示layer 1的第一个神经元的WZ1_1:表示 W1_1和输入X之间的点积,再与b1_1相加a1_1:表示应用Z1_1的sigmoid函数a1:表示把a1_1&…

Explain和索引基本优化示例

一、Explain介绍 1、Explain不用版本的使用 在mysql8.0版本只能用explain,已经弃用了explain extended和explain partitions,用了都会出现语法问题,只能用explain;在explain语句后面加上show warnings;可以查看mysql优化后的语句…

市场·分析

寡头垄断市场 完全竞争市场 完全垄断 垄断竞争 博弈论与寡头竞争理论 寡头市场的特征: 少量的企业竞争策略互动纯寡头 -生产相同产品的企业 -市场上只有一个价格差异化寡头 -生产差异化产品的企业 -价格成为决策变量 博弈论基础 博弈论模型描述个体在知道他所采…

用flex布局实现一个流程设计器

最近接到一个需求,要做一个流程设计的功能,大概长下面这个样子: 支持添加、编辑和删除节点,节点只有四种类型:开始节点、普通节点、分支节点、结束节点。 因为每个节点只有一个进和一个出,且节点不需要支持…

一文扫盲 OA、CRM、ERP、MES、HRM、SCM、WMS、KMS 等B端系统

OA系统 (Office Automation System,办公自动化系统):OA系统是一种用于协调、管理和优化办公流程的软件系统,包括电子邮件、日程安排、文档管理、工作流程管理等功能模块,帮助企业提高工作效率和管理水平。…

C#程序的内存映射文件解析

一、背景 前段时间训练营里有朋友问 内存映射文件 是怎么玩的?说实话这东西理论我相信很多朋友都知道,就是将文件映射到进程的虚拟地址,说起来很容易,那如何让大家眼见为实呢?可能会难倒很多人,所以这篇我…

《项目实战》构建SpringCloud alibaba项目

文章目录 1、概要2、整体架构流程2.1、技术结构组成部分 3、技术名词解释4、技术细节4.1、构建父工程4.1.1、选择构建Maven项目4.1.2、修改父工程文件4.1.3、修改父工程pom.xml配置4.1.3.1、添加springboot支持4.1.3.2、修改JDK版本、编码、springboot版本配置4.1.3.3、添加Spr…

自定义MaterialEditText

自定义MaterialEditText 日记 现在都不流行写博客了,因为这玩意都认为对于面试没啥用,我感觉很多事情不应该太功利。所谓博客还是更多的应该用来进行自己日常学习的归纳和总结,而不是去贪图所谓的面试加分。因为面试可能是一时的&#xff0…

Apple Vision Pro的价格并没有看起来那么疯狂

When Apple announced the price of their groundbreaking new mixed reality headset, the Vision Pro, jaws around the world collectively dropped. At a hefty $3,499, it’s not for everyone, but is it really so unreasonable if we take a closer look? 当苹果宣布其…

CSS特性、背景属性和显示模式

CSS特性 CSS特性:化简代码 / 定位问题,并解决问题 继承性层叠性优先级 继承性 继承性:子级默认继承父级的文字控制属性。 注意:如果标签有默认文字样式会继承失败。 例如:a 标签的颜色、标题的字体大小。 层叠性 …

前端 sentry 接入钉钉机器人

sentry 接入钉钉机器人 打开钉钉,添加机器人 此时会得到Webhook地址,记录一下,以后会用到 sentry 端设置 看看这里有木有钉钉插件,有的话开启插件,并配置这里我说一下没有的情况下,我们何如设置 这里需要填写webhook url 这个的url 需要是一个公网的地址,不可以是本地…

HID协议学习

HID协议学习 0. 文档资料 USB_HID协议中文版_USB接口HID设备_AUJsRmB9kg.pdf HID报告描述符精细说明_mgCxM8_ci9.pdf hut1_22_U3cvnwn_ZZ.pdf 1. 基本概念 HID协议是一种基于USB的通讯协议,用于在计算机和输入设备之间进行数据传输。HID协议定义了标准的数据格…

动态规划算法(子数组专题1)

动态规划算法专辑之子数组问题(1) 本专栏将从状态定义、状态转移方程、初始化、填表顺序、返回值这五大细节来详细讲述动态规划的算法的解题思路及代码实现一、什么是子数组 子数组:子数组是数组中的一个连续部分的集合,子序列可…

Python+Selenium UI自动化测试环境搭建及使用

目录 一、什么是Selenium ? 二、Selenium环境搭建 三、WebDriver API 总结: 一、什么是Selenium ? Selenium 是一个浏览器自动化测试框架,它主要用于web应用程序的自动化测试,其主要特点如下:开源、免费…

缅怀(上次写博客是2009年10月24日)

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Nucleo-F411RE (STM32F411)LL库体验 3 - 滴嗒定时器的配置

Nucleo-F411RE (STM32F411)LL库体验 3 - 滴嗒定时器的配置 1、LL库延时 LL库初始化时钟的时候调用了LL_Init1msTick(100000000)函数,这个函数其实就是初始化了系统的滴答定时器。 LL_InitTick原型如下: load值 sysclk/1000&a…

RocketMQ架构和工作流程

一.MQ概述 1.简介 MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。 2.用途 限流削峰 MQ可以将系统的超量请求…

接口测试工具怎么选?这个技巧你一定要知道

目录 前言 一、易用性 二、灵活性 三、可靠性 测试用例 接口测试数据 自动化测试 测试报告 总结 前言 当今软性开发中,接口测试已成为必不可少的一环,该如何选择接口测试工具?选择合适的接口测试工具对于程房员来说非常重要,因为…

SQL死锁

前言: 使用脚本刷数据时,开多线程经常遇到死锁现象,面试也经常问到,故开此篇 日志错误示例: ### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock fo…

Tplink企业版开启ipv6

Tplink企业版开启ipv6 1、登录路由器 路由器的默认地址一般为:192.168.0.1,登录成功后如下图: 2、WAN设置ipv6 wan是设置启用ipv6模式,如果这里无法启用,主要是因为“接口模式”中启用了桥接模式,可以关闭…