首页 > 其他分享 >rust webassembly 优化参考资料

rust webassembly 优化参考资料

时间:2023-12-06 10:26:05浏览次数:38  
标签:webassembly WebAssembly 参考资料 wasm 模块 unknown 优化 rust

这几天在学习webassembly,尤其是cerbos lite 对于webassembly 的支持,所以简单整理一些

chatgpt给的一些建议

WebAssembly(Wasm)的优化涉及多个方面,包括编译器优化、代码结构调整、资源管理和压缩等。以下是一些通用的 WebAssembly 优化策略:

  1. 编译器优化:
    • 使用适当的编译器标志启用优化。在编译时,通常有不同的优化级别可供选择。
    • 使用针对 WebAssembly 的特定优化标志。例如,对于 Rust 编程语言,可以使用 --target wasm32-unknown-unknown -O 启用优化。
  2. 代码结构调整:
    • 将代码模块化,只导入和使用实际需要的功能。这有助于减小单个模块的大小,并且只有在需要时才加载额外的模块。
    • 使用代码拆分(code splitting)将大型应用程序分割为小块,以减小初始加载时的文件大小。
  3. 资源管理:
    • 确保没有不必要的资源或库打包到 WebAssembly 模块中。只包含项目需要的最小依赖。
    • 使用适当的数据结构和算法,以减小模块的内存占用。
  4. 压缩:
    • 使用专门的 WebAssembly 压缩工具,例如 wasm-opt,以减小文件大小。这些工具执行各种优化和压缩步骤。
    • 使用 gzip 或 Brotli 等通用压缩算法来减小传输过程中的文件大小。
  5. 避免不必要的复杂性:
    • 避免不必要的代码复杂性和深层嵌套,以减小模块的体积。清理和简化代码结构。
  6. 预编译:
    • 在部署之前,可以考虑将 WebAssembly 模块预编译为二进制格式,以提高加载速度。
  7. 缓存:
    • 利用浏览器缓存机制,确保 WebAssembly 模块和相关资源可以被缓存,从而减小每次加载的开销。
  8. 性能分析:
    • 使用性能分析工具,例如 Chrome DevTools 或其他浏览器开发者工具,来检查 WebAssembly 模块的性能瓶颈,从而有针对性地进行优化。

实际一些玩法

日常中基于rust 开发webassembly 的比较多,此时我们对于release 应该开启lto,同时可以使用一些工具比如wasm-opt,wasm-strip 之后对于文件大小的优化还是很不错的,目前在分析cerbos 的webassembly 生成的时候发现他们似乎没有使用一些主流的webassembly 框架(比如wasm_bingen,或者wasm-pack)似乎是直接基于wasm64-unknown-unknown 的target 构建生成的,只是包装了check 以及poliicy 文件(ci/cd 集成中处理的)
cargo.toml 参考配置,同时下边也有一些资料

 
[profile.release]
lto = true

参考资料

https://github.com/WebAssembly/binaryen
https://github.com/WebAssembly/wabt
https://doc.rust-lang.org/cargo/reference/profiles.html
https://rustwasm.github.io/docs/wasm-bindgen/reference/optimize-size.html
https://doc.rust-lang.org/rustc/platform-support/wasm64-unknown-unknown.html

标签:webassembly,WebAssembly,参考资料,wasm,模块,unknown,优化,rust
From: https://www.cnblogs.com/rongfengliang/p/17878910.html

相关文章

  • cerbos lite webassembly 处理简单说明
    上次简单说明了下cerboslite对于webassemblypolicy集成的说明,通过查看liteclient简单说明下参考处理ci/cd集成处理这个也比较符合官方hub的ci/cd机制,核心是通过git的repo管理,集成ci/cd构建webassembly文件,webassembly核心exporter的方法主要是图片右下方的,之后......
  • 一些基于webassembly 的serverless 框架
    基于webassembly的一些serverless框架是比较多的,以下是以下参考,基本上基于rust开发的比较多,当然也有基于golang的参考资料https://wasmcloud.com/https://scale.sh/https://github.com/loopholelabs/scalehttps://github.com/wasmCloud/wasmCloudhttps://github.com/vmware-lab......
  • Spin 基于rust 开发的开源运行基于webassembly serverless 工具
    spin是基于rust开发的,可以用来开发以及运行基于webassemblyserverless服务的工具包含的特性提供了周边扩展 默认wasm只提供了基本类型的支持,wasm提供了不少扩展可以方便的支持不同语言的调用(比如网络,数据库访问)提供了快速应该开发的cli提供了服务部署的能力 包含了本地测试......
  • wasmer 基于webassembly 的平台
    wasmer基于webassembly的平台,目前包含了runtime,registry,edge等组件说明wasmer属于一个插件化的设计,目前支持wasix,wasi以及Emscripten,同时还提供了不少语言sdk方便代码嵌入同时wasmer也提供了就很不错的性能,很值得学习试用下参考资料https://docs.wasmer.io/https://docs.wa......
  • 10. 从零用Rust编写正反向代理, HTTP内网穿透支持修改头信息
    wmproxywmproxy是由Rust编写,已实现http/https代理,socks5代理,反向代理,静态文件服务器,内网穿透,配置热更新等,后续将实现websocket代理等,同时会将实现过程分享出来,感兴趣的可以一起造个轮子法项目++wmproxy++gite:https://gitee.com/tickbh/wmproxygithub:https://github.com/tic......
  • rust使用动态连接库实现两个数的求和
    1.1创建库项目cargonew--libplugincdplugin1.2编写加法功能函数vimsrc/lib.rs#[no_mangle]pubexternfnadd(left:usize,right:usize)->usize{left+right}#[cfg(test)]modtests{usesuper::*;#[test]fnit_works(){......
  • rust HTTP客户端reqwest快速入门
    这篇文章主要是收集了reqwest一些常用的代码片段,便于以后直接复制使用,对标之前go语言的net/http客户端的快速入门教程。reqwest版本:0.11.22参考依赖配置:[dependencies]reqwest={version="0.11.22",features=["json","multipart"]}tokio={version="1",features=......
  • rust的musl toolchain
    rust项目常常会使用musl作为编译target,这个时候就会使用musl的工具链。musltoolchain安装在$HOME/.rustup/toolchain下面。通常可以用rustup安装,比如:rustupinstallstable-unknown-linux-musl也可以使用rust官方提供的脚本:curl--proto'=https'--tlsv1.2-sSfhttps://......
  • Rust std fs 比 Python 慢!真的吗!?
    作者:XuanwoDatabendLabs成员,数据库研发工程师https://github.com/xuanwo我即将分享一个冗长的故事,从OpenDAL的op.read()开始,以一个意想不到的转折结束。这个过程对我来说非常有启发性,我希望你也能感受到。我会尽力重现这个经历,并附上我一路学到的教训。让我们开始吧!所......
  • Rust std fs 比 Python 慢!真的吗!?
    作者:XuanwoDatabendLabs成员,数据库研发工程师https://github.com/xuanwo我即将分享一个冗长的故事,从OpenDAL的op.read()开始,以一个意想不到的转折结束。这个过程对我来说非常有启发性,我希望你也能感受到。我会尽力重现这个经历,并附上我一路学到的教训。让我们开始吧!......