初识 NodeJS(基于 Chrome V8 引擎的 JavaScript 运行时环境)

news2025/1/6 19:25:42

初识 NodeJS(基于 Chrome V8 引擎的 JavaScript 运行时环境)

  • 参考
  • 描述
  • NodeJS
      • NodeJS 可以做什么?
      • 特点
      • 用武之地
      • 获取
      • 检测
      • 运行
  • JavaScript 运行时环境
      • JavsScript 引擎
      • 浏览器中的 JavaScript 运行时环境
          • Chrome 浏览器运行时环境
          • NodeJS 中的 JavaScript 运行时环境
      • NodeJS 与 浏览器的区别

参考

项目描述
NodeJS 中文文档http://dev.nodejs.cn/learn
Node.js 权威指南陆凌牛
哔哩哔哩黑马程序员Node.js全套入门教程

描述

项目描述
操作系统Windows 10 专业版

NodeJS

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它是跨平台和开源的。从广泛使用 JavaScript 的前端开发人员的角度来看,Node.js 应用程序带来了巨大的优势,即使用一种语言编写所有前端和后端项目的舒适性。

NodeJS 可以做什么?

Node.js 作为一个 JavaScript 的运行环境,仅仅提供了基础的 JavaScript 解析执行功能和一些内置 API(Application Process Interface,应用程序接口)。然而,有许多开发者凭借其精湛的技艺基于 Node.js 提供的这些基础功能开发了许多强大的工具和框架。所以学会了 Node.js ,可以让前端程序员胜任更多的工作和岗位:

基于 Express 框架快速构建 Web 应用;
基于 Electron 框架构建跨平台的桌面应用;
基于 restify 框架快速构建 API 接口项目。

像这样功能强大的工具还有很多,探索它们的过程将充满惊喜。

特点

  1. V8 引擎
    Google Chrome 的 V8 引擎是目前性能最为强劲的 JavaScript 引擎,而 NodeJS 是基于 V8 引擎开发的,这使得 NodeJS 的性能不会太差。另外,在 V8 引擎内部使用了一种全新的编译技术,这意味着在针对同一开发任务时,开发者编写的的 JavaScript 脚本代码与其编写的 C 语言代码具有非常相近的执行效率。

  2. 事件
    在一个 WEB 应用程序中,产生的主要瓶颈是服务器所支持的最大同时连接用户量。
    NodeJS 修改了客户端到服务器端的连接方式,大大提高了最大同时连接的用户量。NodeJS 并不为每一个客户端创建一个新的线程,而是为每个客户端连接触发一个在 NodeJS 内部进行处理的事件。使用事件而不是线程大大减少了单个客户使用的服务器资源,因此可以同时连接更多的用户。

  3. 非阻塞 I/O(Input / Output)
    JavaScript 的一个特征是它只支持单线程,即使 NodeJS 中运行的 JavaScript 也是如此。但与客户端脚本语言不同的是,NodeJS 为 JavaScript 提供了非阻塞 I/O 机制。
    I/O 阻塞会导致在进行 I/O 操作时,CPU 无法得到充分的利用(I/O 操作从存储介质中获取或存放数据,此过程中的大部分时间 CPU 都处于空闲状态),极大的降低了程序的执行效率。
    NodeJS 的非阻塞机制允许 JavaScript 在进行 I/O 操作时执行后续的代码,在 I/O 操作结束时将触发事件,NodeJS 将捕获该事件并执行该事件对应的事件处理函数。在非阻塞 I/O 中,CPU 时刻处于忙碌状态,提升了程序的执行效率。

  4. 事件环机制
    NodeJS 中,在一个时刻仅能支持一个事件回调函数,但是在执行一个事件回调函数的中途可以转而去处理其他事件,然后返回继续执行原事件的回调函数,这种处理机制称为事件环机制。

  5. 死锁
    由于 NodeJS 仅能使用单线程,所以不用担心由多线程引发的死锁问题。

  6. 兼容性
    在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为你不必等待所有用户更新他们的浏览器,你负责通过更改 Node.js 版本来决定使用哪个 ECMAScript 版本,你还可以通过运行带有标志的 Node.js 来启用特定的实验性功能。

  7. 生态
    npm 以其简单的结构帮助 Node.js 生态系统蓬勃发展,现在 npm 仓库托管了超过 1,000,000 个开源包,你可以自由使用。

用武之地

NodeJS 适合用于构建 I/O 密集型 的 WEB 应用程序,不适用于 计算密集型任务。NodeJS 的非阻塞机制使其即使仅能使用单个线程但仍能应对高并发量的场景,但也正是因为其仅能使用单个线程,无法充分利用多核 CPU 的带来的性能优势,所以其不适用于 计算密集型 的 WEB 应用程序。

获取

你将前往 NodeJS 官网 来获取 NodeJS 的安装包程序。

