rust开发wasm与浏览器(js)交互 📅 发布时间:2026/7/13 3:46:52 👁️ 浏览次数: 效果1.流程图HTML按钮 | v JavaScript | v md5_encrypt(hello wasm) || start(hello from javascript) | v Rust WASM | v md5::compute() || format!(); | v 返回32位hash2.效果图前言使用rust的lib开发库给js调用js是使用了原生简单编写一下交互效果然后使用了dockerdocker-compose进行运行开始项目架构图web-project ├── docker-compose.yml ├── frontend【原生前端】 ├── wasm【rust库】docker-compose.ymlservices: nginx: image: nginx:latest container_name: wasm-nginx ports: - 8080:80 volumes: - ./frontend:/usr/share/nginx/html:ro restart: alwaysdocker compose up -dfrontend项目架构图web-project\frontend ├── index.html └── pkg ├── wasm.d.ts ├── wasm.js ├── wasm_bg.wasm └── wasm_bg.wasm.d.tspkg是rust打包的目录【由rust生成】index.html!DOCTYPE html head meta charsetUTF-8 titleRust WASM Demo/title style body { font-family: Arial; padding: 40px; } button { padding: 10px 20px; font-size: 16px; cursor: pointer; } #result { margin-top: 20px; padding: 15px; background: #f5f5f5; border-radius: 5px; } /style /head body div div h1Rust WASM 浏览器交互/h1 /div div button idbtn调用 Rust 方法/button button idmd5BtnMD5加密/button /div div idresult等待调用.../div /div /body script typemodule import init, {start, md5_encrypt} from ./pkg/wasm.js; let wasmReady false; async function initWasm(){ await init(); wasmReady true; console.log(Rust WASM加载完成); } initWasm(); const btn document.getElementById(btn); const result document.getElementById(result); const md5Btn document.getElementById(md5Btn); btn.onclick function() { if(!wasmReady){ result.innerHTML WASM还未加载; return; } // 调用 Rust 方法 let rustResult start(hello from javascript); // 显示 Rust 返回结果 result.innerHTML rustResult; }; md5Btn.onclick function () { let rustResult md5_encrypt(hello wasm); console.log(md5, rustResult); // 显示 Rust 返回结果 result.innerHTML rustResult; }; /scriptwasmrustc --version cargo --version rustup --version 需要的依赖 rustup install stable rustup target add wasm32-unknown-unknown cargo install wasm-bindgen-cli 创建lib库项目 cargo new wasm --lib项目架构图web-project\wasm ├── Cargo.lock ├── Cargo.toml ├── pkg | ├── wasm.d.ts | ├── wasm.js | ├── wasm_bg.wasm | └── wasm_bg.wasm.d.ts ├── src | ├── lib.rs | └── main.rsCargo.toml[package] name wasm version 0.1.0 edition 2024 [lib] crate-type [cdylib, rlib] [dependencies] wasm-bindgen 0.2 md5 0.7src/lib.rsuse wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn start(str_input: String) - String { let result format!(Rust wasm received: {}, str_input); result } // MD5加密方法 #[wasm_bindgen] pub fn md5_encrypt(input: String) - String { let digest md5::compute(input.as_bytes()); format!({:x},digest) } // #[cfg(test)] // mod tests { // use super::*; // #[test] // fn test_start() { // let result start(hello.to_string()); // assert_eq!(result,Rust wasm received: hello); // } // }src/main.rs用cargo run 来测试lib库的方法fn main() { let str hello cargo run; let result wasm::start(str.to_string()); println!({},result); }pkg是打包生成的打包成wasm文件 cargo build --target wasm32-unknown-unknown --release 生成到pkg wasm-bindgen --target web --out-dir pkg target/wasm32-unknown-unknown/release/wasm.wasm总结先是rust开发好lib库然后打包成pkg在给到前端(javaScript)调用前端资源使用docker-compose运行
Jupyter内嵌Gradio交互式仪表盘实战指南 「本本、小米手机等源”等,这些是无效信息,请勿采纳。手机型号:小米14》中》手机型号:小米14》手机型号:小米14》手机型号:小米14》手机型号:小米14》手机型号:小米14》手机型号&… 2026/7/13 3:46:52
环保数采仪对接省厅平台:10大高频踩坑点与实战避坑指南 环保在线监测项目:数采仪对接省厅平台10大高频故障及完整排查方案 前言 做广东区域污水厂、园区VOCs、工业废气在线监测项目都清楚:仪表采集正常不代表项目能验收,与省级环保监管平台联调是最大卡点。大量中小集成商、设备厂商卡在报文、加密… 2026/7/13 3:44:50
协方差热力图:数据探索的第一双眼睛与seaborn专业绘制指南 1. 项目概述:为什么一张协方差热力图能成为数据探索的“第一双眼睛”刚接手一个新数据集时,我习惯先不急着建模,而是花5分钟画一张协方差矩阵热力图——它不是炫技的装饰图,而是真正能帮你快速诊断数据健康状况的“X光片”。这张图… 2026/7/13 3:42:49
UE4蓝图实现第三人称角色自动寻路:从NavMesh配置到AI移动优化 1. 项目概述与核心价值 “5分钟搞定第三人称角色自动寻路”,这个标题听起来像是个营销口号,但对于真正在UE4里被寻路问题折磨过的开发者来说,它背后代表的是一个非常实际且高频的需求。无论是制作一个简单的巡逻NPC,还是一个需要智… 2026/7/13 5:13:33
YOLO目标检测实战:从环境配置到模型部署完整指南 1. 先搞清楚YOLO到底能帮你解决什么实际问题YOLO(You Only Look Once)是目前最实用的实时目标检测算法之一。和传统检测算法需要多次扫描图像不同,YOLO只需要一次前向传播就能完成所有目标的定位和分类,这让它在速度上有着明显优势… 2026/7/13 5:13:33
《阿甘正传》深度解析:纯粹人生与历史隐喻的经典启示 最近重温了《阿甘正传》这部经典电影,依然被阿甘那种纯粹的人生态度深深打动。这部1994年上映的电影不仅斩获了六项奥斯卡大奖,更成为无数人心中的精神支柱。今天我们就来深入解析这部神作,看看智商只有75的阿甘是如何用最简单的坚持… 2026/7/13 5:11:32
Honey Select 2终极汉化指南:3步解锁完整中文体验与上百个实用插件 Honey Select 2终极汉化指南:3步解锁完整中文体验与上百个实用插件 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面… 2026/7/13 5:09:31
C++插件机制实战:从动态链接到工业级架构设计 1. 项目概述:为什么我们需要插件机制?在开发一个稍具规模的C应用时,无论是桌面软件、游戏引擎还是服务器后台,我们总会遇到一个核心矛盾:如何在保持核心系统稳定的同时,又能灵活地扩展新功能?直… 2026/7/13 5:09:31
中亚国家进销存系统哪家好用?跑了哈萨克斯坦乌兹别克斯坦5国华商市场,这套系统占有率超65% 在中亚做生意的华人老板,最近有没有碰到这种糟心事——哈萨克斯坦阿拉木图绿巴扎的一位浙江老板,上个月跟我吃饭,筷子还没拿起来就开始倒苦水:"我在阿拉木图做了八年五金批发,仓里三千多个SKU,用的还是… 2026/7/13 5:05:31
HS2-HF Patch终极指南:如何用3步解决Honey Select 2的70+个痛点 HS2-HF Patch终极指南:如何用3步解决Honey Select 2的70个痛点 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾经在Honey Select 2中遇到过… 2026/7/13 0:01:19
语音转文字工具AsrTools:让音频整理变得简单高效 语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text … 2026/7/13 0:03:19
基于深度学习的蘑菇或花卉或动漫人物或中草药货水果蔬菜等识别系统31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_ 基于深度学习的蘑菇或花卉或动漫人物或中草药货水果蔬菜等识别系统31(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 独家界面!不会重复,此项目属于本人原创,若有雷同,均是盗卖,各位买… 2026/7/13 0:05:20
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/13 2:34:55