Jelly 的帮助文档里,有一个很容易被忽略的细节:截图不是人工打开页面、裁剪、上传,而是在构建时自动从运行中的应用里截出来。
这个点小,但不琐碎。帮助文档最常见的失真,往往不是文字全错,而是 UI 已经改了,截图还停在旧版本。按钮换了位置,弹窗改了文案,颜色和状态有一点差异,用户就会开始怀疑文档是不是还可信。
Jelly 的做法,是把截图维护从“发布后想起来再补”,改成“跟功能变更一起提交”。我更在意的是这条链路变化,而不是它用了哪一个截图库。
截图为什么最容易过期
帮助文档里的文字,改起来成本不高。打开 Markdown,改一句,提交即可。
截图麻烦得多。维护者要登录应用,准备演示数据,点到对应状态,截屏,裁剪,压缩,再把图片放回文档。每一步都不难,但每一步都会让人拖延。
对小型 SaaS 团队尤其如此。很多团队没有专职技术写作岗位,帮助中心常常由产品工程师顺手维护。功能上线时,工程师会优先处理代码、测试和发布,截图很容易变成“之后再说”。
问题就出在这里。
文档并不是一次写完就结束。只要产品 UI 在变,截图就会变成一种长期债务。Jelly 这套流程的核心判断,是把这笔债务放进开发者已经熟悉的构建动作里。
| 维护动作 | 传统做法 | Jelly 的做法 | 实际影响 |
|---|---|---|---|
| 声明截图 | 靠人工记住哪张图要换 | 写在 Markdown 的 HTML 注释里 | 截图意图留在文档源文件中 |
| 生成截图 | 手动打开页面、裁剪、上传 | 构建时访问真实应用并截图 | 减少重复操作 |
| 提交文档 | 文字和图片常常分开处理 | 截图可随 Markdown 一起更新 | 更适合同一个 PR 处理 |
| 维护风险 | 图片容易落后于 UI | 依赖稳定数据和选择器 | 不是零维护,只是换了维护位置 |
这张表里最关键的一格,是“维护风险”。自动化不是把风险消灭,而是把风险显性化。截图坏了,最好在构建时暴露,而不是等用户照着旧图找不到按钮。
Jelly 具体怎么把截图接进 Markdown
Jelly 的帮助文章放在 public/manual/,按 basics、setup、advanced 等章节组织。Markdown 经 Redcarpet 处理后,再作为 Rails 应用里的 ERB 视图生成到 app/views/help/,同时生成面包屑和章节导航。
截图指令写在 Markdown 的 HTML 注释里。比如一条 SCREENSHOT 注释,会声明访问哪个演示团队、哪个页面、用哪种截图模式,以及匹配哪个 CSS selector。
紧接着下面的 image 标签,用来承接生成后的图片结果。也就是说,文档里仍然能看到“这里应该有一张什么图”,只是图片本身由构建任务更新。
构建入口是一条 rails manual:build。它会用 Rake 调 Capybara、Cuprite 和 headless Chrome,从运行中的 Jelly 应用里捕获截图,然后生成帮助页面。
这里要分清楚:这不是 AI 自动生成文档,也不是作者发布了一个通用截图产品。它更像 Jelly 内部给 Rails 应用补的一段文档基础设施。
截图模式有三类:
| 模式 | 用途 | 更适合的场景 |
|---|---|---|
element | 截取指定 DOM 元素 | 表单、按钮组、设置面板 |
full_page | 捕获整页,可裁剪高度 | 长页面、完整流程说明 |
viewport | 只截当前浏览器窗口 | 接近用户实际看到的首屏 |
真正麻烦的不是按下截图键,而是让界面进入正确状态。
所以这套流程还支持一批处理选项:click 可以先点击按钮,打开表单或弹层;wait 给动画留时间;crop 裁掉无关区域;hide 临时隐藏开发工具栏、Cookie 横幅等干扰元素;torn 用 CSS clip-path 做撕纸边缘效果。
原文也提到,滚动到元素、处理 popover、裁掉多余内容这些边缘情况,花了不少工作。这一点很重要。它说明这套方案不是“写几行脚本就永远省事”,而是把复杂度前置到了可重复的脚本和配置里。
价值在小团队,边界也在小团队
Jelly 这件事最适合两类人看。
一类是 Web 产品工程师。以后改 UI 时,不只是改组件和测试,也要看帮助文档里有没有对应截图。更理想的动作是:改功能、改 Markdown、跑 rails manual:build,把生成后的图片一起提交。
另一类是技术文档维护者。过去他们可能要追着工程师要最新界面,现在至少可以把截图目标写进文档源文件。截图什么时候更新、更新失败在哪里,都更容易进入开发流程。
这和视觉回归测试有点像,但目标不同。
Playwright、Cypress、Storybook 的截图能力,常用来发现 UI 是否出现意外变化。它们关心的是“别变坏”。Jelly 这里关心的是“文档里的图要跟着真实界面变”。工具相近,问题不同。
限制也很现实。
这套流程依赖稳定的演示数据、可重复的登录状态、可预测的前端动画,以及不频繁变化的 CSS selector。如果产品大量依赖第三方内容、个性化数据或 A/B 实验,自动截图可能会引入新的维护成本。
接下来真正该看的,不是它能不能再多截几张图,而是三个变量:截图指令半年后还好不好读,CSS selector 改动后好不好修,演示数据变复杂后还能不能稳定构建。
如果这三件事能稳住,截图进入构建链路就不是花活。它会变成小团队维护帮助中心的一种低成本纪律。
文档系统最怕的是“差一点”。图差一点,字差一点,状态差一点,用户就会少一点信任。Jelly 这套做法没有承诺零维护,但它把维护放回了开发者每天都会经过的路上。
