成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

探索頂級Rust Web框架,你學到了什么?

開發 架構
Actix、Rocket、Axum和warp都使用Rust的async/await語法為web應用程序提供非阻塞I/O操作。這允許更好的性能和可伸縮性,因為框架可以同時處理多個請求而不會阻塞或減慢速度。

Web框架使開發人員更容易進行Web開發和構建桌面應用程序,通過標準化構建過程和自動化常見的活動和任務,web框架可以節省開發人員的時間,甚至可以促進代碼的重用以提高效率。

在本文中,我們將探索Rust生態系統中用于前端和后端開發的各種web框架。

如何選擇最好的Rust web框架

無論你的項目需要什么,web框架都可以提供開發團隊需要的web服務、web資源和web api。在為項目選擇合適的web框架時,開發團隊應該考慮以下因素的相對重要性。

安全性

Rust的內存安全保證了安全性,這是通過它的所有權模型實現的。然而,并不是所有的Rust web框架都能處理安全特性,比如跨站腳本(XSS)和跨站請求偽造(CSRF)。因此,你應該注意如何在框架中處理安全性。

靈活性

框架的靈活性通常歸結為你需要多少可控性,以及你希望在多大程度上依賴抽象和約定。根據你的經驗來考慮框架的靈活性以及它如何使你的項目受益。

項目大小

較小的項目可能傾向于使用更簡單、更高級的抽象,而較大的項目則需要可伸縮性和高效的并發性。

版本及時更新

與框架的開發保持同步是很重要的——你不會想要使用上一次更新是五年前的框架,因為它可能會影響安全性和與最新Rust特性的兼容性。

文檔

清晰、結構良好的文檔可以顯著加快開發速度,尤其是在新開發人員入職時。

社區支持

社區的規模和參與度決定了在項目過程中出現問題時找到資源、庫和幫助的難易程度——“bug是工作的一部分”。

前端Web框架和WebAssembly

WebAssembly(Wasm)是一種可以在現代web瀏覽器中運行的底層語言編碼,它支持C/C++, c#, Go和Rust,并可以編譯成目標機器的字節碼,因此它可以以接近本機的性能運行在web上。Wasm與JavaScript一起運行,可以發布到npm和其他包中。Rust使用一個名為wasm-pack的工具來組裝和打包針對WASM的crate。

Yew

Yew是最流行的Rust框架之一(它目前在GitHub上有30.5萬顆星),用于構建現代web應用程序。受React的啟發,它利用了基于組件的體系結構,并提供了對狀態管理、異步等的支持。

下面是一個使用Yew的Hello World應用的簡單示例:

圖片圖片

可以通過運行以下命令快速探索它是如何工作的:

cargo install generate
cargo install trunk
cargo generate --git https://github.com/yewstack/yew-trunk-minimal-template
trunk serve --open

上面的代碼片段將生成一個樣板代碼,可以用它作為Yew應用程序的起始模板。安裝Trunk的原因是因為Yew使用Trunk捆綁器來為web提供HTML。

Perseus

Perseus是一個Rust框架,用于構建響應式web應用程序。它支持類似于Next.js的功能,但它是為Rust生態系統設計的。

Perseus的響應式系統由Sycamore響應式庫提供支持,并具有對服務器端渲染(SSR)和靜態站點生成(SSG)的原生支持。它目前有超過2.8k的GitHub顆星。

下面是一個如何用Perseus編寫一個簡單的Hello World應用程序的例子:

use perseus::prelude::*;
use sycamore::prelude::*;

#[perseus::main(perseus_axum::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
    PerseusApp::new()
        .template(
            Template::build("index")
                .view(|cx| {
                    view! { cx,
                        p { "Hello World!" }
                    }
                })
                .build()
        )
}

要開始使用Perseus,運行下面的命令創建一個示例應用程序并啟動服務器:

cargo install perseus-cli
perseus new my-app
cd my-app/
perseus serve -w

Sauron

Sauron是一個受Elm Architecture啟發的微型前端框架。它支持事件、狀態管理、客戶端和服務器端web開發。一個最簡單的方法來試驗它是如何工作的是通過使用html2sauron將HTML轉換為Sauron源代碼,如下所示:

圖片圖片

Sauron在GitHub上有超過2k顆星,對于一個新框架來說,這真是令人印象深刻,這表明人們對該框架的興趣正在增長。

Dioxus

Dioxus是一個Rust UI庫,可以讓你構建響應式跨平臺UI組件——它支持web、移動和桌面應用程序開發。它借鑒了React的一些特性(包括鉤子),并使用了自己的虛擬DOM——可以把它看作是React與Rust的安全性和速度的混合體。

