长久以来,我们习惯用 JavaScript 进行 web 页面开发,后来又开始使用 node.js 进行 web 服务器端开发。这种全栈开发方式很实用,但也受到性能及可维护性的困扰。
随着 WebAssembly 日渐成熟,除了 JavaScript 之外,还可以选择 rust 语言来进行全栈开发了!
maomi 是我最近开始着手设计实现 rust 语言的组件化开发框架。maomi 类似于 web 开发者所熟知的 react 、 vue 框架,但它使用 rust 语言编写,与 rust 语言风格紧密融合,同时大量借助 rust 强大的编译期静态检查能力和 rust 系统级编程语言的优异性能。
rust 般强大的编译期检查能力,尽早发现代码中的 bug ;
编译到 WebAssembly ,性能优秀; 类 MVVM 的定义式、组件化开发; 支持服务器端渲染。
—— Hello World ——
先来个 hello world 示例代码吧!在 maomi 框架中,每个页面(或组件)都由三部分组成:模板、 struct 数据定义和对 Component trait 的实现。
首先,写一段 HelloWorld 模板。这段模板是类 XML 语法的,通过名为 template! 的 macro 直接嵌入 rust 代码里面。
template!(xml for HelloWorld {
<div style="display: inline">
{ &self.a } // 可以用 rust 表达式来引入动态数据
<slot >
</div>
});
复制
然后,给 HelloWorld 定义一些数据,这些数据项可以用在上面的模板里面。
struct HelloWorld {
a: String,
}
复制
最后,给 HelloWorld 实现 Component trait ,可以实现一些生命周期方法。其中 new 方法是必不可少的,在实例被创建时会调用。
impl<B: Backend> Component<B> for HelloWorld {
fn new(_ctx: ComponentContext<B, Self>) -> Self {
Self {
a: "Hello world!".into()
}
}
}
复制
这样,我们就做出了一个 HelloWorld 页面(组件也是类似的做法)。要把它显示在网页里的话,就要把它“挂载”到 HTML 里面。具体做法可以参考完整示例代码:
为了让这段示例代码能够运行起来,需要以下工具:
rust 编译工具链; wasm-pack :https://rustwasm.github.io/wasm-pack/ ; webpack 。
首先执行 wasm-pack 来将 rust 代码编译成 WebAssembly ,然后执行 webpack 来打包。
$ wasm-pack build
$ webpack
复制
运行起来之后,页面内就会显示出“Hello world!”。
—— 开发状态 ——
maomi 还在早期开发之中,不过已经比较完整了,具备一定的可用性。近期我会用它制作一个博客引擎,在实际用例中完善特性。
GitHub:
https://github.com/LastLeaf/maomi
里面的 example 中有几个用例可供参考。
如果对 maomi 感兴趣,欢迎 watch - start - fork 三连!也欢迎与我联系,和我一起讨论你的想法、参与开发!
—— 什么?你问我它和某可爱生物有什么联系?