首页 > web前端 > js教程 > 正文

NodeJS 简介

Linda Hamilton
发布: 2024-10-24 06:22:02
原创
656 人浏览过

Node.js 是一个基于 Chrome 的 V8 JavaScript 引擎构建的强大且流行的 JavaScript 运行时。

特征

1) 事件驱动架构:
Node.js 使用事件驱动的非阻塞 I/O 模型

阻止操作:
程序执行暂停或等待,直到操作完成。在此期间,系统或线程无法执行其他任务。
阻塞操作通常是同步的,因为它们会停止执行以下代码直到完成

同步:
程序等待操作完成,然后再转到下一个任务。
前任。在 Node.js 中同步读取文件:

非阻塞操作:
程序不会等待操作完成。相反,它会继续执行其他任务,同时操作在后台继续进行。

异步:
程序可以在等待操作完成的同时执行其他任务。更复杂的是,需要处理异步结果的机制(例如回调、promise、async/await)。

事件循环
事件循环负责管理和执行异步操作的回调。

2) 异步和非阻塞:

事件循环是 Node.js 的核心组件,用于管理和协调异步操作的执行。

事件循环的组成部分:

调用堆栈:
调用堆栈跟踪当前正在执行的函数。它是一个堆栈数据结构,其中函数在调用时添加,在完成时删除。

回调队列:
该队列保存已完成并等待执行的异步操作(如 I/O 操作、计时器或网络请求)的回调。

事件队列:
与回调队列类似,它保存事件及其关联的回调。事件是指用户交互、计时器到期或网络响应等。

微任务队列(或下一个 Tick 队列):
该队列保存微任务,这些微任务通常是 Promise 及其 .then() 回调。微任务比回调具有更高的优先级,并且在事件队列之前进行处理。

计时器:
事件循环使用 setTimeout() 和 setInterval() 管理计时器。这些计划在指定的延迟后或定期间隔执行。

I/O 操作:
事件循环处理 I/O 操作,例如文件读取、网络请求和数据库查询。它允许 Node.js 异步处理这些操作,而不会阻塞主线程。

const fs = require('fs');

// Asynchronous file read
fs.readFile('file.txt', 'utf8', (err, data) => {
  console.log('File read complete:', data);
});

// Synchronous operation
console.log('This prints first');

// Timer
setTimeout(() => {
  console.log('Timeout executed');
}, 0);

console.log('This prints second');
登录后复制
登录后复制

执行顺序:

同步代码(console.log('This prints first') 和 console.log('This prints secondary'))首先运行,因为它被添加到调用堆栈中。

fs.readFile回调和setTimeout回调被添加到各自的队列(回调队列和定时器队列)中。

同步代码执行后,事件循环处理定时器队列并执行setTimeout回调。接下来,它处理回调队列并执行 fs.readFile 回调。

服务器创建

const fs = require('fs');

// Asynchronous file read
fs.readFile('file.txt', 'utf8', (err, data) => {
  console.log('File read complete:', data);
});

// Synchronous operation
console.log('This prints first');

// Timer
setTimeout(() => {
  console.log('Timeout executed');
}, 0);

console.log('This prints second');
登录后复制
登录后复制

Introduction to NodeJS

回调

回调是作为参数传递到另一个函数的函数,然后在外部函数内部调用该函数以完成某种例程或操作。

var http = require('http');

const server = http.createServer(function(req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
})

server.listen(8080, () => {
  console.log('Server running at http://127.0.0.1:8080/');
});

登录后复制

承诺

表示异步操作最终完成(或失败)及其结果值的对象。

function downloadFile(url, callback) {
    console.log(`Starting to download file from ${url}`);
    setTimeout(() => {
        console.log('File downloaded successfully');
        callback('File content');
    }, 2000); 
}

function processFile(content) {
    console.log(`Processing file with content: ${content}`);
}

downloadFile('http://example.com/file', processFile);
登录后复制

保持联系!
如果您喜欢这篇文章,请不要忘记在社交媒体上关注我以获取更多更新和见解:

推特: madhavganesan
Instagram:madhavganesan
领英: madhavganesan

以上是NodeJS 简介的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!