node.js基礎(chǔ)知識(shí)匯總
一、node介紹
1.node的應(yīng)用場(chǎng)景
- 工具類(lèi) gulp webpack vite (node可以讓js運(yùn)行在服務(wù)器)
- 可以做服務(wù)端 優(yōu)化ssr
- 可以做中間層 (解決跨域問(wèn)題,格式化數(shù)據(jù))
2.性能
- 非阻塞
- 異步I/O(當(dāng)這個(gè)方法調(diào)用完畢后不會(huì)立即返回結(jié)果)
- 事件驅(qū)動(dòng)(發(fā)布訂閱模式)
3.優(yōu)勢(shì)
在Java、PHP或者.NET等服務(wù)器語(yǔ)言中,會(huì)為每一個(gè)客戶(hù)端連接創(chuàng)建一個(gè)新的線程。而每個(gè)線程需要耗費(fèi)大約2MB內(nèi)存。也就是說(shuō),理論上,一個(gè)8GB內(nèi)存的服務(wù)器可以同時(shí)連接的最大用戶(hù)數(shù)為4000個(gè)左右。要讓web應(yīng)用程序支持更多的用戶(hù),就需要增加服務(wù)器的數(shù)量,而web應(yīng)用程序的硬件成本當(dāng)然就上升了。
NodeJs不為每個(gè)客戶(hù)連接創(chuàng)建一個(gè)新的線程,而僅僅使用一個(gè)線程。當(dāng)有用戶(hù)連接了,就觸發(fā)一個(gè)內(nèi)部事件,通過(guò)非阻塞I/O、事件驅(qū)動(dòng)機(jī)制,讓Node.js程序宏觀上也是并行的。使用Node.js,一個(gè)8GB內(nèi)存的服務(wù)器,可以同時(shí)處理超過(guò)4萬(wàn)用戶(hù)的連接。
二、node的全局對(duì)象和模塊
1.global
global是全局對(duì)象,可以直接訪問(wèn)里面的屬性
里面有:
- Buffer
- process
- setInterval,setTimeout,setImmediate
- console
- queueMicrotask
2.模塊
- __dirname
- __filename
- exports
- module
- require()
三、process常用屬性或方法
process.platform 系統(tǒng)
process.kill 殺進(jìn)程
process.exit 退出進(jìn)程
process.nextTick node中的微任務(wù) 當(dāng)前執(zhí)行棧的底部 優(yōu)先級(jí)比promise高
process.cwd() 當(dāng)前的工作目錄,是可變的,看命令在哪里執(zhí)行 (__dirname當(dāng)前文件所在的文件夾,此路徑不會(huì)發(fā)生變化)
process.env 環(huán)境變量(可以set,例如process.env.NODE_ENV)
process.argv 執(zhí)行時(shí)所帶的參數(shù)
四、事件環(huán)機(jī)制

