tft每日頭條

 > 科技

 > js軟件是什麼意思

js軟件是什麼意思

科技 更新时间:2024-10-12 11:10:03

js軟件是什麼意思?Python使用FastApi測試;Node.JS使用Fastify;Rust則使用Actix選擇的Python和Node框架,是在搜索 “最快的<某語言>api “時得到的最高結果;Rust的Actix是一直高度維護的,下面我們就來說一說關于js軟件是什麼意思?我們一起去了解并探讨一下這個問題吧!

js軟件是什麼意思(小白學前端的注意事項)1

js軟件是什麼意思

Python使用FastApi測試;Node.JS使用Fastify;Rust則使用Actix。

選擇的Python和Node框架,是在搜索 “最快的<某語言>api “時得到的最高結果;Rust的Actix是一直高度維護的。

測試的基礎很簡單;在我的MacBook Pro M1上,每個框架處理來自網絡服務器的5000個基本 “Hello, World “響應需要多長時間?

我用來運行測試的代碼非常簡單,顯然,我們隻關心速度:

Python

客戶端代碼:

<b>import</b> requests

from requests.adapters <b>import</b> HTTPAdapter

from requests.packages.urllib3.util.retry <b>import</b> Retry

MAX_RETIES = 3

def create_retriable_session():

s = requests.Session()

retries = Retry(

total=MAX_RETIES,

)

s.mount(‘http:<font><i>//’, HTTPAdapter(max_retries=retries))</i></font><font>

s.mount(‘http:</font><font><i>//’, HTTPAdapter(max_retries=retries))</i></font><font>

<b>return</b> s

def main():

s = create_retriable_session()

<b>for</b> _ in range(0, 5000):

s.get(</font><font>”http://127.0.0.1:8000/”</font><font>)

</font>

服務器端,使用fastapi:

from fastapi <b>import</b> FastAPI

app = FastAPI()

@app.get(<font>”/”</font><font>)

async def root():

<b>return</b> {</font><font>”message”</font><font>: </font><font>”Hello World”</font><font>}

</font>

運行服務器:

uvicorn main:app

測試結果:

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

下面是使用另外一個框架Fastfy使用 異步 後的代碼:

<b>const</b> fastify = require(‘fastify’)({logger: false})

<b>const</b> PORT = 8000;

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

<b>return</b> {message: ‘Hello World’}

})

<b>const</b> start = async () => {

<b>try</b> {

await fastify.listen(PORT)

} <b>catch</b> (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(<font>”/”</font><font>)]

async fn hello() -> impl Responder {

HttpResponse::Ok().body(</font><font>”{\”message\”: \”Hello World\”}”</font><font>)

}

#[actix_web::main]

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

HttpServer::<b>new</b>(|| {

App::<b>new</b>()

.serb> express = require(‘express’)

<b>const</b> app = express()

<b>const</b> port = 8000

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

res.json({message: <font>”Hello World”</font><font>})

})

app.listen(port, () => {

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

})

</font>

測試結果:

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(<font>”/”</font><font>)]

async fn hello() -> impl Responder {

HttpResponse::Ok().body(</font><font>”{\”message\”: \”Hello World\”}”</font><font>)

}

#[actix_web::main]

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

HttpServer::<b>new</b>(|| {

App::<b>new</b>()

.service(hello)

})

.bind(</font><font>”127.0.0.1:8000″</font><font>)?

.run()

.await

}

</font>

測試結果:

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的功能更全面,所以我估計它也會更慢。

<b>const</b> express = require(‘express’)

<b>const</b> app = express()

<b>const</b> port = 8000

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

res.json({message: <font>”Hello World”</font><font>})

})

app.listen(port, () => {

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

})

</font>

測試結果:

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的生産服務器上,重點是展示我在學習新東西時喜歡的一種簡單的方法,并希望展示測試并不總是要嚴肅或複雜。

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved