纯 rust 实现的前后端分离的博客,大家给点建议意见

2022-03-08 10:19:14 +08:00
 TOLIVEIN
  1. 最近在学习 rust, 恰好朋友前段时间用 rust 开发了一个博客应用,觉得还不错,单纯学习 rust 也可以看下
  2. 项目信息:
    • 纯 rust 写的全栈博客应用,前端使用 yew, 后端使用 actix-web + diesel + postgres
    • github 地址:https://github.com/ppbl/scicode
    • 博客地址:https://scicode.ppbl.top/
    • 目前支持 github 登录,发帖,评论,主题。
    • 本身功能不复杂,只是纯用 rust 感觉比较有意思
    • 后续功能完善中
4601 次点击
所在节点    Rust
21 条回复
ppbl
2022-03-08 10:40:06 +08:00
👍,已 star ,最近正好在学习 rust, 感觉今年 rust 是一个趋势
TOLIVEIN
2022-03-08 10:43:52 +08:00
@ppbl 😂owner 还用 star 吗
hccsoul
2022-03-08 10:48:14 +08:00
你为啥用我老婆做头像 他都送我戒指了🐶
TOLIVEIN
2022-03-08 10:49:57 +08:00
@hccsoul 她还送我祖传大剑了呢😎
agagega
2022-03-08 11:07:36 +08:00
yew 现在用起来感觉怎么样?印象里基于 Wasm 的前端好像还不太成熟的样子
TOLIVEIN
2022-03-08 11:10:44 +08:00
@agagega 我在里面划了划水哈哈😜,肯定不如直接写 js html 舒服,但是是能用的程度。不过最新版本 yew 删了好多东西,都换成第三方的 crate 了
ppbl
2022-03-08 11:12:03 +08:00
@agagega 用起来还行,常规的功能基本都能实现,只是目前打包出来的 wasm 文件有一点点大,2.4M
blu10ph
2022-03-08 11:24:00 +08:00
评论功能有开关吗?国内不让整~
ppbl
2022-03-08 11:42:38 +08:00
@blu10ph 是加个开关,可以禁止别人评论自己的帖子吗
TongNianShanHe
2022-03-08 13:57:17 +08:00
我是后端用了 rust ,前端用的 vue+element ,前端用 rust 的加载速度和 wasm 大小咋样😂
Kilerd
2022-03-08 14:11:28 +08:00
hmmmm 我只能说这个项目的后端 actix 部分的使用,可以算是还没入门阶段
ppbl
2022-03-08 14:16:30 +08:00
@Kilerd 😂看来遇到大佬了,是边学 rust 边写的,主要用实现功能,后面慢慢熟悉了继续优化代码。有哪个方面的意见可以指出来吗
ppbl
2022-03-08 14:19:20 +08:00
@TongNianShanHe wasm 2.4m, 首次加载略慢后面有缓存就好了,运行时速度目前感觉跟前端框架没有太大差距
Kilerd
2022-03-08 14:26:43 +08:00
1. lazy_static 已经 out-date 了,once_cell 是更佳主流的选择
2. 满屏幕的 unwrap expect 只要稍微有一点网络波动,你的 actix-worker 就炸掉了,尝试用一用 thiserror 或者 anyhow ,不然你的所有错误都不能返回一个正常的 http status
3. 既然使用了 diesel 建议用上 diesel_migration 的 embedded_migration 来做 migration
4. 在 async controller 里面满眼都是 diesel 的同步操作,意思就是你的 controller 根本就没有享受到 async 带来的好处。选择 diesel 就要学怎么用 actix 的 actor 模型跟 diesel 做组合。 不然就老老实实换成 sqlx 这种异步的数据库操作库
5. 满屏的 HttpResponse::Ok().json(results) ,actix-web 的默认 impl Responder 对于 Serialize 对象就是 Json 处理。
6. let token = req.headers().get(AUTHORIZATION); authentication 的处理也是让人震惊,
pub struct AuthenticationUser {...}
impl FromRequest for AuthenticationUser {...};
async fn required_login(user: AuthenticationUser) {...}
async fn optional_login(user: Option<AuthenticationUser>) {...}
7. reqwest 的请求建议都写上 timeout 不然很容易炸掉整个 runtime
Kilerd
2022-03-08 14:30:01 +08:00
BTW ,你前端部分 WASM 大的原因也是有的。yew 里面不推荐用 reqwest 来做 fetch ,我记得是有一个自带的 fetch 还是什么方法的,不需要引入一个那么庞大的库。
ppbl
2022-03-08 14:36:57 +08:00
@Kilerd 👍受益匪浅 下班回去就学习改造一下~0.19 没有自带的 fetch 了,我回去再看看尝试换个小的 crate
v2ka
2022-03-08 15:57:44 +08:00
做博客来说,完成度太低了。

这样别人也没法用,成型再发布吧。
blu10ph
2022-03-08 15:57:49 +08:00
评论功能有开关吗?国内不让整~
@ppbl 额,是关掉评论功能,和没有一样~
tulongtou
2022-03-08 16:04:58 +08:00
文章和评论评论的时间没有正确显示东八区的时间
ppbl
2022-03-09 00:11:50 +08:00
@Kilerd

1. lazy_static 已修改为 once_cell
2. 如果有用 HttpResponse::Ok 的地方,使用了更多的 HttpResponse::XXX 表示对应的状态,否则直接用 web::json
3. impl FromRequest for Claims(其实就是 AuthenticationUser, 只是用了 jwt 暂时用这个名字)

非常感谢大佬的指点👍,其他的后面慢慢再优化一下

@tulongtou

已修复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838789

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX