V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TOLIVEIN
V2EX  ›  Rust

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

  •  2
     
  •   TOLIVEIN · 2022-03-08 10:19:14 +08:00 · 5017 次点击
    这是一个创建于 1021 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 最近在学习 rust, 恰好朋友前段时间用 rust 开发了一个博客应用,觉得还不错,单纯学习 rust 也可以看下
    2. 项目信息:
      • 纯 rust 写的全栈博客应用,前端使用 yew, 后端使用 actix-web + diesel + postgres
      • github 地址:https://github.com/ppbl/scicode
      • 博客地址:https://scicode.ppbl.top/
      • 目前支持 github 登录,发帖,评论,主题。
      • 本身功能不复杂,只是纯用 rust 感觉比较有意思
      • 后续功能完善中
    21 条回复    2022-03-30 16:17:05 +08:00
    ppbl
        1
    ppbl  
       2022-03-08 10:40:06 +08:00
    👍,已 star ,最近正好在学习 rust, 感觉今年 rust 是一个趋势
    TOLIVEIN
        2
    TOLIVEIN  
    OP
       2022-03-08 10:43:52 +08:00
    @ppbl 😂owner 还用 star 吗
    hccsoul
        3
    hccsoul  
       2022-03-08 10:48:14 +08:00
    你为啥用我老婆做头像 他都送我戒指了🐶
    TOLIVEIN
        4
    TOLIVEIN  
    OP
       2022-03-08 10:49:57 +08:00
    @hccsoul 她还送我祖传大剑了呢😎
    agagega
        5
    agagega  
       2022-03-08 11:07:36 +08:00 via iPhone
    yew 现在用起来感觉怎么样?印象里基于 Wasm 的前端好像还不太成熟的样子
    TOLIVEIN
        6
    TOLIVEIN  
    OP
       2022-03-08 11:10:44 +08:00
    @agagega 我在里面划了划水哈哈😜,肯定不如直接写 js html 舒服,但是是能用的程度。不过最新版本 yew 删了好多东西,都换成第三方的 crate 了
    ppbl
        7
    ppbl  
       2022-03-08 11:12:03 +08:00
    @agagega 用起来还行,常规的功能基本都能实现,只是目前打包出来的 wasm 文件有一点点大,2.4M
    blu10ph
        8
    blu10ph  
       2022-03-08 11:24:00 +08:00
    评论功能有开关吗?国内不让整~
    ppbl
        9
    ppbl  
       2022-03-08 11:42:38 +08:00
    @blu10ph 是加个开关,可以禁止别人评论自己的帖子吗
    TongNianShanHe
        10
    TongNianShanHe  
       2022-03-08 13:57:17 +08:00 via Android
    我是后端用了 rust ,前端用的 vue+element ,前端用 rust 的加载速度和 wasm 大小咋样😂
    Kilerd
        11
    Kilerd  
       2022-03-08 14:11:28 +08:00 via iPhone
    hmmmm 我只能说这个项目的后端 actix 部分的使用,可以算是还没入门阶段
    ppbl
        12
    ppbl  
       2022-03-08 14:16:30 +08:00
    @Kilerd 😂看来遇到大佬了,是边学 rust 边写的,主要用实现功能,后面慢慢熟悉了继续优化代码。有哪个方面的意见可以指出来吗
    ppbl
        13
    ppbl  
       2022-03-08 14:19:20 +08:00
    @TongNianShanHe wasm 2.4m, 首次加载略慢后面有缓存就好了,运行时速度目前感觉跟前端框架没有太大差距
    Kilerd
        14
    Kilerd  
       2022-03-08 14:26:43 +08:00   ❤️ 2
    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
        15
    Kilerd  
       2022-03-08 14:30:01 +08:00
    BTW ,你前端部分 WASM 大的原因也是有的。yew 里面不推荐用 reqwest 来做 fetch ,我记得是有一个自带的 fetch 还是什么方法的,不需要引入一个那么庞大的库。
    ppbl
        16
    ppbl  
       2022-03-08 14:36:57 +08:00
    @Kilerd 👍受益匪浅 下班回去就学习改造一下~0.19 没有自带的 fetch 了,我回去再看看尝试换个小的 crate
    v2ka
        17
    v2ka  
       2022-03-08 15:57:44 +08:00
    做博客来说,完成度太低了。

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

    已修复
    wjx0912
        21
    wjx0912  
       2022-03-30 16:17:05 +08:00
    star+follow
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4877 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 03:59 · PVG 11:59 · LAX 19:59 · JFK 22:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.