node.js基礎(chǔ)知識匯總
一、node介紹
1.node的應(yīng)用場景
- 工具類 gulp webpack vite (node可以讓js運行在服務(wù)器)
- 可以做服務(wù)端 優(yōu)化ssr
- 可以做中間層 (解決跨域問題,格式化數(shù)據(jù))
2.性能
- 非阻塞
- 異步I/O(當這個方法調(diào)用完畢后不會立即返回結(jié)果)
- 事件驅(qū)動(發(fā)布訂閱模式)
3.優(yōu)勢
在Java、PHP或者.NET等服務(wù)器語言中,會為每一個客戶端連接創(chuàng)建一個新的線程。而每個線程需要耗費大約2MB內(nèi)存。也就是說,理論上,一個8GB內(nèi)存的服務(wù)器可以同時連接的最大用戶數(shù)為4000個左右。要讓web應(yīng)用程序支持更多的用戶,就需要增加服務(wù)器的數(shù)量,而web應(yīng)用程序的硬件成本當然就上升了。
NodeJs不為每個客戶連接創(chuàng)建一個新的線程,而僅僅使用一個線程。當有用戶連接了,就觸發(fā)一個內(nèi)部事件,通過非阻塞I/O、事件驅(qū)動機制,讓Node.js程序宏觀上也是并行的。使用Node.js,一個8GB內(nèi)存的服務(wù)器,可以同時處理超過4萬用戶的連接。
二、node的全局對象和模塊
1.global
global是全局對象,可以直接訪問里面的屬性
里面有:
- Buffer
- process
- setInterval,setTimeout,setImmediate
- console
- queueMicrotask
2.模塊
- __dirname
- __filename
- exports
- module
- require()
三、process常用屬性或方法
process.platform 系統(tǒng)
process.kill 殺進程
process.exit 退出進程
process.nextTick node中的微任務(wù) 當前執(zhí)行棧的底部 優(yōu)先級比promise高
process.cwd() 當前的工作目錄,是可變的,看命令在哪里執(zhí)行 (__dirname當前文件所在的文件夾,此路徑不會發(fā)生變化)
process.env 環(huán)境變量(可以set,例如process.env.NODE_ENV)
process.argv 執(zhí)行時所帶的參數(shù)
四、事件環(huán)機制
重要的三個階段
timer 存放定時器
poll 輪詢處理I/O回調(diào)
check setImmediate
如果在 I/O 回調(diào)的方法里,setImmediate優(yōu)先于 timer 執(zhí)行
應(yīng)為 poll 接下來是 check
nextTick 算是一個微任務(wù),不在事件環(huán)中
在node 11 以上 宏任務(wù)與微任務(wù)的執(zhí)行順序與瀏覽器一樣
五、Buffer
JavaScript 語言自身只有字符串數(shù)據(jù)類型,沒有二進制數(shù)據(jù)類型。
但在處理像TCP流或文件流時,必須使用到二進制數(shù)據(jù)。因此在 Node.js中,定義了一個 Buffer 類,該類用來創(chuàng)建一個專門存放二進制數(shù)據(jù)的緩存區(qū)。在 Node.js 中,Buffer 類是隨 Node 內(nèi)核一起發(fā)布的核心庫。Buffer 庫為 Node.js 帶來了一種存儲原始數(shù)據(jù)的方法,可以讓 Node.js 處理二進制數(shù)據(jù),每當需要在 Node.js 中處理I/O操作中移動的數(shù)據(jù)時,就有可能使用 Buffer 庫。原始數(shù)據(jù)存儲在 Buffer 類的實例中。一個 Buffer 類似于一個整數(shù)數(shù)組,但它對應(yīng)于 V8 堆內(nèi)存之外的一塊原始內(nèi)存。Buffer屬于global上的屬性可以直接被訪問,讀取文件,寫入(二進制)從硬盤中讀取的數(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ǔ)知識匯總的詳細內(nèi)容,更多關(guān)于node.js基礎(chǔ)知識的資料請關(guān)注腳本之家其它相關(guān)文章!
- 零基礎(chǔ)之Node.js搭建API服務(wù)器的詳解
- node.js之基礎(chǔ)加密算法模塊crypto詳解
- node.js基礎(chǔ)知識小結(jié)
- Node.js使用Koa搭建 基礎(chǔ)項目
- 深入理解Node.js中通用基礎(chǔ)設(shè)計模式
- Node.js 基礎(chǔ)教程之全局對象
- Node.js的npm包管理器基礎(chǔ)使用教程
- node.js實現(xiàn)爬蟲教程
- 安裝使用Mongoose配合Node.js操作MongoDB的基礎(chǔ)教程
- 零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開發(fā)入門
相關(guān)文章
在NodeJS中啟用ECMAScript 6小結(jié)(windos以及Linux)
ECMAScript 6 是JavaScript的下一代標準,其目標,是使得JavaScript可以用來編寫復(fù)雜的應(yīng)用程序、函數(shù)庫和代碼的自動生成器(code generator)。2014-07-07用C/C++來實現(xiàn) Node.js 的模塊(二)
上篇文章的主要內(nèi)容講訴了用C/C++來實現(xiàn) Node.js 的模塊,本文更深一步繼續(xù)探討這個問題,有需要的朋友可以參考下2014-09-09關(guān)于訪問node?express中的static靜態(tài)文件方法
這篇文章主要介紹了關(guān)于訪問node?express中的static靜態(tài)文件方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09詳解如何使用Node.js編寫命令工具——以vue-cli為例
本篇文章主要介紹了如何使用Node.js編寫命令工具——以vue-cli為例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06Node發(fā)出HTTP POST請求的方法實例小結(jié)
這篇文章主要介紹了Node發(fā)出HTTP POST請求的方法,結(jié)合實例形式總結(jié)分析了三種常用的post請求操作方法,以及相關(guān)庫操作注意事項,需要的朋友可以參考下2023-05-05