为 MDN 带来了交互式示例

“这只是一个小小的改动。”我,2017 年 1 月.

在过去一年多里,MDN 网页文档 团队一直在为我们的参考页面设计、构建和实现交互式示例。 这样做的目的是让 MDN 能够更好地帮助“行动导向型”用户:那些喜欢通过查看和玩弄示例代码来学习,而不是通过阅读来学习的用户。

我们刚刚完成了为 JavaScript 和 CSS 参考页面添加交互式示例的工作。 这篇文章回顾了这个项目,看看我们是如何走到这一步的,以及我们在过程中学到了什么。

第一个原型

该项目最早在 2016 年底发布的 MDN 产品策略 中进行了概述。 我们在 MDN 邮件列表中讨论了一些想法,并开发了一些原型。

JS 编辑器看起来是这样的

Early prototype of JavaScript editor

CSS 编辑器看起来是这样的

Screenshot of CSS editor after first user testing

我们希望这些示例——尤其是 CSS 示例——能向用户展示一个项目可以接受的不同语法类型。 在早期的原型中,我们使用自动完成功能来实现这一点。 当用户删除分配给 CSS 属性的值时,我们会显示一个自动完成弹出窗口,列出不同的语法变体。

第一轮用户测试

2017 年 3 月,Kadir Topal 和我参加了由 Mark Hurst 主持的第一轮用户测试。 我们从用户测试中学习了很多东西,包括关于我们的原型,以及用户想要看到什么。 我们了解到用户想要示例,并且希望示例易于找到。 用户也喜欢交互式示例。

但自动完成功能作为展示不同语法形式的方法并不成功。 它不为人知,即使那些偶然触发它的人似乎也不明白它的用途。

特别是对于 CSS,我们仍然想要一种方法来向读者展示一个项目可以接受的不同语法类型。 对于 CSS 页面,我们已经在页面中包含了一个代码块,其中列出了语法选项,如下所示

transform: matrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0);
transform: translate(12px, 50%);
transform: translateX(2em);
transform: translateY(3in);
transform: scale(2, 0.5);
transform: scaleX(2);
transform: scaleY(0.5);
transform: rotate(0.5turn);
transform: skew(30deg, 20deg);

我们看到一种我们非常喜欢的用户交互方式,即读者会将此代码块中的行复制到编辑器中,以查看效果。 所以我们想到将此代码块与编辑器结合起来。

在这个下一个版本中,你可以从下面的代码块中选择一行,该样式将应用于上面的元素。

现在回顾这个原型,有两件事很突出:第一,我们最终发布的基本交互模型已经到位。 第二,虽然我们在这个阶段之后所做的更改本质上是关于样式的,但它们对编辑器的可用性产生了巨大的影响。

建立基础

在那之后的一段时间里,进展并不大,因为我们的前端开发人员正忙于其他项目。 Stephanie Hobson 帮助改进了编辑器设计,但她同时也参与了 MDN 文章页面的全面重新设计。 6 月,Schalk Neethling 加入团队,专门负责这个项目。 他为编辑器建立了一个坚实的基础,以及一个全新的贡献工作流程。 这将成为最终实现的基础。

在这个实现中,交互式示例维护在 interactive-examples GitHub 存储库中。 一旦交互式示例被合并到存储库中,它就会被自动构建为一个独立的网页,然后从“mdn.mozilla.net”域名提供服务。 为了在 MDN 页面中包含该示例,我们使用 iframe 嵌入交互式示例的文档。

UX 工作和更多用户测试

6 月底,我们将编辑器展示给了 Jen SimmonsDan Callahan,他们给了我们一些非常有用的反馈。 JavaScript 编辑器看起来还不错,但我们仍然在 CSS 编辑器方面遇到问题。 此时,它看起来是这样的

Early prototype of CSS editor in June 2017

人们不明白他们可以编辑 CSS,甚至不明白左侧是单独选择的列表,而不是单个块。

Stephanie 和 Schalk 对这两个编辑器进行了完整的 UX 审查。 我们还从 Julia Lopez-Mobilia(来自 The Brigade)那里获得了独立的 UX 审查。 在所有这些工作之后,编辑器在静态截图中看起来是这样的

JS editor for the final user test

