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è)客戶端連接創(chuàng)建一個(gè)新的線程。而每個(gè)線程需要耗費(fèi)大約2MB內(nèi)存。也就是說(shuō),理論上,一個(gè)8GB內(nèi)存的服務(wù)器可以同時(shí)連接的最大用戶數(shù)為4000個(gè)左右。要讓web應(yīng)用程序支持更多的用戶,就需要增加服務(wù)器的數(shù)量,而web應(yīng)用程序的硬件成本當(dāng)然就上升了。
NodeJs不為每個(gè)客戶連接創(chuàng)建一個(gè)新的線程,而僅僅使用一個(gè)線程。當(dāng)有用戶連接了,就觸發(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)用戶的連接。
二、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 輪詢處理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中啟用ECMAScript 6小結(jié)(windos以及Linux)
ECMAScript 6 是JavaScript的下一代標(biāo)準(zhǔn),其目標(biāo),是使得JavaScript可以用來(lái)編寫(xiě)復(fù)雜的應(yīng)用程序、函數(shù)庫(kù)和代碼的自動(dòng)生成器(code generator)。2014-07-07用C/C++來(lái)實(shí)現(xiàn) Node.js 的模塊(二)
上篇文章的主要內(nèi)容講訴了用C/C++來(lái)實(shí)現(xiàn) Node.js 的模塊,本文更深一步繼續(xù)探討這個(gè)問(wèn)題,有需要的朋友可以參考下2014-09-09webpack創(chuàng)建項(xiàng)目并打包的詳細(xì)流程記錄
webpack在前端工程領(lǐng)域起到了中流砥柱的作用,理解它的內(nèi)部實(shí)現(xiàn)機(jī)制會(huì)對(duì)你的工程建設(shè)提供很大的幫助(不論是定制功能還是優(yōu)化打包),下面這篇文章主要給大家介紹了關(guān)于webpack創(chuàng)建項(xiàng)目并打包的詳細(xì)流程,需要的朋友可以參考下2023-03-0320行代碼簡(jiǎn)單實(shí)現(xiàn)koa洋蔥圈模型示例詳解
這篇文章主要為大家介紹了20行代碼簡(jiǎn)單實(shí)現(xiàn)koa洋蔥圈模型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01手把手教你實(shí)現(xiàn) Promise的使用方法
這篇文章主要介紹了手把手教你實(shí)現(xiàn) Promise的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09關(guān)于訪問(wèn)node?express中的static靜態(tài)文件方法
這篇文章主要介紹了關(guān)于訪問(wèn)node?express中的static靜態(tài)文件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09詳解如何使用Node.js編寫(xiě)命令工具——以vue-cli為例
本篇文章主要介紹了如何使用Node.js編寫(xiě)命令工具——以vue-cli為例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06使用socket.io實(shí)現(xiàn)簡(jiǎn)單聊天室案例
這篇文章主要介紹了使用socket.io實(shí)現(xiàn)簡(jiǎn)單聊天室案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Node發(fā)出HTTP POST請(qǐng)求的方法實(shí)例小結(jié)
這篇文章主要介紹了Node發(fā)出HTTP POST請(qǐng)求的方法,結(jié)合實(shí)例形式總結(jié)分析了三種常用的post請(qǐng)求操作方法,以及相關(guān)庫(kù)操作注意事項(xiàng),需要的朋友可以參考下2023-05-05