如果你将使用 NodeJS 开发企业级应用,推荐使用 LTS(Long Time Support,长期支持版),该版本的安全性、稳定性等特性相比最新版一般更具有优势。
如果你期望体验到 NodeJS 的最新特效,那么推荐你使用最新版本。

安装页面

检测

在 NodeJS 安装完成后,你可以在终端中输入如下命令来判断 NodeJS 是否安装成功并查看安装的 NodeJS 的版本号。

node -v

或:

node --version

运行

如果你需要运行你实现的 NodeJS 代码,你需要切换到 NodeJS 代码所在的工作目录下(你也可以通过使用 JavaScript 文件所在的绝对路径来避免这一操作)并执行如下命令以运行 NodeJS 代码:

node <含有 NodeJS 代码的 JavaScript 文件> 

JavaScript 运行时环境

运行时环境是指代码正常运行所需的必要环境。

JavsScript 引擎

JavaScript 解析引擎简写为 JavaScript 引擎,JavaScript 引擎用于对 JavaScript 的解析与执行。
V8 引擎是由 Google 公司使用 C++ 开发的一种高性能的 JavaScript 引擎,而 NodeJS 的运行环境是基于 Chrome 开发的。

浏览器中的 JavaScript 运行时环境

浏览器中的 JavaScript 运行时环境由浏览器提供的内置 API(WEB API)及 JavaScript 解析引擎组成。

Chrome 浏览器运行时环境

Chrome 中的 JavaScript 运行时环境由由其提供的内置 API(WEB API)及 JavaScript 解析引擎 V8 组成。
Chrome 浏览器的运行时环境

其中:

  1. Chorme 提供的 JavaScript 解析引擎 V8 负责解析和执行 JavaScript 代码。
  2. 内置 API 是由运行环境(Chrome 浏览器)提供的编程接口。
NodeJS 中的 JavaScript 运行时环境

NodeJS 运行时环境

NodeJS 与 浏览器的区别

浏览器是 JavaScript 的前端运行环境,而 NodeJS 则是 JavaScript 的后端运行环境。因此,JavaScript 在 NodeJS 运行环境中无法调用 DOM 和 BOM 等浏览器内置 API;同样的,JavaScript 在浏览器提供的 JavaScript 运行环境中也无法使用 NodeJS 提供的内置 API。

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

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

相关文章

【着色器实现海面效果_菲尼尔/Unlit/Transparent】

1.水体颜色 2.反射,水面波纹流动 3.折射、水底、水底透明度和折射 4.焦散,在水底接近岸边的水域 5.岸边泡沫,水花接近岸边的泡沫 6.水体运动,顶点动画 用灯光模式是Light Model :Unilt Render Type:Transparent 获取水面深度 利用这个节点,从深度图获取世界空间的位…

如何做流程图?这几个实用的制作流程图方法分享给你

说到流程图的制作&#xff0c;相信大家都并不陌生&#xff0c;在日常的工作和学习中&#xff0c;我们都会根据需求接触到各种各样的流程图&#xff0c;有时还要自己动手绘制流程图并使用&#xff0c;但你是否会因为不会绘制流程图而感到苦恼呢&#xff1f;没关系&#xff0c;今…

vue中利用ref实现更灵活的子向父传值

目录前言一&#xff0c;基础代码二&#xff0c;层次递进的讲解用法2.1 给子组件设置ref2.2 自定义事件2.3 给子组件设置一个自定义事件三&#xff0c;灵活性四&#xff0c;注意后记前言 目前我们熟知的子向父传值有两种方式&#xff1a; 一种是在父组件中定义函数&#xff0c;…

【AI】Windows配置GPU Cuda驱动和Pytorch框架

目录 1、Cuda驱动安装 1.1 查看显卡硬件 1.2 查看cuda版本 2、Annaconda python环境准备 2.1 创建pytorch_gpu 2.2 查看python版本 3、Pytorch和torchVsion软件安装 4、验证测试 在进行AI项目开发的时候&#xff0c;经常要在GPU环境中运行代码&#xff0c;对于没有配置…

动手深度学习-pytorch线性代数

标量简单操作长度向量简单操作长度其他操作矩阵简单操作乘法&#xff08;矩阵*向量&#xff09;乘法&#xff08;矩阵*矩阵&#xff09;范数取决于如何衡量b和c的长度常见范数矩阵范数&#xff1a;最小的满足的上面公式的值Frobenius范数特殊矩阵对称和反对称正定正交矩阵置换矩…

Solidity 中的数学(第 4 部分:复利)

本文是关于在 Solidity 中进行数学运算的系列文章中的第四篇。这次的主题是&#xff1a;复利。 介绍 在我们之前的文章中&#xff0c;我们讨论了百分比以及它们是如何在 Solidity 中计算的。在金融数学中&#xff0c;百分比通常与贷款和存款支付的利息有关。在每个时间段结束时…

深度学习入门基础CNN系列——批归一化(Batch Normalization)和丢弃法(dropout)