這是Dioxus應用中組件的樣子:

fn app(cx: Scope) -> Element {
    let result: &mut u32 = cx.use_hook(|| 0);

    cx.render(rsx!(
        div { "Hello World" }
    ))
}

Dioxus擁有強大的社區支持之一,在GitHub上擁有超過20k顆星。

Iced

Iced是一個跨平臺開發GUI庫,它的架構也受到Elm架構的啟發,并提供對響應式編程、類型安全和速度的內置支持。

Iced使用以下結構來編寫代碼:

  • 狀態:應用程序的狀態
  • 消息:你關心的用戶交互或有意義的事件
  • 視圖邏輯:一種將狀態顯示為在用戶交互時產生消息的方法
  • 更新邏輯:一種對消息作出反應并更新狀態的方法

這是一種將用戶界面劃分為不同概念的好方法,這些概念很容易推理。Iced社區也在迅速發展,GitHub上有超過2.4萬顆星星。

Tauri

Tauri是一個基于rust的庫,通過利用HTML、CSS和JavaScript等web技術為UI構建輕量級桌面應用程序。你可以使用任何可以編譯成HTML、CSS和JavaScript的前端框架。

與依賴于Chromium和Node.js的Electron(一個JavaScript桌面應用開發框架)不同,Tauri使用的是系統的原生web視圖。這使得的二進制文件更小和使用更有效的資源。

可以使用Tauri框架開發一個從前端到后端邏輯的全棧桌面應用程序。Tauri也擁有強大的社區支持,擁有超過81k個GitHub顆星。

后端Web框架

后端開發是web開發中關注服務器端的一個方面,典型的后端框架包括數據庫管理、會話處理、模板、ORM和數據庫遷移等功能,用于構建和維護可靠的web應用程序。

Rocket

Rocket是一個流行的Rust異步web框架,它簡化了開發。它抽象了web開發的許多潛在復雜性,因此你可以專注于使用用戶友好的API構建主要業務邏輯,而不會影響安全性和速度。

作為最早的Rust框架之一,它在GitHub上擁有超過24k顆星。

下面是一個簡單的Rocket服務器示例,它接受兩個查詢參數并返回一個Happy Birthday消息:

#[macro_use] extern crate rocket;

#[get("/<name>/<age>")]
fn birthday(name: &str, age: u8) -> String {
    format!("Yayyy, {}, you are {} years old! Happy Birthday to you.", name, age)
}

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/birthday-message", routes![hello])
}

Actix Web

Actix Web是一個基于參與者模型的后端Web框架,可以構建大規模復雜的Web應用程序。雖然它很復雜,但它公開了底層實現以支持進一步的定制。

下面是一個簡單的Happy Birthday API的例子,使用Actix Web來了解它是什么樣子的:

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

#[get("/birthday-message/{name}/{age}")]
async fn birthday(name: web::Path<(String, u8)>) -> impl Responder {
    format!(
        "Hello, {}, you are {} years old! Happy Birthday!",
        name.0, name.1
    )
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(birthday))
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

它有一個龐大的開發者社區,在GitHub上擁有超過21k顆星。

Axum

Axum是一個現代的、異步優先的web框架,建立在流行的Tokio生態系統之上,旨在構建可擴展和可維護的web應用程序。

Axum是一個非常健壯的web框架,但它并沒有暴露太多底層實現以避免復雜性,因為它試圖對社區中的新開發人員更友好,所以與Actix相比,你不會看到很多可怕的泛型,因為它抽象了其中的一些。它功能強大,支持許多現代web api,如HTTP/2、WebSockets等。

與Actix Web相比,Axum讓初學者更容易構建中間件,這是我認為Axum最好的特性之一。

下面是一個簡單的Happy Birthday API的例子:

use axum::{extract::Path, routing::get, Router};

async fn birthday(Path((name, age)): Path<(String, u8)>) -> String {
    format!(
        "Yayyy, {}, you are {} years old! Happy Birthday to you.",
        name, age
    )
}

