Rust Web框架怎么选?

在最新的web框架基准测试中

  • https://www.techempower.com/benchmarks
  • https://web-frameworks-benchmark.netlify.app/result?l=rust

除去一些没有发布分支或者已经很少维护或者不是rust写的框架外,可以看到AxumActix-web是目前性能最好的两款后端框架,不一定性能好就用,适合自己的才最重要!

在这里插入图片描述

在这里插入图片描述

由于部分Web框架并不是纯粹的后端框架,而是像Nextjs既可以写前端也可以前后端一起写的Web框架,还有像Reactjs这种纯粹的前端框架,这里做出两种分类:后端框架、前端/全栈框架;由于发布版本不代表功能齐全,所有框架附上当前的Star数量(2024/8/26)

后端框架

1、 Axum ★18k:Tokio团队开源,Axum目前旨在与Tokio运行时、Tower模块化、Hyper HTTP传输层配合使用

  • 将请求路由到具有无宏API的处理程序
  • 使用提取器声明性地解析请求
  • 简单且可预测的错误处理模型
  • 用最少的代码生成响应
  • 充分利用由中间件、服务和实用程序组成的tower和tower-http生态系统
  • 支持 WebSocket
  • 100%安全Rust实现

2、Actix-Web ★21.1k:建立在Tokio上的轻量框架

  • 具有可选宏的请求路由
  • 支持HTTP/1HTTP/2
  • 支持流式传输和管道传输
  • 支持WebSockets
  • 支持SSL:Open SSL或Rustls
  • 集成Logger、Session、CORS等中间件

3、Rocket ★24.1:简洁的写法

  • 大量宏
  • 支持模板引擎和数据库集成等功能
  • 支持WebSockets

4、Warp ★9.4k:建立在Hyper上的Web框架,基于Futures和Tokio,核心是Filter过滤请求

  • 支持Gzip、Deflate、Brotli压缩
  • 支持HTTP/1.xHTTP/2
  • 支持WebSockets

5、Tide ★5k:基于async/await的Web框架

  • 注重可扩展性和灵活性

6、Salvo ★3.1k:使用Hyper、Tokio构建的Web后端框架,Go风格

  • 内置OpenAPI、HTTP/1.xHTTP/2HTTP/3
  • 统一的中间件和处理接口
  • 支持Acme,自动从let’s encrypt获取TLS证书
  • 支持Tower服务和Layer

前端/全栈框架

  • Trunk:构建打包WebAssemnly的工具,可以将编写的代码打包为Html、CSS、Js,并将WasmJs绑定,相当于WebpackRollupRspackTurbopackRolldown(总有一个你认识的,后三个都是rust编写的)
  • SEO:搜索引擎优化,让您的网站更有可能出现在搜索引擎结果中的做法,搜索引擎使用网络爬虫来索引网站内容,这些爬虫大多数都无法运行 JavaScript,因此如果您的页面在客户端呈现,它们将无法索引页面内容

1、Tauri ★81.2k:跨平台全栈框架,以HTML、CSS 和 JavaScript的方式构建应用

  • 支持macOS、Windows、Linux、iOS、Android
  • 使用WRY与各平台WebView交互
  • 支持Rust、Js、Ts作为后端语言
  • 支持结合到Vue、React、Next、Yew、等Web框架中,也可以直接创建对应Web框架的应用

2、Yew ★30.4k:支持WebAssemnly的响应式web前端框架,类似 React 的函数组件

  • 使用虚拟 DOM
  • 使用wasm-bindgen
  • 写法类似于TSX,逻辑和UI写在一起
  • 专门设计SPA
  • 支持SSR(实验阶段)
  • 社区维护,社区案例多

3、Dioxus ★20k:支持WebAssemnly的响应式跨平台全栈框架,Dioxus 深受 React 的启发,适合那些需要频繁与服务器通信(如实时协作应用程序)但不需要与那么多客户端/浏览器 API 通信的应用

  • 支持macOS、Windows、Linux、iOS、Android,桌面、移动、Web应用
  • 使用虚拟 DOM,但不diffing真实 DOM 直接渲染UI
  • 支持热重载
  • 支持WebView、WebGPU、Skia
  • 支持SSR、SEO
    • 使用Liveview渲染,数据通过WebSocket发送,SEO不友好
    • 使用全栈渲染,SEO友好
  • 支持SSG
  • 与Axum集成
  • 大量unsafe rust
  • 结合了 React、Solid 和 Svelte 的优点,使用RSX