想要入门深度学习的小伙伴们&#xff0c;可以了解下本博主的其它基础内容&#xff1a; &#x1f3e0;我的个人主页 &#x1f680;深度学习入门基础CNN系列——卷积计算 &#x1f31f;深度学习入门基础CNN系列——填充&#xff08;padding&#xff09;与步幅&#xff08;stride&…

CSS 搜索框

CSS 搜索框 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>搜索框</title><style type"text/css">* {margin: 0;padding: 0;}.search-container {margin: 50px;display: flex;width: 500px;height:…

rtthread pwm

1、配置PWM设备驱动相关宏定义 1.1 配置PWM和TIM设备驱动 在RT-Thread Settings 配置界面中&#xff0c;在设备驱动程序目录下勾选 HWTIMER 和 PWM设备驱动程序&#xff0c;如下图所示&#xff1a; 配置完后在 rtconfig.h 中可以查看刚刚配置的 RT_USING_HWTIMER 和 RT_U…

Ribbon策略改变实现步骤(基于Eureka服务注册中心)

前言 Ribbon作为服务调用的作用&#xff0c;自带的默认负载均衡机制是轮询机制也就是轮流访问机制。当然有时候并不是业务上都需要这种机制&#xff0c;这时候就需要改变。 机制类型 RoundRobinRule 轮询 RandomRule 随机 RetryRule 先进行轮询策略获取服务&#xff0c;如…

本地怎么画最简单的监控图

当我们需要监测程序是否正常运行&#xff0c;或者需要观测程序运行是否平稳&#xff0c;或者需要知道特定场景下指标的状态时&#xff0c;那我们都需要将监控可视化。今天我简单记录下&#xff0c;本地是如何监控可视化~ 目录简单调试阶段——仅使用prometheus1.安装promethues…

【Redis】GEO(地理坐标)数据结构

【Redis】GEO(地理坐标)数据结构 文章目录【Redis】GEO(地理坐标)数据结构1. GEO简介1.1 GEO常用命令2. 实战示例2.1 场景介绍2.2 实战2.2.1 将店铺数据导入Redis2.2.2 根据地理坐标进行分页查询1. GEO简介 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2…

BFS判重和双向广搜

目录 一、前言 二、BFS判重 1、set 判重 2、字典判重 3、跳蚱蜢&#xff08;2017年省赛&#xff0c;lanqiaoOJ题号642&#xff09; &#xff08;1&#xff09;字典去重、用 list 实现队列 &#xff08;2&#xff09;set() 去重、用 list 实现队列 &#xff08;3&#x…

setDaemon python守护进程,队列通信子线程

使用setDaemon()和守护线程这方面知识有关&#xff0c; 比如在启动线程前设置thread.setDaemon(True)&#xff0c;就是设置该线程为守护线程&#xff0c;表示该线程是不重要的,进程退出时不需要等待这个线程执行完成。这样做的意义在于&#xff1a;避免子线程无限死循环&#x…

IK分词工具

https://code.google.com/archive/p/ik-analyzer/ IK Analyzer是一个开源的&#xff0c;基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始&#xff0c; IKAnalyzer已经推出了4个大版本。最初&#xff0c;它是以开源项目Luence为应用主体的&#xff0c;结合…

ruoyi-vue版本(八)登陆页面的验证码是咋实现的

目录1 需求2 配置类3 逻辑1 需求 我们打开若依项目的登陆页面&#xff0c;看到有一个验证码功能&#xff0c;点击一下这个验证码&#xff0c;还会进行变换验证码&#xff0c;那么这个逻辑是咋实现的&#xff1b; 我们刚进这个页面&#xff0c;其实就调用了一个接口&#xff1…

整理指针相关练习

这里收录的是相关指针的练习&#xff0c;主要针对的是指针与sizeof之间的练习&#xff0c;练完你对指针的理解将更进一层喔一维数组指针练习字符数组指针练习二维数组指针练习练习总结&#xff1a;指针笔试真题一维数组指针练习 一维数组相关练习&#xff0c;下面答案是多少呢…

负载均衡的在线OJ

文章目录1.项目宏观结构(1)三个模块(2)项目宏观结构(3)编写顺序2.compile_server(1)compiler.hpp(2)runner.hpp(3)compile_run.hpp(4)compile_server.cc(5)Makefile(6)temp(7)编译运行模块总结3.comm(1)util.hpp(2)log.hpp(3)httplib.h4.基于MVC结构的OJ服务设计(oj_server)(1)…

java访问控制符/导入2023019

访问控制符&#xff08;定义的时候不加访问控制符&#xff0c;默认的就是default&#xff09;&#xff1a; 1.private&#xff08;当前类访问权限&#xff09;&#xff1a;如果类里的一个成员&#xff08;包括成员变量、方法和构造器等&#xff09;使用private访问控制符来修饰…

Java——数组中第k个最大的元素

题目链接 leetcode在线oj题——数组中第k个最大的元素 题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂…