Rust写一个wasm入门并在rspack和vite项目中使用(一),2024年最新Github标星25K+超火的前端实战项目

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

安装cargo-generate

cargo install cargo-generate
安装过程中有问题的话手动安装cargo-generate下载地址
根据自己的系统下载压缩包,然后解压到用户/.cargo/bind目录下,将解压后的文件放到该目录下即可。

创建wasm项目

执行cargo generate --git https://github.com/rustwasm/wasm-pack-template,然后输入项目名即可,然后可以看到本地创建了一个项目,目录如下:

wasm
├── Cargo.toml
├── LICENSE\_APACHE
├── LICENSE\_MIT
├── README.md
└── src
    ├── lib.rs
    └── utils.rs


在这里插入图片描述
src/lib.rs是根文件,会被打包编译为wasm

mod utils;

use wasm\_bindgen::prelude::\*;
// 这里暴露web的api供rust调用
#[wasm\_bindgen]
extern "C" {
    fn alert(s: &str);
}

#[wasm\_bindgen]
pub fn greet() {
    alert("Hello, wasm!");
}


wasm-bindgen

wasm-bindgen能够让js和rust之间进行交互。
wasm-bindgen文档

下载依赖

cd进项目,然后执行cargo check安装依赖

打包wasm文件

wasm-pack build --target web
wasm-pack文档地址
在这里插入图片描述
这个命令做了以下几件事:
wasm-pack build 将做以下几件事:

  1. 将你的 Rust 代码编译成 WebAssembly。
  2. 在编译好的 WebAssembly 代码基础上运行 wasm-bindgen,生成一个 JavaScript 文件将 WebAssembly 文件包装成一个模块以便 npm 能够识别它。
  3. 创建一个 pkg 文件夹并将 JavaScript 文件和生成的 WebAssembly 代码移到其中。
  4. 读取你的 Cargo.toml 并生成相应的 package.json。
  5. 复制你的 README.md (如果有的话) 到文件夹中。

发布npm

cd pkg
npm publish --access=public
将我们的wasm包发布npm前端直接下载

前端引入wasm

创建项目

vite的项目pnpm create vite vite-wasm --template react-ts
webpack的项目这里我用的rspack,pnpm create rsbuild@latest
然后安装依赖即可

最后

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。

大厂面试题

面试题目录

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
外链图片转存中…(img-zdNz4woJ-1713385605081)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一个简单的范例。首先,你需要在`Cargo.toml`文件添加`mysql` crate,然后在你的代码导入这个 crate。 ```rust use mysql::{ params, prelude::Queryable, Pool, PooledConn, Row, Transaction, }; // 定义一个连接池结构体 pub struct MysqlPool { pool: Pool, } impl MysqlPool { // 初始化连接池 pub fn new(url: &str) -> Option<Self> { match Pool::new(url) { Ok(pool) => Some(MysqlPool { pool }), Err(_) => None, } } // 从连接池获取一个连接 pub fn get_conn(&self) -> Option<PooledConn> { match self.pool.get_conn() { Ok(conn) => Some(conn), Err(_) => None, } } } // 定义一个查询结果结构体 pub struct QueryResult<T> { pub rows: Vec<T>, } // 定义一个查询 trait pub trait Query<T> { fn query(&self, sql: &str) -> Option<QueryResult<T>>; } // 实现查询 trait impl<T: Row> Query<T> for PooledConn { fn query(&self, sql: &str) -> Option<QueryResult<T>> { match self.query_iter(sql) { Ok(result) => { let rows: Vec<T> = result.map(|x| x.unwrap()).collect(); Some(QueryResult { rows }) } Err(_) => None, } } } // 测试代码 fn main() { let url = "mysql://user:password@localhost:3306/test"; let pool = MysqlPool::new(url).unwrap(); let conn = pool.get_conn().unwrap(); let sql = "SELECT * FROM test_table WHERE id > ?;"; let result: QueryResult<(i32, String)> = conn .exec_iter(sql, params![1]) .unwrap() .map(|row| { let (id, name) = mysql::from_row(row.unwrap()); (id, name) }) .collect(); for row in result.rows { println!("id: {}, name: {}", row.0, row.1); } } ``` 在上面的代码,我们首先定义了一个`MysqlPool`结构体作为连接池,然后定义了一个`QueryResult`结构体作为查询结果,它包含了一个泛型`T`表示查询结果的每一行数据类型。接着,我们定义了一个`Query` trait,它包含了一个泛型`T`表示查询结果的每一行数据类型,和一个`query`方法用于执行查询语句。最后,我们实现了`Query` trait,为`PooledConn`类型添加了`query`方法。在测试代码,我们创建了一个连接池,从连接池获取一个连接,然后执行了一个查询语句,并将结果存储在`QueryResult`结构体,最后遍历查询结果并打印每一行数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值