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');
回調
回呼是作為參數傳遞到另一個函數的函數,然後在外部函數內部呼叫該函數以完成某種例程或操作。
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中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

簡單JavaScript函數用於檢查日期是否有效。 function isValidDate(s) { var bits = s.split('/'); var d = new Date(bits[2] '/' bits[1] '/' bits[0]); return !!(d && (d.getMonth() 1) == bits[1] && d.getDate() == Number(bits[0])); } //測試 var

本文探討如何使用 jQuery 獲取和設置 DOM 元素的內邊距和外邊距值,特別是元素外邊距和內邊距的具體位置。雖然可以使用 CSS 設置元素的內邊距和外邊距,但獲取準確的值可能會比較棘手。 // 設定 $("div.header").css("margin","10px"); $("div.header").css("padding","10px"); 你可能會認為這段代碼很

本文探討了十個特殊的jQuery選項卡和手風琴。 選項卡和手風琴之間的關鍵區別在於其內容面板的顯示和隱藏方式。讓我們深入研究這十個示例。 相關文章:10個jQuery選項卡插件

發現十個傑出的jQuery插件,以提升您的網站的活力和視覺吸引力!這個精選的收藏品提供了不同的功能,從圖像動畫到交互式畫廊。讓我們探索這些強大的工具:相關文章:1

HTTP-Console是一個節點模塊,可為您提供用於執行HTTP命令的命令行接口。不管您是否針對Web服務器,Web Serv

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

當div內容超出容器元素區域時,以下jQuery代碼片段可用於添加滾動條。 (無演示,請直接複製到Firebug中) //D = document //W = window //$ = jQuery var contentArea = $(this), wintop = contentArea.scrollTop(), docheight = $(D).height(), winheight = $(W).height(), divheight = $('#c


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中