编辑注:变更日志 是“对项目所做的所有重大更改的日志或记录。[它] 通常包括更改记录,例如错误修复、新功能等”。发布变更日志在开源中是一种传统,也是网络上的长期做法。我们认为 Hacks 的读者以及 MDN Web 文档 的用户和贡献者会对了解 MDN 工程团队的工作以及他们在一个月内产生的影响感兴趣。我们还将介绍代码贡献机会、有趣的项目以及新的参与方式。
以下是 7 月份对支持 MDN Web 文档 的 代码、数据和工具 所做的更改。
以下是 8 月份的计划
7 月完成
尝试更长的 CDN 过期时间
我们在 2018 年 4 月 将 MDN Web 文档迁移到 CDN,并看到页面加载时间提高了 16%。我们在 MDN 页面上使用了 5 分钟的过期时间,以便 CDN 在短时间后请求新的副本。MDN 是一个维基,我们无法预测页面何时会发生变化。300 秒是在为我们最受欢迎的页面进行一些缓存和作者需要等待多长时间才能将更改后的页面发布给所有访问者之间的折衷方案。80% 的访问者正在获取未缓存的页面。
更长的缓存过期时间需要缓存失效,计算机科学中的两件难事之一。在承诺进行这项工作之前,我们想要估计预期的性能优势。从 7 月 9 日到 15 日,Ryan Johnson 将超时时间从 5 分钟增加到 48 小时 (PR 4876),我们收集了性能数据。
与前一周相比,平均页面加载时间下降了 3%,这是一个很小的,不显著的改进。不同国家的结果喜忧参半,有些略有改善,有些略有下降。中国是一个例外,平均页面加载时间增加了 22%,这表明性能显着下降。
页面加载时间在工作日和周末也有所不同(正百分比表示页面加载时间更短,对用户更有利)
国家/地区 | 页面加载时间减少, 工作日 |
页面加载时间减少, 周末 |
---|---|---|
全部 | 1% | -2% |
美国 | 3% | 3% |
印度 | 2% | -7% |
中国 | -22% | -35% |
日本 | 0% | 10% |
法国 | -1% | -5% |
德国 | 3% | 3% |
英国 | 2% | 2% |
俄罗斯 | 0% | 2% |
巴西 | 2% | -2% |
乌克兰 | 6% | 1% |
这是一个成功的实验。我们得到了一个意想不到的结果,用最少的工作获得了这些结果。同时,我们很好奇为什么更长的 CDN 过期时间对大多数用户的影响很小,而对中国的影响却很负面。我们有一些理论。
CloudFront 是亚马逊的 CDN,它使用与 MDN 服务器相同的机房和网络。MDN 针对快速提供维基页面进行了优化,因此缓存未命中只会给请求增加 50-100 毫秒。CDN 的主要优势在于减少服务器负载,我们确实看到服务器请求量减少了 25% 到 50%,尤其是在高峰时段。
我们目前正在指导 CloudFront 缓存页面,但告诉下游代理和浏览器不要缓存页面。维基页面在有人编辑后可能会发生变化,我们想要避免多层缓存保留旧的副本。下游缓存可能比我们预期的对页面加载时间有更大的影响,我们可以在下一个实验中尝试允许缓存。
中国有全国性的政策来监控和控制互联网流量。我们不知道具体细节,但更长的缓存时间会导致处理速度变慢。我们看到将 developer.mozilla.org 迁移到 CloudFront 改善了中国的情况,将平均页面加载时间缩短了 30%。这可能是因为为资产删除了第二次域查找,从而带来了大部分优势。未来的实验可能会跳过来自中国的流量的 CloudFront。
一些国家/地区的工作日和周末流量之间存在显著差异,例如中国和日本。我们猜测工作日流量主要来自开发者在工作中使用 MDN,而周末流量主要来自开发者在业余时间和学习中使用 MDN。我们还怀疑工作日设备和家用设备的功能之间存在差异。
最后,结果可能是 CloudFront 的局限性,我们可能会在使用其他 CDN 提供商时看到不同的结果。
我们将寻找其他方法来加快页面加载时间。例如,Schalk Neethling 正在努力用 SVG 图标 (PR 4860) 替换 Web 字体图标,并将短的 JavaScript 文件内联,而不是进行请求 (PR 4881)。我们有进一步的计划来减少页面加载时间,以满足我们新的性能目标。
停用区域
Ryan Johnson 于 7 月 24 日删除了区域,合并了 PR 4853。从用户的角度来看,有一些变化。
自定义区域 URL(例如 https://mdn.org.cn/en-US/Firefox/Releases/61)现在位于 /docs/
下的标准维基 URL 下,例如 https://mdn.org.cn/en-US/docs/Mozilla/Firefox/Releases/61。有指向新 URL 的重定向,因此旧链接应该继续起作用。
自定义区域样式已删除,区域页面现在看起来与其他维基页面一样。这对大多数页面来说都很细微,例如删除标题旁边的图标。其他页面需要重写,例如 MDN 的历史。
区域侧边栏已转换为 KumaScript 侧边栏,并通过 wbamberg (PR 711 和其他几个) 的英勇努力,将它们添加到区域中的每个页面。
大约删除了 2600 行代码,约占代码库的 10%。维基代码现在更简单、更不容易出错,并且更新起来更安全。
转换兼容性数据
在去年的 7 月份,浏览器兼容性数据 (BCD) 项目达到了使用新兼容性数据的 MDN 页面超过 1000 个的里程碑,大约有 4900 个页面需要转换。本月,还有不到 850 个页面需要转换,超过 5000 个 MDN 页面正在使用新数据。BCD 团队的持续努力对 MDN 和社区产生了巨大的影响。
Visual Studio Code 提高了其数据的准确性,他们在 2018 年 6 月发布版中采用了 BCD 项目。这是由 Pine 在 vscode-css-languageservice 问题 #102 中提出的,并在 PR #105 中实现,并得到了 BCD 和 mdn/data 贡献者 Connor Shea 的反馈。

来自 BCD 的数据,如在 Visual Studio Code 中所见。
经过长时间的讨论,BCD 项目更新了 Node.js 版本号的策略 (PR 2196、PR 2294 等)。最初,使用了浏览器样式的版本号,例如 “4”
、“6”
和 “8”
,但 Node.js 社区要求使用 “4.0.0”
、“6.0.0”
和 “8.0.0”
,以反映他们对发布号的看法。这影响了许多文件,并解除了几个 Node.js 拉取请求的阻塞。
Florian Scholz 去度假了,Daniel D. Beck 接手了项目维护工作,包括发布 npm 包,现在通过 PR 2480 进行记录。大多数来自 巴黎 MDN 黑客马拉松活动的 PR 现在已合并或关闭,该项目只剩下 120 个未解决的 PR,代表着剩余转换工作的约一半。
发布的调整和修复
7 月份合并了 307 个 PR
- 197 个 mdn/browser-compat-data PR
- 48 个 mdn/interactive-examples PR
- 26 个 mozilla/kuma PR
- 13 个 mdn/kumascript PR
- 6 个 mdn/bob PR
- 5 个 mdn/infra PR
- 4 个 mdn/learning-area PR
- 1 个 mdn/learning-area-pt-br PR
- 1 个 mdn/dom-examples PR
- 1 个 mdn/voice-change-o-matic PR
- 1 个 mdn/web-components-examples PR
- 1 个 mdn/webextensions-examples PR
- 1 个 mdn/doc-linter-webextension PR
- 1 个 mdn/data PR
- 1 个 mdn/web-speech-api PR
其中 58 个来自首次贡献者
- 更正对象文字中扩展运算符 (
...
) 的节点支持 (BCD PR 2189),来自 Tobias。 - 为某些功能添加 NodeJS 版本 (BCD PR 2196),来自 Solant。
- 更新 Node.js 的 JavaScript 扩展运算符 (
...
) (PR 2262),更新 Node.js 版本 (PR 2294),以及 BCD 的 9 个更多 PR,来自 Christopher Sahnwaldt。 - 从 varun singh 向 BCD 添加了
<input type="checkbox">
(PR 2383)、<input type="button">
(PR 2384) 和<input type="search">
(PR 2385) 的浏览器兼容性表格。 - 从 epistemex 向 BCD 添加了描述中的缺失实体 & 符号。(BCD PR 2397)
- 从 Ayush Poddar 向 BCD 添加了
DOMStringMap
。(BCD PR 2401) - 从 Quentin Calvez 向 BCD 添加了 Edge 对
overflow-wrap
的支持。(BCD PR 2406) - 从 Juraj Mäsiar 向 BCD 添加了缺失的
browserSettings
权限。(BCD PR 2407) - 从 David Wheatley 向 BCD 添加了 MS Edge 的
window.scroll
数据。(BCD PR 2433) - 从 Thomas Prochazka 向 BCD 更新了 Edge 的
<input type="color">
数据。(BCD PR 2434) - 从 Peter Mouland 向 BCD 添加了
.gitignore
中的 IDEA(IntelliJ、WebStorm 等) (PR 2435) 和 Node.js 8.0.0 对 JavaScript 特性的支持 (PR 2436)。 - 从 Philip Goto 向 BCD 更新了
backdrop-filter
。(BCD PR 2438) - 从 Jakob Krigovsky 向 BCD 添加了
text-align
的<string>
值。(BCD PR 2442) - 从 Geoffrey De Belie 向 BCD 添加了
search.get
和search.search
API 数据。(BCD PR 2444) - 从 Mauro Mandracchia 向 BCD 添加了
window.scrollTo
的兼容性。(BCD PR 2445) - 从 Estelle Weyl 向 BCD 添加了对 CSS 选择器
:defined
的支持。(BCD PR 2454) - 从 Raz Goldin 向 BCD 添加了 Safari 对
window.scroll
函数的支持。(BCD PR 2462) - 从 TSlivede 向 BCD 将 ECMA-262 附录 B 中定义的属性标记为已弃用。(BCD PR 2469)
- 从 Gaurav Mahto 向 BCD 添加了对
MediaDevices
API 的支持。(BCD PR 2472) - 从 Peter Fernandes 向 BCD 将 Safari 对 CSS 属性
overscroll-behavior
的支持从未知更新为不支持。(BCD PR 2490) - 从 Lioman 向 BCD 将 Safari 对
Navigator.registerProtocolHandler
API 的支持从未知更新为不支持。(BCD PR 2499) - 从 Charles Vazac 向 BCD 将 Firefox 对
Server-Timing
标头的支持从 59 移至 61。(BCD PR 2504) - 从 Nate Weaver 向 BCD 修复了 JS
RegExp
后顾断言的描述。(BCD PR 2521) - 从 Refael Iliaguyev 向 BCD 更新了 IE 对 CSS 属性
text-align-last
的支持。(BCD PR 2525) - 从 NKN1396 向 BCD 添加了 Node.js 10 对
promise.finally
的支持。(BCD PR 2529) - 从 Eugene Pankov 向 BCD 添加了 Chrome 对
crisp-edges
的支持,作为-webkit-optimize-contrast
。(BCD PR 2531) - 从 Malvoz 向 BCD 修复了 CSP 术语
navigate-to
(原为navigation-to
)。(BCD PR 2532) - 从 Timo Tijhof 向 Interactive Examples 添加了
<input type=password>
示例的小写minlength
属性。(Interactive Examples PR 1024) - 从 Taylor Hunt 向 Interactive Examples 将
<select>
示例更改为使用“占位符标签选项”模式。(Interactive Examples PR 1025) - 从 Enguerran 向 Interactive Examples 为 Markdown 项目符号列表添加了新行。(Interactive Examples PR 1028)
- 从 Estelle Weyl 向 Interactive Examples 添加了
column-fill
示例的balance-all
值。(Interactive Examples PR 1039) - 从 Jon Borglund 向 Interactive Examples 添加了
id
作为<label for=>
属性的引用。(Interactive Examples PR 1045) - 从 Mihir Karbelkar 向 Kuma 将“发布并继续编辑”的高度设置为与其他高度一致。(Kuma PR 4900)
- 从 Kagami Sascha Rosylight 向 KumaScript 更新了 Web 语音 API 的 URL。(KumaScript PR 731)
- 从 Rachel Andrew(对 KumaScript 的首次贡献)向 KumaScript 更新了学习侧边栏,以添加新的布局指南。(PR 736)
- 从 Estelle Weyl 向 KumaScript 将写作模式级别 4 移至候选推荐 (CR)。(KumaScript PR 744)
- 从 Rohit Arondekar 向 learning-area 引用了正确的视频源视频文件。(learning-area PR 84)
- 从 arda152 向 learning-area 修复了“farenheit”的拼写错误。(learning-area PR 85)
- 从 Mourad El garma 向 learning-area 修复了事件监听器中的比较运算符 (
!==
)。(learning-area PR 86) - 从 Felipe Maia 向 learning-area-pt-br 添加了
javascript/object-basics
文件夹以进行章节翻译。(learning-area-pt-br PR 2) - 从 LUCAS GARIBALDI ALVES 向 voice-change-o-matic 将混响器更改为断开连接并重新连接到音频路径。(voice-change-o-matic PR 15)
- 从 Kevin Nagurski 向 web-components-examples 使用了 ES2015+ 语法。(web-components-examples PR 8)
- 从 Eric Shepherd(对 Doc Linter WebExtension 的首次贡献)向 Doc Linter WebExtension 添加了
EventRef
到允许的宏列表中。(PR 70) - 从 utkarsh-raj 向 web-speech-api 保持大小写一致。(web-speech-api PR 26)
其他重要的 PR
- 从 Claas Augner 向 BCD 检查了 bugzil.la 链接格式。(BCD PR 2511)这是他 32 个 Pull Requests 中的一个。
- 从 Stephan Max 向 Interactive Examples 将交互式示例链接在新标签页中打开。(Interactive Examples PR 1009)
- 从 我 向 Kuma 更新了 node 8 和依赖项。(Kuma PR 4852)
计划在 8 月进行
在 8 月,我们将继续开发新的和改进的交互式示例,转换兼容性数据(目标是少于 50 个打开的 PR),切换到 Python 3,提高性能,以及其他长期项目。
升级到 Elasticsearch 5.6
Elasticsearch 为我们不太喜欢的站点搜索提供支持,我们在生产中使用的是 2.4 版本。此版本在 2018 年 2 月已 停止支持,但我们的提供商给了我们到 8 月的更新时间。我们利用这段宽限期从 Django 1.8 更新到 1.11。在 8 月,我们将更新我们的客户端库和代码,以便我们可以更新到下一个主要版本 Elasticsearch 5.6。我们预计新服务器不会出现很多对用户可见的更改,但我们也不打算因错过截止日期而丢失站点搜索功能。
关于 John Whitlock
John 是一位 Web 开发人员,致力于 MDN Web Docs 引擎的开发。