>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
C

如何在五分钟内用 HTML 启动 GUI,无需 Electron 和痛苦

想象这样一种情况:您用 C++、Go 或 Python 编写了一个很棒的工具。它运行快速、计算准确,但通过终端使用只对您来说方便。客户或同事要求一个"正常界面"。然后麻烦就开始了。安装 Qt?太重且学习时间长。用 Electron 编写?您将不得不为几个按钮拖动数百兆字节的 Chromium 和 Node.js。

最近我遇到了 WebUI。这是一个小型 C 库,优雅地解决了这个问题:它将系统上安装的任何浏览器变成您的图形界面。无需不必要的依赖和庞大的二进制文件。

Logo

这里的诀窍是什么

WebUI 的主要理念是:浏览器已经是一个现成的、完美优化的 GUI 引擎。每个用户都已经有了它。如果可以连接到已经安装的那个,为什么还要在您的应用程序里打包另一个 Chrome 实例呢?

与 Tauri 不同,WebUI 不会强迫您去折腾系统 WebView 组件(尽管也存在这样的选项)。该库只是在应用模式下启动一个浏览器会话,并通过 WebSocket 组织一个快速通信通道。

Diagram

底层原理

该库只有几千字节。它是一个单一的头文件,易于集成到现有项目中。以下几点引起了我的注意:

  • 跨平台。在 Windows、Linux 和 macOS 上运行同样可预测。
  • 支持所有流行浏览器。Chrome、Firefox、Edge 甚至 Yandex.Browser 都能"即时"被识别。
  • 独立配置文件。该程序不会将您应用程序的 Cookie 与用户浏览器中的个人数据混合。
  • 可移植性。构建项目无需安装重型 SDK。

代码中的样子

让我们看一个经典的"Hello World"。用 C 语言写几乎像脚本一样,没有魔法和代码转储:

#include "webui.h"

int main() {
    size_t window = webui_new_window();
    webui_show(window, "<html><script src=\"webui.js\"></script> Hello World! </html>");
    webui_wait();
    return 0;
}

这是 C++ 中的示例,一切都包装在方便的对象中:

#include "webui.hpp"

int main() {
    webui::window my_window;
    my_window.show("<html><script src=\"webui.js\"></script> Привет из C++! </html>");
    webui::wait();
    return 0;
}

仅仅几行代码——您就拥有了一个具有 HTML/CSS 内容的完整窗口。同时,后端仍然使用您喜欢的语言,无论是 Python、Rust、Go 还是 Pascal。

重量级对比

开发者在 GitHub 上提供了一个出色的表格,它清楚地展示了为什么 WebUI 追求极简主义。如果 Electron 需要在包内包含 Chromium 和 Node.js,WebUI 除了系统中的浏览器外什么都不需要。这节省了 RAM 和磁盘空间。即使是现代 WebView 解决方案如 Tauri,在 Linux 上也会拉取 GTK 或 WebKitGTK 等依赖,而 WebUI 只是打开一个浏览器窗口。

谁以及何时会用到这个

当然,WebUI 无法替代那些对界面有微秒级响应要求的复杂专业工具。但有很多情况下它会成为救星。

如果您为公司制作一个小型内部工具,WebUI 可以帮助您在晚上用 Bootstrap 或 Tailwind 拼凑一个界面。对于原型设计,这几乎是理想的选择:您专注于后端逻辑,前端就像普通网站一样绘制。

一个有趣的点是——SSL/TLS 支持。如果您的应用程序需要安全性,WebUI 允许您在构建时通过一个简单的标志启用 OpenSSL 支持。

总结

WebUI 对于那些厌倦了重型 GUI 框架的人来说是一股新鲜空气。该项目正在积极开发中,在 GitHub 上已有超过 4,000 颗星,并且有大量针对不同编程语言的封装库。

值得一试如果:

  • 您需要一个快速美观的 GUI,但没有时间学习 Qt。
  • 您不想让二进制文件大小膨胀到数百兆字节。
  • 您的前端开发者懂 HTML/JS,而您懂系统编程。

我不会推荐将其用于高负载游戏,但对于系统工具、仪表板和配置工具——这几乎是理想的选择。您可以从 webui.me 的官方文档开始,那里一切都写得很清楚。

相关项目