小白学前端的注意事项(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软件是什么意思(小白学前端的注意事项)的相关内容了,更多精彩内容请关注!

相关内容

热门资讯

以军向也门3个港口的居民发布撤... 当地时间5月14日上午,以色列国防军发布警告,要求也门拉斯伊萨港、荷台达港和萨利夫港当地民众撤离。以...
微软将在全球裁员6000人,目... 当地时间5月13日,科技巨头微软表示,将在所有级别、团队和地区裁员3%,影响约6000人。微软发言人...
乌总统:若与普京会谈,全面停火... 乌克兰总统泽连斯基当地时间13日接受媒体采访时强调,如果普京愿意前往土耳其,他愿意与普京就和平问题进...
高校花75万买299元路由器!... “重庆三峡学院75万元采购防火墙实为299元路由器”事件持续引发关注,记者调查↓整起事件起始于今年4...
外交部:中方对美芬太尼反制仍然... 据央视新闻消息,今天,外交部发言人林剑表示,中美双方在日内瓦的经贸会谈达成多项积极共识,同意大幅降低...
最高人民检察院依法对陆克华决定... 记者今天(14日)从最高人民检察院获悉,重庆市委原常委、政法委原书记陆克华涉嫌受贿一案,由国家监察委...
古巴外长谴责美国再次将古列为“... 古巴外长罗德里格斯。视觉中国 资料图古巴外长罗德里格斯13日强烈谴责美国再次将古巴列入“反恐行动不合...
崔登荣任国家游泳队总教练 5月14日,全国游泳项目训练工作会议在深圳召开,会议宣布了崔登荣为国家游泳队新周期的总教练。国家体育...
我国成功发射太空计算卫星星座 北京时间2025年5月14日12时12分,我国在酒泉卫星发射中心使用长征二号丁运载火箭,成功将太空计...
台行政机构网站删除“汉人”改为... 国务院台办14日举行的例行新闻发布会上,有记者问:近日,台行政机构网站有关台湾人口情况介绍中删除“汉...
中国至越南河内国际道路运输线路... 5月14日10点40分,随着发车指令声响,搭载着电子元器件、新鲜蔬菜、百货的运输车队从广西南宁、云南...
巴方:印度上周导弹袭击造成至少... 巴基斯坦三军新闻局13日发表声明说,上周印度对巴方发动的导弹袭击造成至少40名平民死亡,另有121人...
美政府以拨款为要挟胁迫各州服从... 当地时间13日,美国20个州联合起诉美国联邦政府,称美国交通部和国土安全部非法以联邦拨款为要挟,胁迫...
最新研究:新型合成小分子可“精... 癌细胞法国国家科学研究中心日前在官网介绍,该中心参与的一项研究成功设计并合成了一种新型小分子“磷脂降...
车被冰雹砸坏了能理赔吗?报案时... 5月13日晚,北京出现大面积降水、下冰雹的情况,不少车主由于正在回家的路上或者车辆露天停放,导致车面...
盲人办手机卡,被要求必须“眨眼... 近日,江苏扬州的一位80岁的盲人管先生在某运营商营业厅办理手机卡时,因无法完成“刷脸验证”,只能以亲...
国内首家破产的5A景区游客爆满... 近日,一些网友在短视频平台上分享自己游玩洛阳龙潭大峡谷的经历,并称这是国内第一个倒闭的5A级景区,有...
美国务卿鲁比奥将前往土耳其参加... 当地时间5月13日,美国总统特朗普在沙特-美国投资论坛上表示,本周晚些时候俄乌将在土耳其举行会谈,包...
赴泰游填数字入境卡被收费200... 据人民网报道,泰国外交部发言人尼功德近日表示,自2025年5月1日起,泰国移民局将开始为进出泰国的外...
加拿大新政府宣誓就职 马克·卡尼(资料图)当地时间5月13日,加拿大自由党领袖、现任总理马克·卡尼带领新内阁在位于首都渥太...