内容简介:await 性能猜想
前言
以往我们推崇异步 I/O 来实现高并发下的高性能,如今 NodeJS 步入 8.x 时代,async await 可以用同步的写法来实现异步处理,不知道对性能是否会有影响,来做个简单的测试。
测试基准
Linode 1G 配置两台,一台用 ab 发请求,另一台跑4个测试用例。
先用 Nginx 跑一个默认服务,返回一个 html 文件,测试基准性能。
Nginx 访问默认的 html 文件,QPS 为 5162
同步访问文件
fs.readFileSync 是 fs.readFile 的同步版本
const fs = require('fs')
const http = require('http')
let server = http.createServer()
server.on('request', (req, res) => {
let file = fs.readFileSync('./index.html')
res.write(file)
res.end()
})
server.listen(3000)
测试结果
QPS 为 3195
异步访问文件
const fs = require('fs')
const http = require('http')
let server = http.createServer()
server.on('request', (req, res) => {
fs.readFile('./index.html', (err, data) => {
if (err) {
res.statusCode = 500
res.end()
return
}
res.write(data)
res.end()
})
})
server.listen(3001)
测试结果
QPS 为 2945
使用 async 来封装异步操作
const fs = require('fs')
const http = require('http')
let server = http.createServer()
server.on('request', onRequest)
async function onRequest(req, res) {
let file = await readFile()
res.write(file)
res.end()
}
function readFile () {
return new Promise((resolve, reject) => {
fs.readFile('./index.html', (err, data) => {
if (err) reject(err)
resolve(data)
})
})
}
server.listen(3002)
测试结果
QPS 为 2855
对比
- 5162 Nginx
- -1967
- 3195 fs.readFileSync
- -250
- 2945 fs.readFile
- -90
- 2855 await promise fs.readFile
本来猜测的结果,应该是 Nginx > fs.readFile > fs.readFIleSync > await + promise + fs.readFile
实际结果却是 Nginx > fs.readFileSync > fs.readFile > await + promise + fs.readFile,这下傻眼
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Master Switch
Tim Wu / Knopf / 2010-11-2 / USD 27.95
In this age of an open Internet, it is easy to forget that every American information industry, beginning with the telephone, has eventually been taken captive by some ruthless monopoly or cartel. Wit......一起来看看 《The Master Switch》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
Base64 编码/解码
Base64 编码/解码