递归火山软件开发平台
标题: 【JadeView 2.0】打造火山视窗未来UI,新一代前端框架 [打印本页]
作者: 落雪有声 时间: 6 小时前
标题: 【JadeView 2.0】打造火山视窗未来UI,新一代前端框架
JadeView v2.0
基于 Rust 的下一代高性能 WebView 窗口库
全新 API 架构 | Python SDK2 | 系统托盘 | 全局热键 | 多显示器支持
极致轻量 | 零依赖 | 原生渲染 | 16ms 启动
DLL < 1 MB · 无额外运行时 · 系统内置 WebView2 · IPC < 1 ms
调用系统原生 WebView2(Edge 内核),无需打包浏览器引擎
支持 HTML/CSS/JS 构建桌面界面,DLL 体积不足 1 MB
资源与链接
▌ 快速概览
启动性能对比(不计算 HTML 加载时间)
测试环境:易语言下核心启动至窗口显示。来自 jade.run/spec/behavior 官方数据。
| 框架 | 启动耗时 | 核心架构 |
| JadeView | 16 ms | Rust + wry |
| Electron 23 | 1400 ms | Chromium + Node.js |
| NW.js 0.70 | 850 ms | Chromium + Node.js |
| CEF / CefSharp | 数百毫秒 | Chromium |
JadeView 完整启动流程(含加载 HTML 内容):约 300 ms
IPC 通信性能对比
| 框架 | 往返延迟 | 并发处理能力 | 架构特点 |
| JadeView | < 1 ms | > 800 请求/秒 | 自定义协议 + Rust 实现 |
| Electron 23 | 10-50 ms | ~100 请求/秒 | Chromium + Node.js IPC |
| NW.js 0.70 | 8-40 ms | ~150 请求/秒 | Chromium + Node.js IPC |
| CEF / CefSharp | 5-30 ms | ~200 请求/秒 | Chromium IPC |
IPC 性能优势:CPU 消耗降低 30%-50%,内存占用降低 20%-40%(相比传统 IPC 方案)
架构特点
- 技术栈:Rust + wry(WebView)+ tao(窗口管理)+ tokio(异步运行时)+ serde(序列化)
- 异步架构:初始化非阻塞;create_webview_window 立即返回 window_id,实际创建在事件循环线程中异步完成
- 线程安全:所有 API 函数均为线程安全(互斥锁保护全局状态、无共享可变状态)
- IPC 协议:基于 Fetch API 的自定义协议,发布-订阅模式事件系统
- 分层架构:核心层 → API 层 → SDK 层 → 应用层
- 内存安全:Rust 所有权模型 + 自动内存释放,无直接 malloc/free 调用
▌ v2.0 升级指南
新增接口(14 个符号)
| 接口 | 说明 |
| create_borderless_webview_window | 创建无系统标题栏的 WebView 窗口 |
| get_window_hwnd | 仅无边框窗口可通过此函数获取 HWND 供 Win32 API 使用 |
| set_protocol_service_path | 替代旧版 create_local_server,将本地文件夹挂载为内置协议根 |
| yaml_set / yaml_get | 在数据目录读写 YAML 配置 |
| getPath / getLocale / get_displays_info | 获取常用系统路径、系统界面语言(BCP47)、多显示器信息 |
| clear_data_directory | 清空本应用数据目录(需携带确认令牌) |
| jadeview_version | 读取 JadeView 自身版本字符串 |
| register_url_scheme 等 | 自定义协议注册 / 文件关联 |
| register_global_hotkey 等 | 全局热键,收到 global-hotkey 事件 |
| 系统托盘相关 | 托盘图标、菜单、事件(见 SDK 文档 "系统托盘" 分栏) |
API 变更对照
| v1.x 旧接口 | v2.0 新接口 | 说明 |
| create_local_server | set_protocol_service_path | 本地文件夹挂载为内置协议根 |
| remove_titlebar / borderless / no_center | frame_style + x/y=-1 | 统一窗口边框样式 |
| (新增) | register_global_hotkey | 全局热键注册 |
| (新增) | register_url_scheme | 自定义协议注册 |
| (新增) | yaml_set / yaml_get | 内置 YAML 配置读写 |
| (新增) | get_displays_info | 多显示器信息查询 |
| (新增) | get_window_hwnd | 获取 Win32 HWND 句柄 |
| (新增) | 系统托盘系列 API | 图标 / 菜单 / 通知 / 事件 |
破坏性变更
- 字段移除:旧版 remove_titlebar、borderless、no_center 已移除,改用 frame_style 和 x/y=-1 居中;create_local_server 废弃,替换为 set_protocol_service_path
- 初始化签名升级:JadeView_init 从旧版变为 6 参数(新增 app_name / app_signature / single_instance 必填)
- WebView 与窗口一一对应:统一暴露 window_id;navigate_to_url 等 API 均通过 window_id 标识目标窗口
- 单实例模式:single_instance=1 时,第二次启动将命令行转发至已有实例,触发 second-instance 事件
- 统一数据目录:默认为 %LOCALAPPDATA%\{app_signature}_data,作为 WebView2 会话与配置存储基准
▌ 核心 API 参考
WebViewWindowOptions — 窗口配置
字段顺序必须与 JadeView.h 一致,少填 / 多填 / 类型错位会导致静默读错内存。
| 字段 | 说明 |
| title | 窗口标题栏文字 |
| width / height | 初始尺寸(像素) |
| resizable | 是否允许调整尺寸 |
| frame_style | 边框样式:normal / no-titlebar / borderless / title-overlay(Windows 专属) |
| transparent | 是否透明背景 |
| background_color | 窗口背景色(如 #1A1A2E) |
| theme | 主题:Light / Dark / System |
| maximized / fullscreen | 启动时最大化 / 全屏 |
| x / y | 窗口坐标,均设 -1 时系统自动居中 |
| always_on_top | 置顶显示 |
| focus | 打开后是否获取键盘焦点 |
| hide_window | 创建但不立即显示(预加载) |
| use_page_icon | 使用网页 favicon 作为窗口图标 |
| content_protection [NEW] | 防录屏 / 截屏保护(v2.0 新增) |
| auto_save_state [NEW] | 自动记忆窗口位置和大小,450ms 防抖落盘(v2.0 新增) |
| min_width / min_height / max_width / max_height | 最小 / 最大允许尺寸 |
WebViewSettings — 网页行为控制
传 NULL 表示全用默认。
| 字段 | 说明 |
| autoplay | 媒体自动播放 |
| background_throttling | 后台时降低定时器 / 动画频率(节能) |
| disable_right_click | 禁用网页右键菜单 |
| ua | 自定义 User-Agent |
| preload_js | 页面加载前注入的 JavaScript 代码 |
| allow_fullscreen | 允许网页使用全屏 API |
| postmessage_whitelist | postMessage 转发白名单,值为 UTF-8 字符串;event.origin 等于该字符串或其以此为后缀时放行;NULL 时不放行任何来源;set_protocol_service_path 加载的内置静态页不受此限制 |
核心 C 函数
JadeView_init — 初始化运行时
启动库内部的 GUI 线程和事件循环,登记应用名、数据目录、单实例设置。调用成功后,还需等 app-ready 事件。
[C++] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
int32_t JadeView_init(
int32_t enable_devmod, // 开发能力开关(DevTools 等),正式发布传 0
const char* log_path, // 日志文件路径;NULL = 不写文件
const char* data_directory, // 数据根路径;NULL = 系统默认位置
const char* app_name, // 应用显示名,必填,用于协议 / 通知等
const char* app_signature, // 应用唯一标识,必填,至少 6 字符
int32_t single_instance // 非 0:整机只允许一个进程;再开转发命令行
);
返回值:1 = 已启动 GUI 但未就绪,须等 app-ready;0 = 启动失败(参数错或作为第二实例被踢)。
app-ready 事件返回值
| 情况 | window_id | event_data |
| 正常启动完成 | 1 | 文本 success |
| app_name / app_signature 校验失败 | 0 | JSON:{"ok":false,"code":"...","message":"..."} |
| GUI 线程崩溃 | 0 | 纯文字错误说明 |
必须在 JadeView_init 之前就注册 app-ready(jade_on("app-ready", ...)),否则会漏掉第一条通知。
run_message_loop — 运行消息循环
在"exe 自己跑消息循环"的旧集成方式中可能用到。DLL 嵌入场景下,循环已在 JadeView_init 起好的线程中跑,一般不用调。
[C++] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
int32_t run_message_loop(void);
cleanup_all_windows — 清理全部窗口
关闭所有 JadeView 窗口、收尾资源、让事件循环结束,相当于退出前清理。
[C++] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
int32_t cleanup_all_windows(void);
// 返回值:1 = 已发起关闭与清理;0 = 失败(尚未完成初始化)
SDK 生态
| SDK | 状态 | 适用场景 |
| Web SDK(JS/TS) | 稳定 | WebView 内的 IPC 通信接口(jade.invoke / jade.expose) |
| Python SDK2 | v2.0 新增 | ctypes 封装,支持窗口 / IPC / 托盘 / 通知 / 对话框 |
| Python SDK | 稳定 | v1.x 绑定,窗口管理与 IPC 路由 |
| 易语言 SDK | 已更新 | 专为易语言开发者设计,对接 v2.0 全量 API |
| 火山视窗 SDK | 已更新 | 窗口、WebView、IPC、托盘、通知和对话框完整支持 |
下载包文件
| 文件 / 目录 | 说明 |
| jadeview.dll | 核心运行时(< 1MB) |
| JadeView.h | C 头文件,结构体声明(字段顺序以此为准) |
| sdk/web/ | Web SDK(JS/TS) |
| sdk/python/ | Python SDK(v1.x 绑定) |
| sdk/python2/ [NEW] | Python SDK2(v2.0 全新) |
| sdk/elanguage/ | 易语言 SDK |
| sdk/volcano/ | 火山视窗 SDK |
| docs/ | 离线 API 文档 |
| examples/ | 各语言示例项目 |
▌ JAPK 打包格式
JAPK 是 JadeView 专属的应用资源包格式,将前端资源打包为单个 .japk 文件(签名效验机制,防篡改,隐私安全加密),分发简单、加载快速、支持混淆与签名。
打包方式
| 方式 | 命令 / 工具 | 内容保护 | 签名 | 适用场景 |
| Electron ASAR | asar pack my-app app.japk | 明文 | 无 | 开发测试 |
| JadePack(非签名) | 图形界面,一键构建 | XOR 混淆 | 无 | 基础保护需求 |
| JadePack(签名) | 图形界面,勾选签名 | 混淆 + 签名校验 | 有 | 生产环境,防篡改 |
加载方式
JadeView 通过 set_protocol_service_path API 加载 JAPK 包,API 返回协议 URL 用于 WebView 导航:
[C++] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
#include "jadeview.h"
void load_japk_example() {
char url_buffer[256];
const char* japk_path = "C:\\path\\to\\your\\app.japk";
int32_t result = set_protocol_service_path(
japk_path,
url_buffer,
sizeof(url_buffer)
);
if (result == 1) {
printf("协议 URL: %s\n", url_buffer);
// 使用 url_buffer 导航 WebView
}
}
注意:JadeView 完全兼容 Electron ASAR 格式,使用 @electron/asar 创建的包可直接加载。
打包前无需特殊配置文件,原始目录树结构会被保留。
▌ SDK 快速入门
JadeView — 让桌面开发回归简单
https://jade.run | v2.0 在线文档
作者: 沉默流星 时间: 6 小时前
支持
作者: 先生 时间: 3 小时前
很强
作者: 朕的 时间: 2 小时前
111111
作者: 寒风 时间: 半小时前
支持
作者: Fang0x378 时间: 19 分钟前
浏览器套壳软件真的好用吗?我们**的一款软件就是浏览器套壳,跟老太太下楼一样,点个复选框时不时都失败
| 欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) |
Powered by Discuz! X3.4 |