编辑注:变更日志 是“对项目所做所有显著更改的日志或记录。[它] 通常包括更改记录,例如错误修复、新功能等”。发布变更日志是开源的一种传统,也是网络上长期存在的做法。我们认为 Hacks 的读者和使用和贡献 MDN Web 文档 的人们会对了解 MDN 工程团队的工作以及他们在特定月份的影响感兴趣。我们还会介绍代码贡献机会、有趣的项目以及参与的新方式。
5 月完成的工作
以下是 5 月对 代码、数据和工具 的更改,这些代码、数据和工具支持 MDN Web 文档
- 迁移 CSS @media 和 MathML 兼容性数据
- 为 Django 1.11 做准备
- 开始在 ZenHub 中跟踪工作
- 继续 HTML 交互式示例
- 发布调整和修复,通过合并 397 个拉取请求,其中包括来自 43 位新贡献者的 60 个拉取请求。
我们将 继续这项工作,直到 6 月。
迁移 CSS @media 和 MathML 兼容性数据
浏览器兼容性迁移继续进行,从 72% 完成度提升至 80%。Daniel D. Beck 通过转换数据(PR 2087 和其他六个)以及审查来自 Nathan Cook 的 PR,如 1977,完成了 CSS @media 规则 功能。Mark Boas 完成了 MathML,提交了 26 个拉取请求。
BCD 数据集中有超过 8500 个功能,剩余工作的一半已经作为拉取请求提交。我们正在朝着完成迁移工作稳步前进。
为 Django 1.11 做准备
MDN 运行在 Django 1.8 上,它是第二个长期支持 (LTS) 版本。在 5 月,我们更新了代码,以便 MDN 的测试套件和核心进程可以在 Django 1.8、1.9、1.10 和 1.11 上运行。我们没有在 5 月底完成,但在本报告发布时,我们将正式使用生产环境中的 Django 1.11。
许多 Mozilla 网络项目使用 Django,大多数项目坚持使用 LTS 版本。2015 年,MDN 团队从 Django 1.4 LTS 升级到 1.7,PR 3073 包含 223 次提交、12,000 个文件、120 万行代码,至少耗费了六个月的时间。Django 1.8 六个月后在 PR 3525 中发布,它是一个更轻量的更改,包括 30 次提交、2,600 个文件和 250,000 行代码。完成这次升级后,团队很高兴暂时使用 1.8。
大多数升级困难都是特定于 Kuma 的。巨大的文件数量是由于将库导入为 git 子模块,这在当时是一种常见的做法,用于确保安全、可靠性和自定义。更新库也更加困难,这意味着更新通常会被延迟到必要时才进行。1.7 升级包括从 Python 2.6 更新到 2.7,在单个 Web 服务器上支持双 Python 安装是一个挑战。
MDN 团队在这些约束条件下工作,并解决了一些其他问题。他们在 Ansible 中重新实现了开发 VM 设置脚本,但保留了 Puppet 用于生产环境。他们更新了 1.7 升级的子模块,并切换到哈希要求文件用于 1.8。在更新过程中,获得了许多代码库和流程改进。其他改进,如 Docker 化环境,后来添加以避免在下一次重大更新中出现问题。
Django 1.4 最初并没有计划作为 LTS 版本,而是 计划在 1.6 版本发布 后退休。支持期限反复推迟,最终延长到 1.8 发布后六个月。
另一方面,Django 团队在发布 1.8 版本 时就知道它是一个 LTS 版本,并将获得三年的安全更新。Django 团队在 2015 年做出的许多决策使 MDN 的更新更容易。Django 1.11 保留了 Python 2.7 支持,避免了同时进行 Python 升级带来的痛苦。Django 现在有一个 可预测的发布流程,这对网站和库维护者来说非常棒。
Django 还维护着 关于更新 Django 的指南,建议的流程对我们来说很有效。
第一步 是升级第三方库,我们过去两年一直在做这件事。我们的目标是在大多数生产推送中进行库更新,并在发布无关功能时更新了数十个库。一些库,例如 django-pipeline,不支持 Django 1.11,因此我们必须自己更新它们。在其他情况下,例如 django-tidings,我们还必须暂时接手项目的维护工作。
下一步 是打开 Django 的弃用警告,以找到已知的更新问题。这突出显示了一些需要更新的库,以及我们代码中需要进行的重大更改。一个问题区域是我们的语言前缀 URL。MDN 使用 Mozilla 标准语言代码,例如 /en-US/
,其中区域使用大写字母。Django 提供了一个 语言环境前缀 URL 框架,但它使用小写语言代码,例如 /en-us/
。Mozilla 的自定义框架在 1.9 中崩溃,我们在复制 Django 框架并针对 Mozilla 风格的语言代码进行调整之前尝试了几种方法(PR 4790)。
接下来,我们 运行了我们的自动化测试,并开始修复许多错误。我们的目标是在单个代码库中支持多个 Django 版本,我们在 TravisCI 中添加了可选构建以在 1.9、1.10 和 1.11 上运行测试(PR 4806)。我们将修复拆分成 50 多个拉取请求,并通过部署到生产环境来测试小批量更改。在某些情况下,相同的代码适用于所有四个版本。在其他情况下,我们根据 Django 版本在代码路径之间切换(基于 Django 版本)。Django 1.9 的更新占升级工作量的 90% 左右。
这种增量方法比大规模 PR 更安全,并且避免了保持长期运行的分支更新的问题。这确实使得估计更改范围变得更加困难。查看提到 更新错误 的提交,我们更改了 2500 到 3000 行代码,这代表了项目代码的 10%。
开始在 ZenHub 中跟踪工作
在过去两年中,MDN 团队一直在使用 Taiga 来规划和跟踪我们为期三周的冲刺工作。团队对性能问题感到不满意,并一直在尝试使用 GitHub 的项目管理功能。Janet Swisher 和 Eric Shepherd 带领团队努力探索替代方案。在 5 月,我们开始使用 ZenHub,它在 GitHub 问题和里程碑之上提供了一个冲刺计划层。
如果您安装了 ZenHub 插件,您可以在新的 mdn/sprints 存储库中查看冲刺看板,该存储库收集了我们 10 个活动存储库中的任务。它向 GitHub 问题和拉取请求添加了额外数据,将它们链接到项目计划中。如果您没有安装插件,您可以在 ZenHub 网站 上查看冲刺看板。如果您不想使用您的 GitHub 帐户登录 ZenHub,您可以在各个项目中查看里程碑,例如 冲刺 4 里程碑,该里程碑位于 交互式示例项目 中。
继续 HTML 交互式示例
我们仍在努力克服发布 HTML 交互式示例的技术挑战。其中一个阻碍问题是限制样式更改为右边的演示输出,但不影响左边的示例代码。这是 Shadow DOM 的一个用例,它可以将样式限制为元素的子集。Schalk Neethling 在 PR 873 和 PR 927 中发布了基于 Shadow DOM 的解决方案,它在 Chrome 中可以原生运行。并非所有当前浏览器都支持 Shadow DOM,因此 Schalk 在 PR 894 中添加了一个 shim。还有一些 其他问题,我们将在将选项卡式 HTML 示例包含在 MDN 之前继续修复。
同时,来自全球 MDN 社区的贡献者为 <track> (Leonard Lee,PR 940)、<map> (Adilson Sandoval,PR 931) 和 <blockquote> (Florian Scholz,PR 906) 编写了一些有趣的演示。我们很高兴在 MDN 上获得这些和其他示例。
已发布的调整和修复
5 月合并了 397 个 PR
- 176 个 mdn/browser-compat-data PR
- 95 个 mdn/interactive-examples PR
- 70 个 mozilla/kuma PR
- 25 个 mdn/bob PR
- 16 个 mdn/data PR
- 8 个 mdn/kumascript PR
- 2 个 mdn/dom-examples PR
- 1 个 mdn/voice-change-o-matic PR
- 1 个 mdn/infra PR
- 1 个 mdn/mdn PR
- 1 个 mdn/learning-area PR
- 1 个 mdn/pwa-examples PR
其中 60 个来自首次贡献者
- Chrome 不再支持
caretPositionFromPoint
(BCD PR 1909),来自 Micah Cowsik-Herstand。 - 更新
EventHandlers
属性支持的 MSE (BCD PR 1949),来自 Nicolas Le Gall。 - 记录
timeZone
可用 (BCD PR 1959),来自 Chris Angelico。 - 将
th
scope
属性标记为未弃用 (PR 1960),并将th
abbr
属性标记为未弃用 (PR 1961),来自 Roland Warmerdam。 - 修复 Chrome/Opera 版本
RTCPeerConnection.addTrack
/removeTrack
(#1288) (PR 1963),来自 Josiah Ulfers(首次贡献给 BCD)。 - 更新 Safari 桌面/iOS 上的
source
元素及其属性 (BCD PR 1964),来自 Josh Schneider。 - nodejs 支持
Error.prototype.stack
(BCD PR 1970),来自 Chaim-Leib Halbert。 - 为 Edge 浏览器启用
append()
(BCD PR 1973),来自 midzer。 - 添加 css at-rules media
any-hover
的兼容性数据 (BCD PR 1977),来自 Nathan Cook。 - EdgeHTML 17 更新(第 2 部分)(BCD PR 1981),来自 Libby McCormick。
- 更改 Chrome 支持
AnimationEvent.pseudoElement
的 MDN 页面 (BCD PR 1986),来自 xidachen。 - 更新 Edge 桌面和移动设备对
text-decoration-style
CSS 属性的支持 (BCD PR 2004),来自 Lucas Volle。 - 添加
HTMLIFrame
元素 (PR 2017),来自 SphinxKnight(首次贡献给 BCD)。 - 更新
WorkerGlobalScope.importScripts
(BCD PR 2046),来自 mantou。 - 更新 Firefox Android 中的
toLocaleString
兼容性 (BCD PR 2055),来自 Zacqary Adam Xeper。 - Firefox 60 中支持
SameSite
。 (BCD PR 2088),来自 Dominik Picheta。 - 修复
<form>
中的拼写错误 (BCD PR 2142),来自 acshef。 - 添加
AudioNodeOptions
的兼容性数据 (BCD PR 2160),并修复 Firefox 的DocumentOrShadowRoot.fullscreenElement
的大小写 (BCD PR 2161),来自 haykam821。 ChildNode.remove
在 iOS Safari 中可用 (BCD PR 2171),来自 Scott Koenig。- 添加 Edge 的兼容性数据 (BCD PR 2174),来自 Zouhir ⚡️。
- 更正 Chrome 支持
is
的版本 (PR 2175),来自 Jonathan Pool(首次贡献给 BCD)。 br
的内联文本语义 (交互式示例 PR 828),来自 Kadir Topal。- 添加
picture
示例。 (PR 842),添加embed
示例。 (PR 863),以及 另外 7 个 PR 到交互式示例,来自 Leonard Lee。 - 改进 js 函数
bind
示例 (交互式示例 PR 886),来自 Théis Bazin。 - 添加输入
<input type="button">
(PR 891),并添加输入<input>
示例 (PR 892),到交互式示例,来自 Neha Nupoor。 - 添加
Array.prototype.values()
(交互式示例 PR 917),来自 Sid Vishnoi。 - 为
background-origin
示例添加no-repeat
属性。 (交互式示例 PR 918),来自 Paul Ferlito。 - 添加
<details>
的 HTML 示例 (PR 924),并添加<summary>
的 HTML 示例 (PR 926),到交互式示例,来自 Christian Stuff。 - 添加
(max-)width
到容器 (PR 929),添加<audio>
的 HTML 示例 (PR 930),以及将发布部分中的html
更改为tabbed
(PR 942),到交互式示例,来自 Stephan Max。 - 添加 object-keys.html (交互式示例 PR 937),来自 Yahya Elharony。
- 实现
<figcaption>
标签的示例 (交互式示例 PR 941),来自 daGo。 - 在演示代码中直接使用
Math.round
。 (PR 956),来自 arai-a(首次贡献给交互式示例)。 - 删除已弃用的
CELERYD_LOG_LEVEL
(Kuma PR 4748),来自 mashrikt。 - 在代码示例中添加
<title>
(Kuma PR 4767),来自 Antonio Fernando Santos Ladeia。 - 在 README.md 中添加构建状态徽章 (PR 51),来自 ExE Boss(首次贡献给 bob)。
- 重新排列
<display-listitem>
以将list-item
放在最后 (PR 220),来自 Oriol Brufau(首次贡献给 Data)。 - 修复
line-height-step
的数据 (PR 224),来自 Fuqiao Xue(首次贡献给 Data)。 - 更新 CSS Fonts 4 的
font-weight
语法 (PR 234),更新 CSS Fonts Level 4 的font-stretch
(PR 235),以及更新 CSS Fonts Level 4 的font-style
(PR 236),来自 wbamberg(首次贡献给 Data)。 - 为
js_property_attributes
宏添加乌克兰语翻译 (KumaScript PR 700),来自 Nikola Myslovskij。 - 添加 server-sent-events/README.md (PR 20),以及 server-sent-events: 在
connection_aborted()
上中断while(1)
循环 (PR 21),到 dom-examples,来自 Dumitru Uzun。 - 更新 app.js (voice-change-o-matic PR 14),来自 Alexander Leon。
- 将存储库重点放在 MDN Web Docs 上 (PR 1),来自 我(首次贡献给 infra)。
- 修复注释中的拼写错误 (learning-area PR 71),来自 Stephen Borutta。
其他重要的 PR
- 在浏览器模式中添加一个 name 属性 (BCD PR 2025),来自 Connor Shea。
- 注意 Chrome 中的
>>>
(穿透阴影的后代组合器)别名 (BCD PR 2158),来自 wbamberg。 - 为 CDN 添加无头测试 (Kuma PR 4765),来自 Ryan Johnson。
- 从社交 SVG 中删除
aria-hidden
(Kuma PR 4776),来自 Schalk Neethling。 - 修复
select_related
以仅选择外键字段 (Kuma PR 4804),来自 Safwan Rahman。 - 添加
::slotted
伪元素和必要的语法 (Data PR 169),来自 Chris Mills。 - 添加
:host
/:host()
/:host-context()
(Data PR 171),来自 Chris Mills。 - 改进 JSON 模式错误输出 (Data PR 231),来自 Roman Dvornov。
计划于 6 月
我们计划在 6 月初将 Django 1.11 发布到生产环境,甚至早于这篇文章发布。我们将在 6 月花一些额外的时间来修复 MDN 数百万访问者发现的任何问题,并升级代码以利用一些新功能。
我们计划继续进行兼容性数据迁移、HTML 交互式示例以及其他正在进行的项目。6 月是第二季度的最后一个月,也是许多季度目标的截止日期。
我们将前往旧金山参加 Mozilla 全员大会。这将是远程团队在一个房间里聚在一起的机会,庆祝今年迄今为止的成就,并为今年剩余时间制定计划。
关于 John Whitlock
John 是一名网络开发人员,负责 MDN Web Docs 的引擎。
一条评论