编者注: 变更日志 是“对项目所做的所有重大更改的日志或记录。[它] 通常包括更改记录,例如错误修复、新功能等。”
发布变更日志是开源的传统,也是网络上长期以来的做法。我们认为 Hacks 的读者以及使用和贡献 MDN Web 文档 的人士会对了解 MDN 工程团队的工作以及他们在特定月份的影响感兴趣。我们还将介绍代码贡献机会、有趣项目以及参与的新方法。
3 月完成
以下是 3 月对支持 MDN Web 文档 的 代码、数据和工具 所做的更改。
- 在Hack on MDN 活动中 改进了兼容性数据
- 尝试使用 Brotli 压缩
- 发布调整和修复,通过合并 370 个拉取请求,其中包括来自 48 位新贡献者的 137 个拉取请求。
以下是 4 月的计划
在 Hack on MDN 活动中改进了兼容性数据
3 月,MDN 团队专注于浏览器兼容性数据项目,在巴黎与数十位合作者会面,参加“Hack on MDN”活动。这项工作带来了 BCD 存储库中的 221 个拉取请求,以及其他存储库中的额外工作。有关在那一周创建的工具和更新的数据的详细信息,请参阅 Jean-Yves Perrier 的 Hack on MDN 文章。
我们在 3 月审查并合并了 250 多个 PR。兼容性数据转换从 57% 完成度跃升至 63%。Jeremie Patonnier 领导了转换 SVG 数据的工作 (BCD PR 1371)。API 数据也是重点,包括转换现有的 MDN 表格以及使用其他数据源来填充缺失的 API。
BCD 存储库中现在有 264 个未完成的 PR,大约一个月的量,而且贡献不断涌现。BCD 是今年 Mozilla 拉取请求 (880 个) 和作者 (95 个) 最活跃的 GitHub 存储库之一,仅次于 rust (1268 个 PR,267 个作者)。贡献率不断上升,因此 BCD 可能会在 2018 年第二季度排名第一。
尝试使用 Brotli 压缩
Brotli 是一种由 Google 开发的压缩算法,专为提供 Web 资源而设计,它可以胜过广泛使用的 gzip 算法。到 2017 年底,所有主要浏览器都支持 br
内容编码方法,Florian 在 错误 1412891 中请求在 MDN 上测试 Brotli。Maton Anthony 在 PR 4686 中编写了一个与 Python-2 兼容的 Brotli 中间件,默认压缩级别为 11。此中间件于 3 月 7 日上线。
Brotli 确实比 gzip 更有效地压缩了我们的内容。首页从未压缩的 36k 压缩到 gzip 的 9.5k,压缩到 Brotli 的 7k。结果在像 CSS display 页面 这样的维基页面上更好,从未压缩的 144k 压缩到 gzip 的 20k,压缩到 Brotli 的 15k。
然而,Brotli 对 MDN 性能产生了负面影响。由于中间件负载增加,服务器测量的平均响应时间变慢,从 75 毫秒变为 120 毫秒。Google Analytics 显示页面下载时间提高了 6%(快了 1 毫秒),但平均服务器响应时间下降了 23%(慢了 100 毫秒)。我们没有看到静态资产的任何益处,因为 CloudFront 处理 gzip 压缩并忽略 Brotli。
Antony 将压缩级别调整为 5 (Kuma PR 4712),根据 Brotli 状态文章 测试,该压缩级别在压缩时间上与 gzip 9 相当,但仍能生成更小的资产。当此中间件于 3 月 26 日上线时,我们看到了类似的结果,我们的响应时间恢复到使用 Brotli 之前的水平,但在使用 br
时,HTML 大小略有改善。
当我们在 4 月发布 CloudFront 时,CDN 将负责压缩,Brotli 将再次消失。它看起来是一项很有前景的技术,但需要一个支持它的 CDN,并且最适合使用“预压缩”工作流而不是“按需”中间件工作流,这意味着它在一段时间内不适合 MDN。
发布调整和修复
3 月合并了 370 个 PR
- 255 个 mdn/browser-compat-data PR
- 52 个 mdn/interactive-examples PR
- 39 个 mozilla/kuma PR
- 5 个 mdn/kumascript PR
- 4 个 mdn/learning-area PR
- 4 个 mdn/webextensions-examples PR
- 4 个 mdn/bob PR
- 2 个 mdn/browser-compat-toolkit PR
- 2 个 mdn/pwa-examples PR
- 1 个 mdn/webassembly-examples PR
- 1 个 mdn/pab PR
- 1 个 mdn/mdn-fiori PR
其中 137 个来自首次贡献者
- SpeechGrammar API (BCD PR 976),来自 Jeremy Wilken。
- 将 UC(国际和中文)添加为 Android 浏览器 (PR 1077),添加 QQ 浏览器标识符 (qq_android) (PR 1078),以及 另外 2 个 PR 添加到 BCD,来自 Philip Jägenstedt。
- 添加 DOMTokenList 兼容性数据 (BCD PR 1121),来自 Jared Fowler。
- 添加 URL API (BCD PR 1122),来自 Jeremy Karlsson。
- 添加 DocumentFragment 的兼容性数据 (BCD PR 1184),来自 Juang, Yi-Lin。
- 添加 MediaRecorder 的兼容性数据 (PR 1186),添加 Slotable api 的兼容性数据 (PR 1232),以及 另外 4 个 PR 添加到 BCD,来自 Lucian Condrea。
- 添加 MediaStream 的兼容性数据 (PR 1212),添加 MediaStreamContraints 的兼容性数据 (PR 1244),以及 另外 4 个 PR 添加到 BCD,来自 Mec。
- 添加 SVGAnimateElement 的兼容性数据 (BCD PR 1236),来自 Djam Saidmuradov。
- 防止标签自动关闭并正确语法高亮 (BCD PR 1246),来自 Scott Buchanan。
- 更新 display: contents 兼容性表 (BCD PR 1271),来自 Guylian。
- 添加 Safari 和 Node WebAssembly 结果 (BCD PR 1280),来自 Sergey Rubanov。
- 为 chrome 添加了强制的 applicationServerKey (PR 1281),来自 Safwan Rahman(首次贡献到 BCD)。
- 添加 AnimationEffectTimingProperties 的兼容性数据 (BCD PR 1299),来自 Terry。
- 添加 PerformanceLongTaskTiming 的兼容性数据 (BCD PR 1316),来自 Matthieu Bergel。
- 添加 :scope 选择器的兼容性数据:Edge 不支持 (BCD PR 1323),来自 Bert Verhelst。
- 更新自 safari(mac/ios) 11 起的 PerformanceResourceTiming 支持 (BCD PR 1334),来自 Mike Li。
- 更新 Edge 的 css.property.display 兼容性以支持 Grid 值 (BCD PR 1340),来自 Bryan Robinson。
- 修复 IE 中有关“defer”属性的说明 (BCD PR 1341),来自 vlakoff。
- 尾随箭头函数参数逗号在 node 中有效 (BCD PR 1365),来自 coolreader18。
- Opera 支持 (PR 1366),Opera 36 支持默认参数 (PR 1639),添加到 BCD,来自 Andrea Giammarchi。
- 创建 version_name (BCD PR 1380),来自 Vitaly Zdanevich。
- 更新 WebRTC 接口的 BCD 数据结构(PR 1397),更新 Service Worker 接口的 BCD 数据结构(PR 1398),以及 另外 27 个 PR 来自 Dominique Hazael-Massieux(首次为 BCD 做贡献)。
- 添加 SVG <feBlend> 的兼容性数据(PR 1420),添加 SVG <feColorMatrix> 的兼容性数据(PR 1423),以及 另外 35 个 PR 到 BCD 来自 maximelore。
- 修复了与浏览器信息模式验证相关的 Windows 问题(PR 1433),来自 Sebastian Zartner(首次为 BCD 做贡献)。
- 更新 Edge 浏览器发布日期(PR 1482),以及添加 Edge 移动浏览器发布日期(PR 1483),到 BCD 来自 Matt Wojciakowski。
- 根据 MicrosoftEdge-Documentation 更新 Edge 支持数据(BCD PR 1518),来自 Mark Dittmer。
- 更新 Edge 数据(PR 1619),以及更新 Edge 和 IE 的 set-cookie 信息(PR 1642),来自 patrick kettner(首次为 BCD 做贡献)。
- 重写 Object.create 示例。(交互式示例 PR 634),来自 Mathias Arens。
- 使用 console.error() 方法显示错误(交互式示例 PR 638),来自 Rudz Boy。
- 为
sort
使用案例提供更好的示例(交互式示例 PR 642),来自 Marek Pepke。 - 更新 justify-content.html(交互式示例 PR 649),来自 Clément P。
- 更新:在 grid-gap 演示中添加 calc() 值(交互式示例 PR 665),来自 一丝。
- 修复 no-wrap(交互式示例 PR 666),来自 Nikolay Puzyrev。
- 添加 CSS font-kerning 属性的示例(交互式示例 PR 667),来自 Ian Sanders。
- 为
Proxy.apply
提供更具说明性的示例(交互式示例 PR 677),来自 Patrick Lienau。 - 更新 object-assign.html(交互式示例 PR 678),来自 Abhishek。
- 修复了错别字(交互式示例 PR 687),来自 Simon Wörner。
- 修复:ArrayBuffer.byteLength() => byteLength(交互式示例 PR 689),来自 Martijn Thé。
- 将 bleach 升级到 2.1.3(Kuma PR 4697),来自 Greg Guthe。
- 切换到 node.js 8.10.0(PR 640),来自 Maton Anthony(首次为 KumaScript 做贡献)。
- 添加西班牙语翻译(KumaScript PR 642),来自 Sergio González Collado。
- 更新 IETF RFCs 的 URL 结构以用于 HTTPS(KumaScript PR 647),来自 David Beitey。
- 更新 main.js(learning-area PR 62),来自 Ann Cascarano。
- 替换 bgtile.png(PR 63),can-store 修补程序(PRR65),以及 nytimes 修补程序(PR 66),到 learning-area 来自 Adilson Sandoval。
- bob 的第一个完整版本(PR 2),README 的小更新(PR 3),以及 另外 2 个 PR 来自 Schalk Neethling(首次为 bob 做贡献)。
- Eslint + Webpack + Travis CI 设置(PR 1),以及恢复 ES2015 模块配置(PR 2),来自 Maton Anthony(首次为 browser-compat-toolkit 做贡献)。
- js13kPWA(PR 1),以及修复和图标(PR 2),到 pwa-examples 来自 Andrzej Mazur。
- 修复了打开数据库失败时的函数调用(webassembly-examples PR 12),来自 Dan McCarthy。
- Web for all 链接演示(pab PR 18),来自 r12a。
- 更新许可证以及 README 和索引页(PR 3),来自 Schalk Neethling(首次为 mdn-fiori 做贡献)。
其他重要的 PR
- 标准化信号处理程序和应用程序(Kuma PR 4689),来自 我。
- 将我们 KS 镜像中的 node.js 升级到 8.10.0(Kuma PR 4692),来自 Maton Anthony。
- 更新馈送应用程序,允许作为任务调用(Kuma PR 4694),来自 我。
- 修复编辑资料中的复选框标签(Kuma PR 4696),来自 Donovan Glover。
- 删除字体观察器库,替换为 font-display(Kuma PR 4699),来自
- 预加载标题和正文字体以提高性能(Kuma PR 4709),来自 Schalk Neethling。
- 使语言偏好 cookie 持久化(Kuma PR 4718),来自 Maton Anthony。
- 在 500 内部服务器错误时向用户显示错误消息(Kuma PR 4720),来自 Schalk Neethling。
- 用可翻译的字符串替换硬编码字符串(Kuma PR 4722),来自 Віталій Крутько。
计划于四月
我们将忙于四月,Hack on MDN 活动的成果,审查 PR 并将原型转换为生产代码。我们也将继续致力于其他项目。
准备好 HTML 交互式示例以投入生产
交互式示例正在从快速实验过渡到发布功能。Will Bamberg 在三月发布了 将交互式示例引入 MDN,详细说明了这个项目从想法到实现的过程。
交互式示例团队将加强代码和流程,为贡献者和未来的支持建立更好的基础。同时,他们将确定 HTML 示例的设计,这些示例通常需要混合使用 CSS 和 HTML 来说明用法。
发布 CDN 和 Django 1.11
Ryan Johnson 完成了 60 个左右 MDN 端点的缓存头,他和 Dave Parfitt 在暂存站点前面添加了 CloudFront。我们将花费一些时间进行自动化和手动测试,然后重新配置生产环境,使其也位于 CDN 后面。
我们错过了 Django 1.11 更新的 4 月 1 日截止日期。我们计划专注于 4 月更新所需的最低限度任务,并将其他任务(例如更新过时但兼容的第三方库)推迟到以后。
改善前端开发人员的体验
Schalk Neethling 有时间熟悉 MDN 的前端代码,使用像 Sonarwhal 和 Chrome Devtools 的性能和网络面板来查找 Chrome 访问者访问 MDN 时遇到的性能问题。他整理了一份他认为会改善开发和性能的更改列表。
一个快速获胜的方法是将 FontAwesome 的自定义字体面替换为 SVG 图标。不再在一个文件中加载所有图标,而只加载页面使用的图标。SVG 将包含在 HTML 中,避免额外的 HTTP 请求。SVG 图标会自动缩放,因此它们在所有设备上看起来都很好。这也应该改善开发体验。使用 "\f108\0020\eae6"
这样的字符编码很容易出错,而使用 "icon-ie icon-mobile"
这样的名称则清晰得多。
Schalk 正在考虑前端开发的其他挑战,以及如何引入当前的工具和技术。他正在清理代码,使其更一致,并在 MDN Fiori 中正式化规则,这是一个前端风格指南和模式库。这可能是转向 UI 组件结构(如 React)的第一步。
一个更大的改进将是更新前端构建管道。MDN 的构建系统是在多年前(由 Python 开发人员)开发的,当时 JavaScript 还不成熟,系统也没有跟上。Webpack 广泛用于捆绑代码和资产以进行部署,而新的管道可以让开发人员使用更广泛的工具生态系统(如 Babel)来编写现代 JavaScript。
最后,我们继续寻找测试 JavaScript 的正确方法。我们目前使用 Selenium 在浏览器环境中自动执行测试。我们遇到过 问题,无法获得一组稳定的工具来进行一致的 Selenium 测试,并且它已被证明对于 JavaScript 的单元测试来说过于笨重。Schalk 在使用 Jest 方面有很好的经验,并希望在 4 月开始使用 Jest 测试 MDN Javascript。
关于 John Whitlock
John 是一位 Web 开发人员,负责 MDN Web Docs 的引擎。
一条评论