CSS editor for the final user test

然后我们又进行了一轮用户测试。 这一次,我们通过视频进行了远程用户测试,参与者通过 MDN 本身招募。 这为编辑器提供了一个紧密的反馈循环:我们可以根据用户反馈快速进行调整和测试。

这一次用户测试结果非常积极,我们决定准备进入测试版。

测试版

测试版于 8 月底开始,持续了两个星期。 我们在三个 JavaScript 页面和三个 CSS 页面上嵌入了编辑器,添加了调查,并征求反馈。 Danielle VincentMozilla 开发者通讯 中提到了它,这吸引了数千人访问 我们的 Discourse 宣布帖子

反馈结果非常积极:在参与调查的 159 人中,有 156 人投票希望在更多页面上看到编辑器,并且自由文本反馈非常令人鼓舞。 我们相信我们拥有良好的 UX。

JavaScript 示例和页面加载优化

现在我们有了编辑器,但实际示例却很少。 我们请 Mark Boas 为 JavaScript 参考页面编写示例,几个月后,他编写了大约 400 个精美简洁的示例。

查看 Array.slice() 的示例.

不过,我们还遇到了另一个问题:编辑器使页面加载时间过长。 Schalk 和 Stephanie 努力从架构中挤出每一毫秒的性能优化,最后,在 2017 年 12 月,我们决定发布。

我们计划在今年实施一些额外的技巧来继续改进页面加载性能,事实上,我们仍然对交互式页面的当前性能不满意。

CSS 示例

在 2018 年的前三个星期里,Schalk 和我更新了 400 个 JavaScript 页面,以 包含 Mark 的示例,然后我们开始为 CSS 页面编写示例。

我们请求帮助Jen Simmons 在推特上发布了相关信息,三个星期后,我们的社区贡献了 150 多个示例,其中 100 多个来自一位志愿者 mfluehr

查看 rotate3d() 的示例.

在那之后,Rachel AndrewDaniel Beck 开始与我们合作,他们负责剩下的工作。

查看 clip-path 的示例.

下一步是什么?

现在,我们正在为 HTML 参考 实现交互式示例。 我们刚刚完成了一轮用户测试,结果令人鼓舞,希望很快开始编写示例。

正如我希望这篇文章能说明的那样,这个项目是由许多人贡献了各种各样的技能来塑造的。 如果你想帮助这个项目,请查看 interactive-examples 存储库MDN Discourse 论坛,我们会在那里定期发布更新。

关于 Will Bamberg

Will 是 MDN 的技术作家。

更多 Will Bamberg 的文章…


