丢掉WebView,使用JS+Rust开发跨端桌面应用-Deft
简介
随着Web技术的发展,越来越多的跨端应用选择了WebView作为基础解决方案。诚然WebView让跨端应用开发变得简单了很多,极大的提高了开发效率,但是,WebView也存在着一些广为诟病的缺点,比如内存占用大,包体积大,系统调用不方便等。所以,Deft诞生了。
Deft是一个高性能跨平台开源UI框架,底层使用Rust开发,支持使用JS/React开发界面,目前支持Linux,Windows,MacOS和Android等系统。为了提高性能,Deft提供了便捷高效的方式使用Rust开发API和UI组件。
快速开始
开始前,系统需要先安装nodejs,Rust,clang14+,如果未安装,直接去官网下载安装即可。
执行下面命令,快速创建新工程,demo为新工程名称。
npm create deft@latest demo
根据自己的喜好选择语言和框架,这里,以TypeScript+React为例。
命令执行完后,会在当前目录下创建一个demo项目,执行下面命令启动项目。
cd demo
npm install
npm run dev
启动成功后,会得到如下输出:
...
webpack 5.91.0 compiled successfully in 1995 ms
==============================================
Press r to run on this device
Press a to run on connected android device
Press q to quit
==============================================
按r,即可开始构建预览应用。首次构建,需要下载依赖,所以耗时可能会比较长,可以配置cargo镜像提高下载速度。
构建成功后,就能看到预览窗口了,可以直接修改ui目录下的JS/TS文件实时预览效果。