重要的三個(gè)階段
timer 存放定時(shí)器
poll 輪詢(xún)處理I/O回調(diào)
check setImmediate
如果在 I/O 回調(diào)的方法里,setImmediate優(yōu)先于 timer 執(zhí)行
應(yīng)為 poll 接下來(lái)是 check
nextTick 算是一個(gè)微任務(wù),不在事件環(huán)中
在node 11 以上 宏任務(wù)與微任務(wù)的執(zhí)行順序與瀏覽器一樣
五、Buffer
JavaScript 語(yǔ)言自身只有字符串?dāng)?shù)據(jù)類(lèi)型,沒(méi)有二進(jìn)制數(shù)據(jù)類(lèi)型。
但在處理像TCP流或文件流時(shí),必須使用到二進(jìn)制數(shù)據(jù)。因此在 Node.js中,定義了一個(gè) Buffer 類(lèi),該類(lèi)用來(lái)創(chuàng)建一個(gè)專(zhuān)門(mén)存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。在 Node.js 中,Buffer 類(lèi)是隨 Node 內(nèi)核一起發(fā)布的核心庫(kù)。Buffer 庫(kù)為 Node.js 帶來(lái)了一種存儲(chǔ)原始數(shù)據(jù)的方法,可以讓 Node.js 處理二進(jìn)制數(shù)據(jù),每當(dāng)需要在 Node.js 中處理I/O操作中移動(dòng)的數(shù)據(jù)時(shí),就有可能使用 Buffer 庫(kù)。原始數(shù)據(jù)存儲(chǔ)在 Buffer 類(lèi)的實(shí)例中。一個(gè) Buffer 類(lèi)似于一個(gè)整數(shù)數(shù)組,但它對(duì)應(yīng)于 V8 堆內(nèi)存之外的一塊原始內(nèi)存。Buffer屬于global上的屬性可以直接被訪問(wèn),讀取文件,寫(xiě)入(二進(jìn)制)從硬盤(pán)中讀取的數(shù)據(jù)都存到內(nèi)存上,buffer可以和字符串相互轉(zhuǎn)化
定義buffer的三種方式
let buf1 = Buffer.alloc(6);
let buf2 = Buffer.from('珠峰');
let buf3 = Buffer.from([65,66,67]);
buffer中常用的方法
- buff.toString()
- buff.fill()
- buff.slice()
- buff.copy
- Buffer.concat()
- Buffer.isBuffer()
- indexOf
以上就是node.js基礎(chǔ)知識(shí)匯總的詳細(xì)內(nèi)容,更多關(guān)于node.js基礎(chǔ)知識(shí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 零基礎(chǔ)之Node.js搭建API服務(wù)器的詳解
- node.js之基礎(chǔ)加密算法模塊crypto詳解
- node.js基礎(chǔ)知識(shí)小結(jié)
- Node.js使用Koa搭建 基礎(chǔ)項(xiàng)目
- 深入理解Node.js中通用基礎(chǔ)設(shè)計(jì)模式
- Node.js 基礎(chǔ)教程之全局對(duì)象
- Node.js的npm包管理器基礎(chǔ)使用教程
- node.js實(shí)現(xiàn)爬蟲(chóng)教程
- 安裝使用Mongoose配合Node.js操作MongoDB的基礎(chǔ)教程
- 零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開(kāi)發(fā)入門(mén)
相關(guān)文章
NodeJS感知和控制自身進(jìn)程的運(yùn)行環(huán)境和狀態(tài)
NodeJS可以感知和控制自身進(jìn)程的運(yùn)行環(huán)境和狀態(tài),也可以創(chuàng)建子進(jìn)程并與其協(xié)同工作,這使得NodeJS可以把多個(gè)程序組合在一起共同完成某項(xiàng)工作,并在其中充當(dāng)膠水和調(diào)度器的作用,和進(jìn)程管理相關(guān)的API單獨(dú)介紹起來(lái)比較枯燥,這里從一些典型的應(yīng)用場(chǎng)景出發(fā)2024-01-01
淺析nodejs實(shí)現(xiàn)Websocket的數(shù)據(jù)接收與發(fā)送
WebSocket是HTML5開(kāi)始提供的一種瀏覽器與服務(wù)器間進(jìn)行全雙工通訊的網(wǎng)絡(luò)技術(shù),本文給大家介紹nodejs實(shí)現(xiàn)websocket的數(shù)據(jù)庫(kù)接收與發(fā)送,小伙伴們一起學(xué)習(xí)吧2015-11-11
nodejs實(shí)現(xiàn)的簡(jiǎn)單web服務(wù)器功能示例
這篇文章主要介紹了nodejs實(shí)現(xiàn)的簡(jiǎn)單web服務(wù)器功能,結(jié)合實(shí)例形式分析了nodejs構(gòu)建web服務(wù)器的相關(guān)監(jiān)聽(tīng)、響應(yīng)、數(shù)據(jù)處理等操作技巧,需要的朋友可以參考下2018-03-03
Node.js 使用流實(shí)現(xiàn)讀寫(xiě)同步邊讀邊寫(xiě)功能
本文通過(guò)代碼給大家介紹了Node.js 使用流實(shí)現(xiàn)讀寫(xiě)同步邊讀邊寫(xiě)功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的額朋友參考下吧2017-09-09
electron安裝報(bào)錯(cuò)終極解決辦法詳細(xì)講解
當(dāng)使用npm安裝electron時(shí),有時(shí)候會(huì)遇到各種各樣的錯(cuò)誤,如網(wǎng)絡(luò)錯(cuò)誤、權(quán)限錯(cuò)誤等等,這篇文章主要給大家介紹了關(guān)于electron安裝報(bào)錯(cuò)終極解決辦法的相關(guān)資料,需要的朋友可以參考下2024-09-09
如何在命令行判斷node.js啟動(dòng)了沒(méi)有(最新)
這篇文章主要介紹了如何在命令行判斷node.js啟動(dòng)了沒(méi)有,使用 tasklist 命令列出所有正在運(yùn)行的進(jìn)程,并使用 findstr 命令過(guò)濾出 Node.js 進(jìn)程,感興趣的朋友跟隨小編一起看看吧2024-06-06

