Bento: 单文件 HTML 演示工具
Bento: 单文件 HTML 演示工具
Bento 是一款演示工具,它将整个应用程序——包括幻灯片数据、查看器和编辑器——整合到一个单一的 HTML 文件中。这种架构允许用户在任何现代浏览器中打开演示文稿,进行就地编辑,并进行保存,而无需账号、安装或外部服务器依赖。
核心架构:单文件应用
Bento 以“单文件 Web 应用”的方式运行,软件本身即是该文件。运行时被固定在 HTML 文档内部,确保演示文稿不会随着时间的推移而“腐烂”,并只要有浏览器即可访问。
技术实现
根据开发者 starfallg 的介绍,HTML 文件分为两个主要部分:
- Slide Data: 位于文件顶部附近的一个纯 JSON 块,使得文档可以通过外部工具或 AI agent 进行读取和搜索 (grep-able)。
- Application Logic: 应用以 base64 blob 的形式存储,并通过一个小的 shim 进行加载。它使用
DecompressionStream在浏览器中解压应用,从而保持较小的文件体积(默认幻灯片约为 560 KB)。
数据持久化与更新
当用户保存 (⌘S) 时,Bento 使用 File System Access API 将 JSON 数据写回同一个 HTML 文件。它在启动时还会检查一个已签名的清单 (manifest) 以处理更新,不过用户可以禁用此功能。
核心演示功能
Bento 提供高保真度的演示体验,重点关注动态效果和交互式数据。
动态过渡与动画
Bento 利用 GSAP/Flip 来处理动画。它具有“Morph”过渡功能,共享相同 ID 的元素会在幻灯片之间对位置、大小、颜色和渐变进行动画处理,从而创造出无缝的视觉流。
交互式与实时数据
与静态幻灯片不同,Bento 集成了实时图表和交互状态:
Live Charts: 图表是具有活动工具提示 (tooltips) 和缩放功能的真实实例。数据可以在不同的图表类型之间进行变形(例如,从柱状图变为饼图或散点图),同时保持相同的数据集。
Interactive Scenes: 用户可以在单个幻灯片内创建“场景”——本质上是隐藏的状态,可以通过按钮进行链接,从而在不跳转到下一张幻灯片的情况下重新排列元素或更改布局。
Live-Linked Tables: 编辑表格数据会实时更新关联的图表和增长线。
内容创作
Bento 内置了一个编辑器(通过按下 Esc 访问),并支持 Markdown 以实现即时的排版和格式化(列表、代码块和删除线)。
协作与安全
虽然 Bento 优先考虑离线使用,但它通过“盲中继 (blind relay)”系统支持可选的实时协作。
- CRDTs 与加密: 协作由无冲突复制数据类型 (CRDTs) 和加密数据驱动。托管在 Cloudflare Durable Objects 上的中继仅能看到加密的负载,从而确保了隐私。
- 访问控制: 协作通过分享邀请文件来启动。访问通过用户密钥进行管理,允许创建者分配只读权限或撤销用户的访问权限。
社区反馈与见解
Hacker News 上的用户就该工具的实用性和潜在改进讨论了以下几点:
“非常适合使用 agent 进行编辑并与同事分享。甚至在移动端表现也很好。嵌入图像和视频也运行得非常完美。”
“知道我需要的一切都在一个文件里,这种感觉非常令人满足。”
一位用户 (@aag) 注意到了关于隐私的一个差异,观察到虽然主页声称“不会向主页发送任何信息”,但某些 Bento 文件包含 cloudflareinsights.com 的信标。其他用户建议添加一个禁用所有动画的设置以提高无障碍性,或者将该工具作为一种输出格式集成到 Pandoc 中。