rust 如何在按钮上运行一个缓慢的任务:用Leptos点击?

2ic8powd  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(127)

我尝试PGP加密字符串客户端当用户点击一个按钮,这似乎是超级慢。首先,当运行在调试/开发模式与trunk serve --open它需要时间来加载页面与下面的代码。如果我编译在生产模式trunk build --release,那么它的速度更快,但仍然加载慢得多(~3- 5秒)相比,JavaScript等效。
1.我如何运行一个需要更长时间在Leptos中处理的任务,因为下面的代码会冻结UI几秒钟。
1.有什么想法我可以让它运行得更快吗?我希望它在速度方面与JavaScript版本相似。

use base64::{engine::general_purpose, Engine as _};
use leptos::*;
use sequoia_openpgp::serialize::stream::{Encryptor, LiteralWriter, Message};
use std::io::Write;

#[component]
pub fn App() -> impl IntoView {
    let (data, set_data) = create_signal("".to_string());

    view! {
        <div>
            <pre>{move || data.get()}</pre>
            <button on:click=move |_| {
                    let mut sink = vec![];
                    let message = Encryptor::with_passwords(Message::new(&mut sink), Some("password"))
                        .build()
                        .unwrap();
                    let mut w = LiteralWriter::new(message).build().unwrap();
                    let _ = w.write_all(b"Hello world.");
                    let _ = w.finalize();
                    let b64 = general_purpose::STANDARD.encode(sink);

                    set_data.set(b64.clone());
                }
            >
                "Encrypt"
            </button>
        </div>
    }
}

pub fn main() {
    mount_to_body(|| {
        view! {
            <App />
        }
    })
}

字符串

gxwragnw

gxwragnw1#

不幸的是,我不太了解加密,但这可以帮助你:

  • 生成单独的线程来处理加密
  • 让服务器处理加密,而不是使用服务器函数。同时,您可以使用Suspend和resource显示加载html(您可以在leptos文档中了解更多信息)
  • 找到另一个库来处理您的加密和/或根据您的需要相应地配置它

相关问题