资源占用
内存63M,应用体积包31.5M
目录结构
├── android -- 安卓工程相关文件
├── build.rs -- Cargo构建脚本
├── Cargo.lock
├── Cargo.toml -- Cargo项目配置文件
├── dev-hack.js
├── package.json -- JS项目配置文件
├── package-lock.json
├── src -- Rust源代码
│ └── main.rs
├── tsconfig.json -- TypeScript配置文件
├── ui -- JS/TS源代码
│ ├── app.tsx
│ ├── deft-env.d.ts
│ └── main.ts
└── webpack.config.js -- Webpack配置文件
打包
执行下面命令即可打包
npm run build
打包完成后,会在target/你的系统架构/release/目录下生成一个单独的可执行二进制文件(包含编译后的JS代码),将其拷贝出来即可。
文档 & Demo参考
Github:https://github.com/deft-ui/deft
文档:https://deft-ui.github.io/guides/what-is-deft/
官方同时提供贪吃蛇,视频播放器,视频格式转换器,SPICE远程桌面客户端等多个Demo,可直接前往 https://deft-ui.github.io/demos/ 查看。
丢掉WebView,使用JS+Rust开发跨端桌面应用-Deft的更多相关文章
- js组件开发-移动端地区选择控件mobile-select-area
移动端地区选择控件mobile-select-area 由于之前的[js开源组件开发]js手机联动选择地区仿ios 开源git 很受欢迎,于是我又对其进行了一些优化,包括可选的范围变大了,添加了默认空 ...
- nuxt.js 本地开发跨域问题(Access-Control-Allow-Origin)及其解决方案
先运行npm i @gauseen/nuxt-proxy -D 再nuxt.config.js的module.exports 里面添加如下代码 modules:[ '@nuxtjs/axios', / ...
- Taro 3 正式版发布:开放式跨端跨框架解决方案
作者:凹凸曼 - yuche 从 Taro 第一个版本发布到现在,Taro 已经接受了来自于开源社区两年多的考验.今天我们很高兴地在党的生日发布 Taro 3(Taro Next)正式版,希望 Tar ...
- tauri+vue开发小巧的跨OS桌面应用-股票体检
最近打算写一个用于股票体检的软件,比如股权质押比过高的股票不合格,ROE小于10的股票不合格,PE大于80的股票不合格等等等等,就像给人做体检一样给股票做个体检.也实现了一些按照技术指标.基本面自动选 ...
- webview与JS的交互
webview与JS的交互 一:hybird app, web app 和 native app 的区别 Web App Hybird App 混合Native App 开发成本 低 中 高 维护 ...
- 《IM开发新手入门一篇就够:从零开发移动端IM》
登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页 即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM 帖子 打赏 分享 发表评论162 想开 ...
- React / Vue 跨端渲染原理与实现探讨
跨端渲染是渲染层并不局限在浏览器 DOM 和移动端的原生 UI 控件,连静态文件乃至虚拟现实等环境,都可以是你的渲染层.这并不只是个美好的愿景,在今天,除了 React 社区到 .docx / .pd ...
- 移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签)
移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签) 一.总结 一句话总结: 添加viewport标签:meta name="viewport" ...
- 好程序员分享Web前端面试题汇总JS篇之跨域问题
为什么80%的码农都做不了架构师?>>> 好程序员分享Web前端面试题汇总JS篇之跨域问题,接着上一篇文章我们继续来探讨web前端面试必备面试题. 跨域解决方案 1. 通过jso ...
- HarmonyOS新能力让数据多端协同更便捷,数据跨端迁移更高效!
作者:yijian,终端OS分布式文件系统专家:gongashi,终端OS分布式数据管理专家 HarmonyOS作为分布式操作系统,其分布式数据管理能力非常重要.我们也一直围绕持续为开发者带来全局&q ...
随机推荐
- H5 新增表单
1.提示占位 placeholder <input type="text" name="userName" placeholder="请输入用户 ...
- manim边学边做--渐变生长
本篇介绍Manim中的渐变生长类的动画. 这类动画的特点是可以清晰地展示图形的生成过程.物体的运动变化,帮助我们更好地理解抽象概念和复杂结构. 渐变生长类的动画的主要有: GrowArrow:让箭头从 ...
- 数据万象推出智能检索MetaInsight,现已开启限时公测
海量文件的分析统计一直是对象存储COS的热点需求,伴随AIGC飞速迭代发展,在众多不同模态素材的海洋中,用户也急需更高效地管理和利用多媒体内容,打破传统搜索的桎梏. 数据万象推出的智能检索 MetaI ...
- zz 云原生时代,Java的危与机
https://icyfenix.cn/tricks/2020/java-crisis/qcon.html 另一方面,在微服务的背景下,提倡服务围绕业务能力而非技术来构建应用,不再追求实现上的一致,一 ...
- Netty中ByteBuf内存泄露及释放解析
近日在使用Netty框架开发程序中出现了内存泄露的问题,百度加调试了一番,做个整理. 直接看解决方法请移步Netty内存泄漏解决ERROR io.netty.util.ResourceLeakDete ...
- Qt数据库应用15-通用数据库同步
一.前言 数据库同步的主要功能是将本地的数据库记录同步到远程的数据库,其中数据库类型不限,比如本地是sqlite数据库,远程可以是mysql数据库,本地是mysql数据库,远程也可以是postgres ...
- Qt开发经验小技巧121-130
QLineEdit除了单纯的文本框以外,还可以做很多特殊的处理用途. 限制输入只能输入IP地址. 限制输入范围,强烈推荐使用 QRegExpValidator 正则表达式来处理. //正在表达式限制输 ...
- [转]关于opencv4.0中“未定义标识符cvNamedWindow”的解决方法
这个问题困扰了很久,在网上找了很多方法,但是都没用, 比如:"在代码开头加入头文件#include <opencv2/highgui/highgui_c.h>"之类的方 ...
- 即时通讯技术文集(第16期):IM架构设计技术精选(第一部分) [共17篇]
为了更好地分类阅读总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第16 期. [- 1 -] 浅谈IM系统的架构设计 [链接] http://www.52im.net/thread ...
- 开源轻量级 IM 框架 MobileIMSDK 的微信小程序端已发布!
一.基本介绍 MobileIMSDK - 微信小程序端是一套基于微信原生 WebSocket 的即时通讯库: 1)超轻量级.无任何第 3 方库依赖(开箱即用): 2)纯 JS 编写.ES6 语法.高度 ...