小白学前端的注意事项(js软件是什么意思)
admin
2023-09-14 15:04:39
0

Python使用FastApi测试;Node.JS使用Fastify;Rust则使用Actix。

选择的Python和Node框架,是在搜索 “最快的<某语言>api “时得到的最高结果;Rust的Actix是一直高度维护的。

测试的基础很简单;在我的MacBook Pro M1上,每个框架处理来自网络服务器的5000个基本 “Hello, World “响应需要多长时间?

我用来运行测试的代码非常简单,显然,我们只关心速度:

Python

客户端代码:

import requests

from requests.adapters import HTTPAdapter

from requests.packages.urllib3.util.retry import Retry

MAX_RETIES = 3

def create_retriable_session():

s = requests.Session()

retries = Retry(

total=MAX_RETIES,

)

s.mount(‘http://’, HTTPAdapter(max_retries=retries))

s.mount(‘https://’, HTTPAdapter(max_retries=retries))

return s

def main():

s = create_retriable_session()

for _ in range(0, 5000):

s.get(”http://127.0.0.1:8000/”)

服务器端,使用fastapi:

from fastapi import FastAPI

app = FastAPI()

@app.get(”/”)

async def root():

return {”message”: ”Hello World”}

运行服务器:

uvicorn main:app

测试结果:

5.22 s ± 221 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

下面是使用另外一个框架Fastfy使用 异步 后的代码:

const fastify = require(‘fastify’)({logger: false})

const PORT = 8000;

fastify.get(‘/’, async (request, reply) => {

return {message: ‘Hello World’}

})

const start = async () => {

try {

await fastify.listen(PORT)

} catch (err) {

fastify.log.error(err)

process.exit(1)

}

}

start()

再次测试结果:

4.49 s ± 84.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

比较结果:

FastApi每秒处理约957.85次,Fastfy每秒处理1113.59次。

Rust

use actix_web::{App, get, HttpResponse, HttpServer, Responder};

#[get(”/”)]

async fn hello() -> impl Responder {

HttpResponse::Ok().body(”{\”message\”: \”Hello World\”}”)

}

#[actix_web::main]

async fn main() -> std::io::Result<()> {

HttpServer::new(|| {

App::new()

.serb> express = require(‘express’)

const app = express()

const port = 8000

app.get(‘/’, (req, res) => {

res.json({message: ”Hello World”})

})

app.listen(port, () => {

console.log(`Example app listening at http://localhost:${port}`)

})

测试结果:

4.88 s ± 152 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)Rust

use actix_web::{App, get, HttpResponse, HttpServer, Responder};

#[get(”/”)]

async fn hello() -> impl Responder {

HttpResponse::Ok().body(”{\”message\”: \”Hello World\”}”)

}

#[actix_web::main]

async fn main() -> std::io::Result<()> {

HttpServer::new(|| {

App::new()

.service(hello)

})

.bind(”127.0.0.1:8000″)?

.run()

.await

}

测试结果:

4.32 s ± 58.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

比较结果:

我们再次看到,Rust比python快,也比Fastify快,Rust能够每秒处理1157.41个请求,每秒比Fastify快44个请求,比FastApi每秒快200个请求。

Node.js

只是为了好玩,Express是最常见的节点框架,所以我也想测试一下,Express比fastify的功能更全面,所以我估计它也会更慢。

const express = require(‘express’)

const app = express()

const port = 8000

app.get(‘/’, (req, res) => {

res.json({message: ”Hello World”})

})

app.listen(port, () => {

console.log(`Example app listening at http://localhost:${port}`)

})

测试结果:

4.88 s ± 152 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

而且确实比fastify要慢。

结论

Rust绝对是最快的选择,但它是最好的吗?我不确定我是否能回答这个问题,因为98%的情况下这要取决于。你的团队知道什么?该框架有你需要的功能吗?如果没有,你能建立它吗?如果你没有一个专家团队,学习起来有多容易?该框架在4-5年内存在的可能性有多大?

这些测试有一些注意事项,它们是在Python中运行的,所以它们只能以Python发出请求的速度运行,而且它们不是多线程的,所以框架也可能不会使用多线程来响应,这取决于Python请求库中的会话工作方式。另外,一般来说,node是单线程的,node用队列来伪造并发,但是有一种方法可以解决这个问题,那就是用workers,它允许你在不同的线程上运行多个服务器,这取决于CPU有多少逻辑核心,这在生产中非常有用,因为它有巨大的性能提升,但同样,这些测试不能从中受益。

这篇文章的重点不是让你转到Actix/Rust的生产服务器上,重点是展示我在学习新东西时喜欢的一种简单的方法,并希望展示测试并不总是要严肃或复杂。

以上就是js软件是什么意思(小白学前端的注意事项)的相关内容了,更多精彩内容请关注!

相关内容

热门资讯

明确9种禁止性情形 严防商业贿... 记者刚刚从国家药监局获悉,《医药代表管理办法》今天由七部门联合公告发布。据了解,为规范药品学术推广行...
八部门发文改革完善儿童用药供应... 国家卫生健康委、工业和信息化部等八部门今天发布《关于改革完善儿童用药供应保障机制的实施意见》,对20...
现实版《三体》红岸基地,中国深... 这里是现实版《三体》红岸基地,中国深空“最强瞭望台”聆听40亿公里外信号。66米口径亚洲最大天线藏于...
中国海警舰艇编队5月7日在我钓... 5月7日,中国海警1306舰艇编队在我钓鱼岛领海内巡航。这是中国海警依法开展的维权巡航活动。
受贿1.34亿余元 安徽省政协... 2026年5月7日,福建省漳州市中级人民法院公开宣判安徽省政协原党组成员、副主席周喜安受贿一案,以受...
中东媒体称美伊已就缓解美国海上... 据中东媒体7日援引消息人士的话报道,伊朗和美国已就缓解美国海上封锁以换取霍尔木兹海峡逐步重新开放达成...
荷航一空乘人员疑似感染汉坦病毒... 荷兰卫生部5月7日表示,一名荷兰女子因出现汉坦病毒感染的疑似症状,已被送往阿姆斯特丹的一家医院接受治...
外交部:中方赞赏法方推动流失文... 5月7日,外交部发言人林剑主持例行记者会。有记者问,法国国民议会以141票赞成、0票反对的投票结果,...
“洪迪厄斯”号邮轮涉汉坦病毒病... “洪迪厄斯”邮轮当地时间6日,英国卫生安全局发布声明表示,两名曾搭乘“洪迪厄斯”邮轮的英国乘客已返回...
外交部:敦促日本执政当局正视问... 5月7日,外交部发言人林剑主持例行记者会。有记者问,距日本首相高市早苗去年11月7日在国会发表的涉台...
新疆维吾尔自治区政协原党组成员... 经中共中央批准,中央纪委国家监委对新疆维吾尔自治区政协原党组成员、副主席金之镇严重违纪违法问题进行了...
第三轮第六批中央生态环境保护督... 为深入贯彻党的二十大和二十届历次全会精神,认真落实四中全会部署,贯彻落实习近平生态文明思想和习近平总...
英国计划接回涉疫邮轮上的本国公... △“洪迪厄斯”邮轮当地时间6日,英国卫生安全局发布声明表示,两名曾搭乘“洪迪厄斯”邮轮的英国乘客已返...
韩前总理韩德洙“从事内乱重要任... △韩国前国务总理韩德洙(资料图)当地时间7日上午,韩国首尔高等法院就前总理韩德洙涉嫌在尹锡悦发动紧急...
美法官公布一份“爱泼斯坦遗书” 美国一名联邦地区法院法官6日公开一张纸条,据称是臭名昭著的已故美国富商爱泼斯坦所写遗书。其中一句话写...
距离达成停战协议还有多远?美称... 近日,美方持续释放关于结束伊朗战事的信号。美国总统特朗普6日数次表示,对美国同伊朗达成协议表示乐观,...
消息人士称伊朗预计将于7日回应... △伊朗首都德黑兰(资料图)当地时间5月6日,据一位地区消息人士表示,伊朗预计将于5月7日向调解人提交...
美对伊战事或为白宫记协晚宴枪手... 当地时间5月6日,总台记者获悉,美国国土安全部在一份情报评估中指出,美国对伊朗发起的军事行动可能是白...
以总理称以军袭击贝鲁特 黎真主... △以色列方面发布的图片当地时间6日,以色列总理内塔尼亚胡和以国防部长卡茨发表联合声明称,以军在黎巴嫩...
矿床地质学家、中国工程院院士陈... 据中国工程院官网发布的信息,矿床地质学家、中国工程院院士陈毓川,于2026年5月6日逝世。陈毓川,1...