4、leptos ★15.7k:支持WebAssemnly的响应式全栈web框架

  • 不依赖于虚拟 DOM,对真实 DOM 进行细粒度的更新
  • 完美集成Tailwind
  • 热加载模板更新
  • 支持SSR、SEO友好
  • 声明式UI

5、Sycamore ★2.8k:支持WebAssemnly的响应式web前端框架,和Solid很相似

  • 不依赖于虚拟 DOM ,对真实 DOM 进行细粒度的更新
  • 不需要Js
  • 支持SPA
  • 支持SSR、SEO友好
  • 大量unsafe rust

6、Perseus ★2.1k:基于Sycamore全栈框架

  • 支持SSG
  • 支持SSR、SEO友好
  • 支持增量更新、按需构建
  • 支持热重载
  • 使用Fluent提供i18n国际化

7、MoonZoon ★1.8k:支持WebAssemnly的全栈Web框架,作者的理念:“我们不想因为数百万不必要的技术决策而浪费时间和金钱。” 啥都不需要?你需要Rust!

  • 不需要 Javascript
  • 不需要 CSS
  • 不需要 REST
  • 不需要 SQL
  • 不需要HTML
  • 支持SSR、SEO友好
  • 提供鉴权

总结

如果追求性能、教程案例、解决方案数量

后端:想用多用宏就用Actix-web,不想用宏就用Axum,个人更看好Axum

前端:只写前端页面选Yew;全栈应用选Dioxus;跨平台选Tauri

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python,json数据格式,pyecharts模块,pycharm中安装pyecharts

json数据格式 JSON是一种轻量级的数据交互格式 可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能: json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互. 类似于: 国…

手撕python之基本数据类型以及变量

​​​​​​1.基础概念 python就是将不同的数据划分成了不同的类型 就像我们生活中的数据有数字、字符等数据一样 小知识点: 注释:# 全体注释:AltF3 取消注释:AltF4 2.数值类型 数值类型概括 数值类型分为三种&#xff…

JavaWeb JavaScript ⑤ JS常见对象

某一瞬间,是平静的自我接纳 —— 24.8.27 一、数组 1.创建数组的四种方式 ① new Array() 创建空数组 ② new Array(5) 创建数组时给定长度 ③ new Array(ele1,ele2,…,elen); 创建数组时给定元素值 ④ [ele1,ele2,…,elen] 相当于…

【STM32单片机_(HAL库)】3-4-3【中断EXTI】【智能排队控制系统】排队系统代码框架搭建

3-4-2系统框图及硬件接线 3.软件 beep、exti、gate、LCD1602、led、tasks驱动文件添加GPIO常用函数中断配置流程main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "tasks.h" #include "gate.h"…

腾讯浙大提出定制化视频生成框架CustomCrafter,只需通过少量图像就可以完成高质量视频生成!

腾讯联合浙大提出了一种定制化视频生成框架-CustomCrafter,它能够基于文本提示和参考图像生成自定义视频,同时保留运动生成和概念组合的能力。通过设计一系列灵活的模块,使得模型实现了无需额外视频,通过少量图像学习,…

嵌入式:用J-Link Commander和J-Flash进行Flash编程的区别

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 J-Link Commander和J-Flash都是用于Flash编程的工具,但它们的功能和应用场景有所不同。以下是两者的区别: J-Link Commander: 类型: 命令行工…

机械学习—零基础学习日志(如何理解概率论4)

当已知一个概率,求解另外一个函数的概率。以下是离散型的概率计算方法。 这里是连续型的,已知概念密度,计算对应的另外一个函数的概率。 这里需要求解对应的原始函数。 这里我们做一道练习题。 《概率论与数理统计期末不挂科|考研零基础入门…

什么是Redis大key问题?如何解决?

