当 Delphi 团队需要在浏览器中展示业务应用时,第一个问题总是相同的:选择哪个 Web 框架?2026 年有五个可信赖的 Delphi 原生选项:IntraWeb、UniGUI、TMS WEB Core、TMS XData 和 sgcHTML。每个解决方案的实现方式不同,各有其最适合的应用场景。本文将逐一诚实地分析每个选项,然后说明 sgcHTML 在哪些方面具有独特优势。
IntraWeb — 最早的 Delphi Web 框架
IntraWeb 自 2001 年起就已存在。其模型简单直接:服务器端将 VCL 窗体渲染为 HTML。如果您熟悉 Delphi 窗体,就可以构建 IntraWeb 页面。状态保存在服务器端,浏览器本质上是一个轻量级显示层。对于并发用户数量适中的内部工具,这种方式仍然有效。
IntraWeb 的不足之处在于主题设计和现代布局。它生成自己的 HTML 和 CSS,这些早于 Bootstrap 和 flexbox 出现。要获得响应式、移动友好的页面需要大量 CSS 覆盖工作。生成的标记冗长,难以与现代设计系统集成。IntraWeb 也完全是有状态的:每个用户在访问期间都在服务器端持有一个会话对象,这限制了横向扩展能力。
UniGUI — 成熟、功能丰富、有状态
UniGUI 是功能最完整的 Delphi Web 框架。其组件面板非常丰富(表格、图表、树形结构、地图、文件上传、富文本编辑器、触摸支持),主题系统也十分成熟。底层使用 Sencha ExtJS,这是一个强大的 JavaScript 组件库,能生成接近原生桌面质量的精美界面。
权衡之处在于复杂性和有状态架构。UniGUI 会话在服务器上保存完整的组件状态。并发用户众多的繁忙应用需要大量内存和细致的会话管理。ExtJS 层虽然功能强大,但并非 Bootstrap,这意味着每个熟悉 Bootstrap 的新员工都需要学习一套平行的知识体系。许可证按开发者和服务器收费,而许可证的服务器端费用在云部署中尤为重要。
TMS WEB Core — 编译为 JavaScript 的客户端 Pascal
TMS WEB Core 采取了相反的方法:使用支持 WebAssembly 的编译器将 Object Pascal 应用程序编译为 JavaScript。结果完全在浏览器中运行;您的 Delphi 窗体事件作为 JavaScript 事件触发。UI 使用 Bootstrap 或 Material Design,TMS WEB Core 附带一套不断增长的可视化组件。
这是真正巧妙的技术,在某些用例中运行良好,特别是需要离线能力或极低服务器负载的自包含浏览器应用程序。限制在于部署模型。编译输出是一组静态 JavaScript 文件和资源,必须构建、版本化并单独提供服务。添加功能意味着重新构建并重新部署客户端包。以前安全存放在服务器上的业务逻辑现在在浏览器中运行,这对敏感计算提出了安全性问题。与现有 Delphi 服务器端组件(如 TsgcWebSocketClient、FireDAC 连接)集成需要架构工作,因为编译后的 JavaScript 无法直接调用原生 Delphi 单元。
TMS XData — REST 后端,而非 Web UI 框架
TMS XData 值得一提,因为它经常与 Web UI 框架进行比较,但它并不是一个 Web UI 框架。XData 使用 OpenAPI 3.0 和 JSON 从 Delphi 服务类生成 REST API。前端必须单独构建 — 可以使用 TMS WEB Core、React、Angular 或任何支持 HTTP 的技术。XData 在其擅长的领域表现出色,但当您需要浏览器界面时,它并不能消除对独立前端技术的需求。
sgcHTML — 基于标准 Bootstrap 5 的服务器端组件
sgcHTML 与上述所有框架处于不同的定位。它是一个服务器端组件库,其输出是标准 Bootstrap 5 HTML。组件本身是 Delphi 类(TsgcHTMLComponent_Chart、TsgcHTMLComponent_DataTable 等);您通过属性配置它们并读取一个 HTML 字符串。该字符串进入您的 HTTP 响应,浏览器使用 Bootstrap 渲染它。htmx(一个 14 KB 的库,无需构建步骤)处理交互性:点击和表单提交返回到您的 Delphi 处理程序,处理程序响应一个 HTML 片段,htmx 交换页面的相关部分。
架构是无状态的。每个请求构建所需内容,返回 HTML 并完成。服务器上没有需要维护的每会话组件树。横向扩展极为简单:在同一个 .exe 的两个实例前放置一个负载均衡器即可。
并排对比
| 特性 | IntraWeb | UniGUI | TMS WEB Core | sgcHTML |
|---|---|---|---|---|
| 架构 | 有状态服务器端窗体 | 有状态 ExtJS 会话 | 客户端 Pascal→JS | 无状态服务器端 HTML |
| 输出标记 | 专有 HTML + CSS | ExtJS JSON/HTML | 标准 Bootstrap | 标准 Bootstrap 5 |
| 交互性 | 整页刷新或 AJAX | ExtJS AJAX | 在浏览器中运行 | htmx 片段 + WebSocket |
| 实时 WebSocket 推送 | 否(附加组件) | 有限 | 通过 JS WebSocket API | 是 — 一级支持(sgcWebSockets) |
| 可扩展性 | 受会话状态限制 | 受会话状态限制 | 无状态(静态文件) | 无状态,横向扩展 |
| 需编写的 JavaScript | 无 | 极少 | 无(从 Pascal 编译) | 无 |
| 需要 npm / Node.js | 否 | 否 | 是(构建步骤) | 否 |
| 单二进制部署 | 是 | 是 | 否(JS 包 + 资源) | 是 |
| DataSet 绑定 | 是 | 是 | 通过 JS 桥接 | 是(直接支持 TDataSet/TDataSource) |
| UI 组件数量 | 约 40 个 | 80+ | 50+ | 60+ |
| 移动端/响应式 | 部分支持 | 是(ExtJS Touch) | 是(Bootstrap) | 是(Bootstrap 5) |
| .NET 版本 | 否 | 否 | 否 | 是(.NET 6+) |
sgcHTML 的明显优势
实时仪表板。由于 sgcHTML 基于 sgcWebSockets 构建,提供 HTML 页面的同一服务器也处理 WebSocket 连接。股价更新、新的传感器读数或已完成的生产运行,可以通过单个 Broadcast 调用将 HTML 片段推送到每个连接的浏览器标签页。无需轮询,无需单独的推送基础设施,无需额外许可证。IntraWeb 和 UniGUI 的 WebSocket 支持有限,需要额外的集成工作。TMS WEB Core 可以使用浏览器原生 WebSocket API,但需要客户端 JavaScript 逻辑来处理传入消息。
无需定制开销的标准标记。由于输出是 Bootstrap 5 HTML,任何熟悉 Bootstrap 的设计师都可以为其添加样式。主题是标准 Bootstrap 主题,存在数百个免费和付费主题,可即时应用。IntraWeb 和 UniGUI 生成框架特定的标记,需要学习单独的样式系统。
无状态且可横向扩展。每个 sgcHTML 请求都是独立的。服务器上没有每用户会话对象。同一可执行文件的两个负载均衡实例可互换地处理请求。IntraWeb 和 UniGUI 将请求路由回持有会话的特定服务器实例,使云部署复杂化。
单可执行文件部署。Bootstrap CSS、Chart.js 和 htmx 是嵌入在 Delphi 二进制文件中的资源。部署 sgcHTML 意味着复制一个 .exe 文件。TMS WEB Core 生成的 JavaScript 包和一组资源必须单独进行版本化和提供服务。
无构建工具链。不需要 npm、webpack、Babel 或 Node.js。编译您的 Delphi 项目然后发布即可。这在受监管环境和本地部署中极为重要,因为在这些环境中安装 Node.js 工具链需要 IT 部门审批。
直接代码对比:数据表格
为了更具体地说明差异,以下是如何在 sgcHTML 中从 FireDAC 查询渲染可搜索、分页的数据表格:
uses
sgcHTML_Component_DataTable;
var
oTable: TsgcHTMLComponent_DataTable;
begin
oTable := TsgcHTMLComponent_DataTable.Create(nil);
oTable.PageBuilder := oPage.PageBuilder;
oTable.Section := 'data';
oTable.Title := 'Customers';
oTable.ShowSearch := True;
oTable.ShowExport := True;
oTable.LoadFromDataSet(fdqCustomers, 25); // 25 rows per page
// Read oTable.HTML and include it in your response
end;
结果是一个响应式、可搜索、分页的 Bootstrap 表格,带有排序指示器、搜索框和导出按钮。浏览器在初始页面加载时无需额外的服务器往返即可渲染它。过滤和分页使用 htmx 仅交换表格片段,而不是整个页面。
何时选择替代方案
sgcHTML 并非总是正确的选择。如果您有一个包含数百个窗体和完善主题系统的大型现有 IntraWeb 或 UniGUI 应用程序,迁移它意义不大。当您需要媲美甚至超越 Excel 的深度表格功能(冻结列、单元格编辑器、行分组、透视表),或者当您希望为高级用户后台工具提供 ExtJS 的精美界面时,UniGUI 是更好的选择。当您需要一个完全在浏览器中离线运行且无需服务器的应用程序,或者当您想通过 CDN 将单页应用作为静态文件分发时,TMS WEB Core 是正确的选择。
sgcHTML 是最佳选择的情况:
- 您正在现有 Delphi 后端的基础上构建新的 Web 界面,且不想管理单独的 JavaScript 项目。
- 应用程序需要从服务器推送实时数据(交易屏幕、物流仪表板、监控、聊天)。
- 您需要响应式、移动友好的 Bootstrap 5 界面,团队设计师可以使用标准 Bootstrap 工具为其添加主题。
- 部署必须是单个可执行文件,无外部依赖。
- 您的目标平台同时包括 .NET(C#)和 Delphi,并希望在两个平台上使用相同的组件 API。
试用 sgcHTML
包含全部 60+ 组件且无功能限制的免费试用版可在 esegece.com/products/sgchtml/download 获取。下载包含四个可运行的演示应用程序(ERP、Admin Console、Live Monitor 和 Customer Portal),在真实场景中展示组件面板。
有疑问或想与特定现有项目进行对比?请与我们联系。您将收到编写代码的团队的回复。
