NodeJS 简介

NodeJS 简介

  • Node.js 简介
    • Node.js 示例程序
  • 链接

Node.js 简介

Node.js 是一款开源的跨平台 JavaScript 运行时环境,可以说是各类项目的热门之选!具备如下的特点:

  • Node.js 借助谷歌浏览器的核心 —— V8 JavaScript 引擎1(V8 引擎独立于浏览器),从而具备卓越的性能。
  • Node.js 应用程序以单进程模式运行,不会为每个请求额外创建新线程。其标准库提供了一系列异步 I/O 原语,有效避免 JavaScript 代码出现阻塞。通常,Node.js 中的库多采用非阻塞范式2编写,阻塞行为比较少见。
  • 当 Node.js 执行输入 / 输出操作,如从网络读取数据、访问数据库或文件系统时,它不会阻塞线程,避免浪费 CPU 周期等待响应。而是在响应返回时,迅速恢复操作。
  • Node.js 能使单台服务器轻松处理数千个并发连接,且无需承担管理线程并发的重负,毕竟管理线程并发极易引发严重错误。
  • 对于数百万为浏览器编写 JavaScript 的前端开发者而言,Node.js 优势显著。他们如今不仅能编写客户端代码,还能编写服务器端代码,无需学习全新的编程语言。
  • 在 Node.js 中,运用新的 ECMAScript3 标准毫无阻碍。开发者无需等待所有用户更新浏览器,只需更改 Node.js 版本,就能自主选择使用的 ECMAScript 版本,还可通过特定标志运行 Node.js 来启用特定的实验性功能。

Node.js 示例程序

Node.js 通常以一个 Web 服务器作为示例 “Hello World”:

  • CJS
const { createServer } = require('node:http');

const hostname = '127.0.0.1';
const port = 3000;

const server = createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
  • MJS
import { createServer } from 'node:http';

const hostname = '127.0.0.1';
const port = 3000;

const server = createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

要运行此代码片段4,需将其保存为 server.js 文件,并在终端中运行 node server.js 命令。如果使用代码的 mjs5 版本,则应将其保存为server.mjs 文件,并在终端中运行 node server.mjs

CJS 和 MJS的区别:CJS(CommonJS)和 MJS(ES Modules)是 JavaScript 不同的模块系统。语法上,CJS 用require()导入、module.exports或exports导出,导入可动态执行;MJS 用import和export,导入需静态置于文件顶部。适用环境方面,CJS 源于服务器端,适合同步加载;MJS 为标准模块系统,支持浏览器和 Node.js,利于跨环境使用。加载机制上,CJS 同步加载,会阻塞后续代码执行;MJS 异步加载,不阻塞主线程。缓存机制二者虽都有,但 MJS 因静态特性管理更规范。此外,CJS 默认非严格模式,MJS 默认开启严格模式。

CJS(CommonJS)出现是因早期 JavaScript 在服务器端编程时缺乏有效的模块化方式,其同步加载机制契合服务器端本地文件系统的模块加载需求,且能将代码拆分成独立模块,提升代码的可维护性与复用性;而 MJS(ES Modules)诞生是为实现 JavaScript 模块规范的标准化,解决 CommonJS 在跨环境兼容性上的不足,其静态导入语法便于代码的静态分析和优化,异步加载机制也更适配现代复杂 Web 应用在浏览器环境下的需求。

此代码首先引入 Node.js 的 http 模块。

Node.js 有一个很棒的标准库,包含了对网络的一流支持。

httpcreateServer() 方法创建并返回一个新的 HTTP 服务。

服务器被配置为在指定的端口与主机名上进行监听。一旦服务器准备就绪,回调函数便会被触发调用,此时会通知我们服务器已处于运行状态。

每当接收到新的请求时,request 事件就会被调用,并提供两个对象:一个是请求(http.IncomingMessage 对象),另一个是响应(http.ServerResponse 对象)。

这两个对象在处理 HTTP 调用的过程中起着关键作用。前者提供了请求的详细信息。在这个简易示例里,这些信息暂未被使用,在实际应用中,可以通过它访问请求头和请求数据。

后者则用于向调用者返回数据。

示例程序中,使用如下代码作为相应代码:

res.statusCode = 200;

statusCode 属性设置为 200,以表示成功响应。

设置 Content-Type 头部:

res.setHeader('Content-Type', 'text/plain');

并且关闭响应,将内容作为参数传入end()接口:

res.end('Hello World\n');

链接

  • Introduction to Node.js

  1. V8 是谷歌开发的开源 JavaScript 引擎,它被广泛应用于 Chrome 浏览器以及 Node.js 等运行环境中。其采用了 JIT(即时编译)技术,将 JavaScript 代码直接编译为高效的机器码,同时利用隐藏类(Hidden Classes)等技术优化对象访问,配合分代垃圾回收机制,极大提升内存管理效率,能让 JavaScript 代码以接近原生代码的速度运行,显著增强了网页和应用的性能表现,为用户带来流畅的交互体验。 ↩︎

  2. 非阻塞范式是一种在编程和系统设计中广泛应用的模式,它允许程序在执行某个操作时,不会因为该操作的执行而阻塞后续代码的执行,而是在操作完成后通过回调函数、事件监听或其他机制来通知程序进行后续处理,从而提高系统的并发性和资源利用率,使得程序能够同时处理多个任务,避免了因等待某个操作完成而造成的资源浪费和性能瓶颈,尤其适用于处理大量 I/O 操作、网络请求或其他可能需要较长时间完成的任务的场景,如 Node.js 中的异步 I/O 操作就是基于非阻塞范式实现的,能让服务器高效地处理大量并发请求。 ↩︎

  3. ECMAScript 是由 ECMA 国际组织制定的一种标准化脚本语言规范,它为 JavaScript 等脚本语言提供了语法、类型、语句、关键字、保留字、操作符等方面的基础定义和规则,是 JavaScript 语言的核心和标准化依据,其版本不断更新迭代,如 ECMAScript 6(ES6)引入了诸如箭头函数、类、模块等许多新特性,极大地增强了语言的表达能力和开发效率,为开发者提供了更强大、更灵活的编程工具,推动了前端技术的发展,在 Web 开发、服务器端编程以及移动应用开发等众多领域都有着广泛的应用和重要的地位。 ↩︎

  4. CJS 即 CommonJS,是一种在 JavaScript 中广泛使用的模块规范,主要用于服务器端的 Node.js 环境,也可通过一些工具在浏览器环境中使用。它采用require()函数来引入模块,通过module.exports或exports对象来导出模块中的变量、函数等,其特点是模块加载是同步的,在服务器端能方便地实现代码的模块化组织和复用,使得开发者可以将复杂的应用程序拆分成多个功能明确的模块,每个模块都能独立开发、维护和测试,是 Node.js 生态系统中模块管理的基础,对 JavaScript 在服务器端的发展和应用起到了重要的推动作用。 ↩︎

  5. MJS 通常指的是使用 ECMAScript 模块规范的 JavaScript 文件,其文件扩展名为.mjs。它是 JavaScript 模块化的一种实现方式,允许开发者将代码分割为多个相互独立的模块,每个模块都可以拥有自己的作用域、导入和导出功能,通过import和export语句实现模块间的依赖管理和代码复用,使得代码结构更加清晰、易于维护,并且符合现代 JavaScript 的开发规范,在 Node.js 以及支持原生 ES 模块的浏览器等环境中都能很好地发挥作用,是构建大型 JavaScript 应用程序的重要工具。 ↩︎

你可能感兴趣的:(VS,Code,软件架构,node.js,vscode)