目录 Key多大算大呢? 识别big key 处理big key Big Key是Redis中存储了大量的数据的Key,不要误以为big key只是表示Key的值很大,他还包括这个Key对应的value占用空间很多的情况,通常在String、list、hash、set、zset等类型中出…

使用Vue创建cesium项目模版该如何选择?

目录 问题描述模版说明及选用建议小结 问题描述 刚入手这个项目,什么都是一知半解。使用Vue,创建Cesium项目的时候,提示需要选择一个模版(如下图所示),该如何选择项目模版选,总结如下: 模版说明…

大模型入门到精通——Prompt Engineering工程

Prompt Engineering 1. Prompt Engineering 的意义 在 LLM(大语言模型)时代,Prompt Engineering(提示工程)已经成为开发者与用户的重要技能和概念。随着大模型(如 GPT、GLM、BERT 等)的快速发…

8.26DEBUG

线程负责监听和处理不同的需求 顾客:代表需要被监控的文件句柄或网络socket,他们可能有各种需求,如点餐(发送数据)、询问菜品状态(读取数据)或需要帮助(异常处理) 菜单…

数据结构(邓俊辉)学习笔记】串 05——KMP算法:理解next[]表

文章目录 1.快速移动2.避免回溯3.通配哨兵 1.快速移动 在接下来这节,就让我们从严格的意义上来理解 next 表的具体含义及其原理。 我们已经切实地看到, KMP 算法的优化效果首先体现在它可以使模式串得以快速地后移,而不是如蛮力算法那样只…

【STM32单片机_(HAL库)】3-4-4【中断EXTI】【智能排队控制系统】项目实现

3-4-2系统框图及硬件接线 3-4-3系统代码框架搭建 4.软件—tasks.c文件编写 排队控制系统状态机 tasks.c #include "tasks.h" #include "led.h" #include "beep.h" #include "exti.h" #include "lcd1602.h" #include &…

22. K8S及DevOps

22. K8S及DevOps 一. 章节简介二. DevOps1. 简介2. CICD三. Kubernetes[1. 官网](https://kubernetes.io/zh-cn/)--------------------------------------------------------------------------------------------------------一. 章节简介 二. DevOps 1. 简介 2. CICD

【C语言】文件操作 (详细!!)

1、为什么使用文件 使用文件的原因:使用文件主要是为了在程序的执行过程中保存、读取和交换数据。文件提供了一种持久化存储数据的方式,使得程序在关闭后,数据不会丢失,可以被其他程序或后续的程序执行周期重新读取和处理。 1.0 什…

Spring Boot启用GZIP压缩

1.为什么是需要gzip压缩? 经常我们都会与服务端进行大数据量的文本传输,例如 JSON 就是常见的一种格式。通过 REST API 接口进行 GET 和 POST 请求,可能会有大量的文本格式数据提交、返回。然后对于文本,它有很高的压缩率&#x…

神经网络——最大池化

1.Pooling Layers讲解: 最大池化有时也被称为下采样,对应的有上采样。注意ceil_mode参数的使用 2.代码实战: import torch from torch import nn from torch.nn import MaxPool2dinputtorch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],…

react 的学习随记

npx create-react-app my-app 创建一个名叫my-app的react的项目 npm run eject 运行 显示config 文件夹 react jsx (使用时将babel 将jsx转为js) 单页面时需要引用 1,样式(在虚拟dom时) 1. 引用样式时 用classNa…

ESP8266通过WiFiManager实现Web配网

背景 一个项目中使用到了一款压力传感器,需要通过单片机实现数据的采集并发送到远程的服务器上,单片机采用的时ESP8266,通过WiFiManager实现局域网配置,以及远端服务器IP地址和服务端口的配置。发布此文章记录一下使用WiFiManager实现配网的方法。 程序流程图 示例代码 …

NLP发展脉络-->特征优化阶段

NLP特征优化阶段 文本预处理特征提取降维与特征选择特征组合与扩展特征选择与评估特征工程的优化模型可解释性偏统计和规则的特征化阶段优缺点优点缺点 这是NLP的一个发展阶段。今天,我们就来了解一下NLP的特征优化阶段。特征优化在NLP的发展中曾经是一个至关重要的…