与 Unpoly 创建者 Henning Koch 的访谈

Carson Gross

我非常兴奋能够采访 Henning Koch,他是 Unpoly 的创建者, 这是一个面向超媒体的 JavaScript 库,与 intercooler.js 是并行开发的。

感谢您同意接受采访!

Q:首先,您能否向读者简要介绍一下您的专业和技术背景:

当然!目前我是 makandra 的开发主管,这是一家我于 2009 年共同创立的 Ruby on Rails 咨询公司,此前我作为 Web 开发自由职业者工作了许多年。所以我的工作背景是同时处理多个不同的 Web 应用,并长期维护它们。在一个典型的周中,我们可能涉及 10+ 个项目,涵盖从教育到汽车再到网络安全的各种行业。Unpoly 是从我们在客户项目中反复出现的模式中提取出来的。

Q:当我创建 intercooler.js 时,其中一个重要部分是我不愿意处理当时流行的 SPA 库 (如 Angular 和 ExtJS)。Unpoly 是否有类似的历史?

我们的团队一度全力投入 AngularJS,以努力取代之前的大量 jQuery 意大利面式代码。当 Google 用 Angular 2 重写摧毁了 AngularJS 时,我们对那段时间进行了回顾,结果喜忧参半。虽然我们构建了一些非常适合 SPA 模式的应用程序,但大多数项目遭受了更大的代码库、更多依赖、逻辑在客户端和服务器之间分裂、大量样板 API 来将数据从我们已经拥有的地方(服务器)移动到我们需要的地方(浏览器)等问题。

那时我们再次尝试渐进增强,但这次提供了更高层次的结构,以便应用程序免于手动进行 AJAX 请求并处理单个 DOM 元素。基本上,我们设想了一个 HTML6 幻想规范:如果 HTML6 完全针对服务器渲染的应用程序,会是什么样子?那个规范中会有什么特性?这个思想实验最终导致了 Unpoly 的诞生。

Q:Unpoly 是一个非常“开箱即用”的库,对渐进增强有出色的支持。我知道您也是 Rails 开发者。这是否影响了您对 Unpoly 的方法?

绝对是!就像 Rails 一样,Unpoly 为一切提供强大的默认设置,并优先采用非侵入式的约定而非显式配置。例如,如果您希望 Unpoly 处理所有链接和表单,您可以全局设置,而无需更改您的 HTML。

Rails 最近的一些座右铭是“压缩现代 Web 应用的复杂性”和“一人框架”。作为 makandra 的另一项职责是培训年轻开发者,这与我产生了很大的共鸣。我非常在意维护一个技术栈,让单个人能够成为全栈开发者并持续交付良好结果。

此外,作为一名 Ruby 开发者,我对代码在使用时的人体工程学和美学有过度痴迷。我非常在意一个特性在使用客户端代码时看起来如何。当一个小想法需要不成比例的代码量时,这会让我寝食难安。

Q:在构建 Unpoly 时,您是否对超媒体、REST 等概念有过很多思考?您觉得这些东西有用吗?有趣吗?

我和您一样,对那些将 UI 与内容一起流式传输的交互式文档情有独钟。对我来说,这始于 1990 年代的基于字符的 BBS UI 和 WinHelp 文件,直到 Web 最终取代了所有这些。

如今,我对它没有太多的哲学思考,但我相信超媒体方法是一个甜蜜点,在这里您可以用很少的、主要是乏味的代码获得良好的 UI 保真度。对于中位数应用,超媒体可能比 SPA 模式给出更好的结果。我觉得 SPA 模式的理论上限与大多数 SPA 交付的结果之间存在巨大的脱节。SPA 允许乐观 UI(这很棒!),但这比等待 JSON 端点需要更多代码。所以一旦在不稳定的连接上进行任何有意义的交互,许多 SPA 就会退化为加载指示器和空白页面。

Q:您从 Unpoly 中得出最重要的技术教训是什么?

我学到的是,浏览器在添加 JavaScript 之前正确处理了大量边缘情况,比如焦点管理、并发输入、不稳定的连接。要达到相同的正确性水平并不容易,例如,当您在 JavaScript 中模拟页面转换时。这需要大量代码来处理。我总是记住这一点,当我看到一个声称用 2000 字节重新实现 React 的微型库时。您不能只是通过代码高尔夫来减少捆绑包大小的一半,而不牺牲一些正确性。

</>