欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Node.js中Buffer的使用方法-創(chuàng)新互聯(lián)

這篇文章主要介紹Node.js中Buffer的使用方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括武義網(wǎng)站建設(shè)、武義網(wǎng)站制作、武義網(wǎng)頁(yè)制作以及武義網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,武義網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到武義省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

JavaScript 起初為瀏覽器而設(shè)計(jì),沒(méi)有讀取或操作二進(jìn)制數(shù)據(jù)流的機(jī)制。Buffer類的引入,則讓NodeJS擁有操作文件流或網(wǎng)絡(luò)二進(jìn)制流的能力。

Buffer基本概念

Buffer 對(duì)象的內(nèi)存分配不是在V8的堆內(nèi)存中,而是Node在C++層面進(jìn)行內(nèi)存申請(qǐng),可以理解為在內(nèi)存中單獨(dú)開辟了一部分空間,但是使用時(shí)分配內(nèi)存則是由Node層面完成的,釋放也是由Node中v8的gc機(jī)制自動(dòng)控制。Buffer基本操作,這里不在贅述,官方文檔很詳細(xì)。

Buffer性能對(duì)比

通常,網(wǎng)絡(luò)傳輸中,都需要將數(shù)據(jù)轉(zhuǎn)換為Buffer。下面做一個(gè)性能對(duì)比實(shí)驗(yàn)。

1.使用純字符串返回給客戶端

const http = require('http');

let hello = ''
for (var i = 0; i < 10240; i++) {
  hello += "a";
}

console.log(`Hello:${hello.length}`)
// hello = Buffer.from(hello);

http.createServer((req, res) => {
  res.writeHead(200);
  res.end(hello);
}).listen(8001);

使用ab -c 200 -t 100 http://127.0.0.1:8001/命令來(lái)進(jìn)行性能測(cè)試,發(fā)起200個(gè)并發(fā)客戶端

Node.js中Buffer的使用方法

使用字符串,QPS可以達(dá)到4019.70,傳輸率為40491.45KB每秒。

2.使用Buffer。將字符串轉(zhuǎn)換為Buffer對(duì)象,再發(fā)給客戶端。

const http = require('http');

let hello = ''
for (var i = 0; i < 10240; i++) {
  hello += "a";
}

console.log(`Hello:${hello.length}`)
hello = Buffer.from(hello);

http.createServer((req, res) => {
  res.writeHead(200);
  res.end(hello);
}).listen(8001);

取消Buffer轉(zhuǎn)換的注釋,同樣使用ab -c 200 -t 100 http://127.0.0.1:8001/測(cè)試,同樣發(fā)起200個(gè)并發(fā)客戶端

Node.js中Buffer的使用方法

使用Buffer,QPS達(dá)到7130.05,傳輸率為71822.74KB每秒。
性能是原來(lái)的177%,極大的節(jié)省了服務(wù)器資源

那么問(wèn)題來(lái)了,為什么會(huì)有這么大的性能提升呢?

道理其實(shí)很簡(jiǎn)單,在NodeJS中,進(jìn)行http傳輸時(shí),若返回的類型為string,則會(huì)將string類型的參數(shù),轉(zhuǎn)換為Buffer,通過(guò)NodeJS中的Stream流,一點(diǎn)點(diǎn)的返回給客戶端。如果我們直接返回Buffer類型,就沒(méi)有了轉(zhuǎn)換操作,直接返回,減少了CPU的重復(fù)使用率。這一部分邏輯見(jiàn)Node源碼https://github.com/nodejs/node/blob/v10.9.0/lib/_http_outgoing.js#L612

在上面性能對(duì)比示例中,返回string時(shí),每次請(qǐng)求都需要將string裝換成Buffer返回;而直接返回Buffer時(shí),這個(gè)Buffer是我們啟動(dòng)服務(wù)時(shí)就存放在內(nèi)存中的,每次請(qǐng)求直接返回內(nèi)存中的Buffer即可,因此Buffer使用前后QPS提升了很多。

因此,我們?cè)趯憳I(yè)務(wù)代碼時(shí),部分資源可以預(yù)先轉(zhuǎn)換為Buffer類型(如js、css等靜態(tài)資源文件),直接返回buffer給客戶端,再比如一些文件轉(zhuǎn)發(fā)的場(chǎng)景,將獲取到的內(nèi)容儲(chǔ)存為Buffer直接轉(zhuǎn)發(fā),避免額外的轉(zhuǎn)換操作。

以上是Node.js中Buffer的使用方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

網(wǎng)頁(yè)標(biāo)題:Node.js中Buffer的使用方法-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://www.chinadenli.net/article42/dcegec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站云服務(wù)器網(wǎng)站營(yíng)銷網(wǎng)站制作企業(yè)網(wǎng)站制作品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)