#[tokio::main]
async fn main() {
    let app = Router::new().route("/birthday/:name/:age", get(birthday));
    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

Axum的社區規模很大,而且還在不斷增長,在GitHub上擁有超過18.3k顆星。

Warp

Warp的設計是快速、輕量級和可組合的,開始使用它并開始構建高性能api是很容易的。

為了進一步說明使用Warp是多么容易,這里有一個簡單的API,模仿我們一直在使用的相同的Happy Birthday示例。它現在看起來短了很多,但仍然很容易理解:

use warp::Filter;

#[tokio::main]
async fn main() {
    let birthday = warp::path!("birthday" / String / u8)
        .map(|name, age| {
            format!("Yayyy, {}, you are {} years old! Happy Birthday to you.", name, age)
        });
    warp::serve(birthday)
        .run(([127, 0, 0, 1], 3030))
        .await;
}

Warp在GitHub上有超過9.5k顆星,它的開發者社區還在繼續增長!

Tide

Tide是一個小型框架,類似于Express.js (Node.js)、Sinatra (Ruby)和Flask (Python),用于快速開發,異步構建web應用程序。它擁有在大多數成熟的web框架中可以找到的大部分功能,包括路由、認證、套接字、日志、模板引擎、中間件、測試和其他實用程序。

下面是一個簡單的Happy Birthday應用程序:

use tide::Request;

async fn birthday(_req: Request<()>) -> tide::Result<String> {
    Ok("Happy Birthday! 
".into())
}

#[async_std::main]
async fn main() -> tide::Result<()> {
    let mut app = tide::new();
    app.at("/birthday").get(birthday);
    app.listen("127.0.0.1:8080").await?;
    Ok(())
}

Tide使用async-std,這是為了異步實現的速度和安全性而構建的,它在GitHub上也有大約5k顆星。

比較最流行的Rust web后端框架

Actix、Rocket、Axum和Warp都是流行的Rust web框架,每個框架都有自己獨特的功能和優勢。下面讓我們仔細看看它們的共同點:

非阻塞IO

Actix、Rocket、Axum和warp都使用Rust的async/await語法為web應用程序提供非阻塞I/O操作。這允許更好的性能和可伸縮性,因為框架可以同時處理多個請求而不會阻塞或減慢速度。

中間件

中間件是web框架中的一個常見特性,它允許開發人員在請求-響應周期中添加功能,例如日志記錄、身份驗證和錯誤處理。所有最流行的Rust web框架——Actix、Rocket、Tide和warp都支持中間件。

WebSocket

它們都支持WebSocket,但是使用WebSocket的具體語法和特性可能因框架而異,因此框架的選擇將取決于項目的具體需求。

高并發性

Actix和Axum可能更適合需要高并發性和高性能的應用程序,而Rocket和warp可能更適合優先考慮易用性和靈活性的應用程序。

責任編輯:武曉燕 來源: coding到燈火闌珊
相關推薦

2024-08-12 15:44:06

2024-07-31 09:28:56

2023-10-16 08:55:43

Redisson分布式

2023-04-10 07:40:36

GraphQLRest通信模式

2022-07-19 08:04:04

HTTP應用層協議

2023-06-03 00:05:18

TypeScriptJSDoc掃描器

2024-11-13 09:22:40

2024-04-12 08:54:13

從庫數據庫應用

2020-07-21 18:54:21

Rust類型轉換語言

2023-12-07 08:35:22

2025-02-28 00:03:00

2023-06-06 08:14:18

核心Docker應用程序

2023-04-26 22:52:19

視覺人臉檢測人臉對齊

2021-03-09 09:55:02

Vuejs前端代碼

2021-09-03 06:46:34

MyBatis緩存后端

2023-04-26 01:25:05

案例故障模型

2021-12-26 18:30:56

嵌入式ARM鏈接

2023-06-30 07:30:38

2015-09-06 16:03:57

2021-07-28 07:01:09

薅羊毛架構Vue+SSR
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久国产 | 成人高潮片免费视频欧美 | 特级做a爰片毛片免费看108 | 91精品国产高清一区二区三区 | 在线视频一区二区三区 | 在线中文字幕日韩 | 国产精品一二三区 | 成人国产精品久久 | 99福利| 久久国色 | 久久综合香蕉 | aⅴ色国产 欧美 | 特级黄一级播放 | 欧美一区视频 | 中文字幕电影在线观看 | 91精品国产综合久久久密闭 | 天天弄| 久久国产成人精品国产成人亚洲 | 欧美日韩精品中文字幕 | 亚洲第一成年免费网站 | 国产成人综合av | 久久中文字幕一区 | 国产精品99久久久久久宅男 | 午夜影院在线观看版 | 国产精品18久久久久久久 | 日韩中文字幕一区 | 91av视频 | 在线观看中文视频 | 欧美日韩国产一区二区三区 | 九九热最新地址 | 一区二区三区福利视频 | 欧美日韩高清一区 | 91精品国产一区二区三区 | 欧美日韩精品一区二区三区四区 | 亚洲一区二区久久 | 精品美女在线观看 | 日本精品视频一区二区三区四区 | 亚洲精品日本 | 免费激情网站 | 免费黄色大片 | 在线中文字幕视频 |