24 条评论

  1. Mark

    你可以考虑在每个 iframe 上使用“sandbox=allow-scripts”属性,以对 iframe 中的内容进行额外的限制。

    2018 年 3 月 20 日 下午 08:57

    1. Schalk Neethling

      嘿 Mark,

      感谢你的评论。 你是指这篇文章中的嵌入示例,还是指 MDN 上的嵌入示例?

      2018 年 3 月 20 日 下午 09:54

  2. Christoph

    自从我在 MDN 上首次发现交互式示例后,我一直很喜欢它们——做得太好了!

    一个小的挑剔意见:我仍然只是偶然地发现我可以编辑示例,而不是仅仅选择一个示例——不幸的是,我没有任何建议可以让你更清楚地说明这一点(除了可能将所选示例的语法高亮关闭,使其看起来更像一个文本区域——但这显然有其自身的缺点)。

    致敬,
    Christoph

    2018 年 3 月 21 日 上午 00:16

    1. Will Bamberg

      感谢 Christoph,我很高兴你喜欢它们。 你不是唯一一个没有发现 CSS 示例可编辑的人。 这是我们仍然没有找到好答案的事情。

      我认为在 CSS 示例中,这个 *并不* 那么重要,因为即使只是选择不同的值也相当具有说明性,而且最终,我认为,人们通常会理解这些选项是可以编辑的。但我们希望这个功能能做得更好。我们会做的一件非常简单的事是:将光标放在选择的末尾而不是开头,这样会更明显,更具吸引力。

      但我们绝对乐于接受这方面的改进建议!

      2018 年 3 月 21 日 上午 06:55

      1. Kshitij Chawla

        文本上一个突出的闪烁光标是一个强烈的指示,表明文本是可编辑的。可以这样做吗?也许是更小、更粗、水平的闪烁光标,在最后一个字符后闪烁。

        在例如“CSS 演示:变换”下面,是否可以提到“点击代码块以运行该行”或类似内容?
        或者在每个代码块旁边添加一个小的运行按钮?

        2018 年 3 月 22 日 上午 08:22

        1. Will Bamberg

          > 文本上一个突出的闪烁光标,
          > 是一个强烈的指示,表明文本是可编辑的。
          > 可以这样做吗?

          是的,我认为光标是指示这一点的好方法。但我们也要考虑到,很多人不会对编辑示例感兴趣,我们不希望任何指示对这些人来说很烦人或分散注意力。所以这里需要找到一个平衡点。

          > 是否可以提到
          > “点击代码块以运行该行”
          > 或类似内容,例如在
          > “CSS 演示:变换”下面?
          > 或者在每个代码块旁边添加一个小的运行按钮?

          人们似乎很容易理解代码块是_可选择的_,只是不理解它们是_可编辑的_。

          2018 年 3 月 22 日 上午 10:08

      2. kshitij Chawla

        与其等待点击代码行,如果只是将鼠标悬停在它们上面就可以运行,这样会更容易“无意中”发现吗?

        或者在第一次绘制时添加一个快速动画,指示点击/触摸以运行方面。

        2018 年 3 月 22 日 上午 08:27

      3. Timon

        嗨,Will!

        我的建议是将示例本身保持不可编辑,并将最后一个选项设置为一个只有 `${attribute}:` 的字段,并在属性文本旁边显示一个输入字段。像这样

        * transform: skew (180deg);
        * transform: rotate(90deg);
        * transform

        它看起来可能不像现在那样漂亮,但会非常清晰。

        2018 年 3 月 22 日 上午 08:41

        1. Will Bamberg

          这是一个非常有趣的建议!我认为我们将来可能会考虑这样做,但这将是对 UI 的一个重大改变,因此我们需要对其进行彻底的测试:)。

          2018 年 3 月 22 日 下午 14:57

      4. James

        一种可能性是在“重置”按钮旁边显示一个“编辑”或“自己尝试”(或任何其他类似文本)按钮。单击后,它将在示例下方打开一个额外的行,供用户编辑和执行。

        大多数希望快速参考或查看示例的用户不会使用编辑功能。但是对于那些需要使用编辑功能的用户来说,由于它是用户发起的,因此它将很突出,并且目的明确。

        2018 年 3 月 22 日 下午 16:47

  3. Joe Z

    MDN 已经成为我的首选参考。有希望让可怜的、受苦受难的 SVG 文档得到同样的待遇吗?

    2018 年 3 月 22 日 上午 07:50

    1. Will Bamberg

      你很幸运!

      https://discourse.mozilla.org/t/time-to-lift-up-the-svg-documentation-to-the-next-level/25529

      Jeremie 和我上周讨论过这个问题,我们都认为 SVG 将是交互式示例的绝佳候选者。我相信 Jeremie 会继续在 https://discourse.mozilla.org/c/mdn 上分享他的进展和计划。

      2018 年 3 月 22 日 上午 08:24

  4. Will Fastie

    >>> 我们对交互式页面上的当前性能仍然不满意

    直到最近几个月,我才意识到 MDN 是多么宝贵。我希望我足够了解,可以提供帮助。我甚至可能退休我的 VisiBone 书!

    所以我根本不关心页面性能。价值在于内容,而不是速度。我知道您可能出于实际或财务上的原因,希望保持内容轻量化和快速,但从最终用户的角度来看,任何等待都是值得的教育。

    2018 年 3 月 22 日 上午 08:41

    1. Will Bamberg

      很高兴听到您这么说:)。

      我们仍然关心性能。除了其他原因之外,糟糕的性能会影响搜索引擎排名,这使得人们更难找到我们的内容。此外,尽管北美地区的性能还可以,但在世界其他许多地区,性能要差得多,我们希望解决这个问题。

      2018 年 3 月 22 日 下午 15:01

  5. Rich

    我从阅读 Mozilla 文档中学到了很多东西;事实上,这就是我学习 javascript 的方式!
    所以,这些交互式内容只是锦上添花!

    更棒的是,编辑器可以通过屏幕阅读器访问,这真的让我很惊讶!
    如果同一个编辑器可以用在 Firefox 开发工具中,那么就可以使调试器变得可访问,这将是绝对棒的!我希望这成为一个优先事项;它将通过屏幕阅读器极大地加快 JS 开发速度!

    感谢 Mozilla!
    — Rich

    2018 年 3 月 22 日 上午 09:11

    1. Marijn

      > 如果同一个编辑器可以用在 Firefox 开发工具中

      它似乎是一个由数百行代码组成的拼凑物(https://github.com/mdn/interactive-examples/blob/master/js/editor-libs/css-editor-utils.js),非常容易出错(例如,尝试将一些 HTML 从周围页面拖到它中)。

      好消息是,今年将有一项推动行动(https://prototypefund.de/project/codemirror/),旨在使 CodeMirror(开发工具中的编辑器)变得可访问。

      2018 年 3 月 22 日 上午 09:57

      1. Will Bamberg

        当然,我们使用 CodeMirror 来创建 JavaScript 交互式示例,并将使用它来创建正在开发的 HTML 示例。它是一个很棒的软件。

        在每个 CSS 示例中嵌入 6 个 CodeMirror 实例似乎有点过头了。尽管它肯定会提供比我们目前拥有的更强大的编辑器。

        2018 年 3 月 23 日 上午 06:24

  6. Russell Beattie

    前几天我正在使用 MDN 查找一些 CSS 变换信息,并使用了交互式示例,因此我作为新用户的体验仍然记忆犹新。我的想法是,一些示例模棱两可,需要更多上下文才能让不熟悉的人理解发生了什么。如果能提供一个指向示例所用完整代码的链接,这样您就可以看到在适当位置使用的 CSS 代码行,那就太好了。示例很好地展示了会发生什么,但如果没有周围的代码,可能很难弄清楚如何使用特定的函数/命令/等等。

    2018 年 3 月 22 日 下午 12:42

    1. Will Bamberg

      它们目前的形态是有意地限制了范围,以保持它们易于使用和简洁。它们可以向您介绍属性,或者如果您忘记了它的语法,可以提醒您,但很多时候您还需要更深入地查阅文档。

      因此,至少在目前,我认为这些示例是对现有“实时示例”(例如 https://mdn.org.cn/en-US/docs/Web/CSS/transform#Examples)的补充,而不是替代——实时示例展示了完整的代码,但没有那么简洁。

      话虽如此,您将两种类型的示例与指向完整示例的链接结合起来的想法,对于未来来说是一个非常有趣的想法!

      2018 年 3 月 23 日 上午 06:16

  7. David Barth

    好主意。
    希望看到针对像我这样的新手提供的阅读清单和教程参考。

    另外,我不知道可以作为起点访问的特定网站(URL)。

    2018 年 3 月 22 日 下午 18:57

    1. Will Bamberg

      我当然是有偏见的,但 MDN 上的学习区是开始学习 web 开发的绝佳场所:https://mdn.org.cn/en-US/docs/Learn

      2018 年 3 月 22 日 下午 21:31

  8. David Nobre

    但视角错了。

    2018 年 3 月 23 日 上午 11:08

    1. Will Bamberg

      感谢您指出这一点!如果您愿意,请在 https://github.com/mdn/interactive-examples/issues/ 上提交一个错误,在博客评论中跟踪它将更加困难。

      2018 年 3 月 23 日 上午 11:43

  9. Jeromie Kirchoff

    嗨!精彩的文章,我是你的忠实粉丝。我一直通过反向工程现有代码来了解其功能来学习代码,你知道在公司里是怎么一回事的。

    所以,我关于如何解决文本编辑功能不那么明显的思考。

    如何添加一个简单的警报消息“你知道你可以编辑这个吗?!”

    此外,添加一些编辑建议...也许是一个类似 wiki 的页面?我不知道。

    总之,只需在用户第一次点击页面示例时,让警报出现即可。

    祝大家新年快乐!

    2018 年 3 月 27 日 下午 18:42

本文的评论已关闭。