编辑说明:变更日志 是“项目所有重大更改的日志或记录。[它] 通常包含有关更改的记录,例如错误修复、新功能等。” 发布变更日志是开源世界的一种传统,也是网络上的长期做法。我们认为,Hacks 的读者以及使用和贡献 MDN Web 文档 的人士会对了解 MDN 工程团队的工作以及他们在特定月份产生的影响感兴趣。我们还将介绍代码贡献机会、有趣的项目以及参与的新方式。
4 月完成
以下是 4 月对支持 MDN Web 文档 的 代码、数据和工具 所做的更改。
- 将 MDN 迁移到 CDN,将页面加载时间缩短了 16%
- 迁移了更多兼容性数据,目前已完成 72%
- 将基于字体的图标替换为内联 SVG
- 发布了调整和修复,通过合并 510 个拉取请求实现,其中包括来自 57 位新贡献者的 140 个拉取请求。
以下是 5 月的计划
将 MDN 迁移到 CDN,将页面加载时间缩短了 16%
4 月 17 日,我们将 developer.mozilla.org 切换到由 CloudFront(亚马逊的内容交付网络 (CDN))提供服务。CDN 具有多种优势,MDN 的访问者现在正在体验到这些优势。
CDN 在全球范围内拥有服务器网络,访问者会连接到最近的 CDN 服务器。我们的服务器连接时间占页面加载时间的 10%,在全球范围内改善了 57%,在欧洲范围内改善了 72%。
CDN 可以从我们的 Web 服务器请求页面一次,保存副本,然后在新的访问者请求时提供该副本。我们从简短、保守的缓存时间开始,但我们已经注意到热门页面(包括用于 Firefox 构建过程的 页面)的加载速度更快,因为它们通常直接从 CDN 提供服务。例如,我们测量了印度地区 JavaScript 基础知识 页面页面加载时间的 50% 改善。
我们之前已在使用 CDN 为我们的静态资产(如 JavaScript、CSS 和 JS)提供服务。将主站点迁移到 CDN 意味着我们可以从 developer.mozilla.org 提供静态资产,而不是从资产域提供。这会以两种方式影响网站速度。首先,浏览器会跳过对资产域的第二次 DNS 查找,每次查看都会节省大约 5%。其次,现代浏览器可以通过相同的 HTTP/2 连接请求后续资产。Stephanie Hobson 在 2017 年将 HTTP/2 添加到资产域时研究了 HTTP/2 对 MDN 的影响,我们本月实施了后续工作。
所有这些都累积起来,显著改善了页面加载时间。我们使用 WebPageTest 测量了页面加载时间,该测试为 主页 提供可靠的最佳情况指标。
位置 | CDN 之前 | 使用 CDN | 改进 |
---|---|---|---|
弗吉尼亚州杜勒斯 | 1.93 秒 | 1.42 秒 | 0.51 秒 |
中国香港 | 2.68 秒 | 1.79 秒 | 0.89 秒 |
英国伦敦 | 2.40 秒 | 1.49 秒 | 0.91 秒 |
澳大利亚悉尼 | 2.68 秒 | 1.63 秒 | 1.05 秒 |
我们还使用 Google Analytics,它会测量整个网站的实际访问者的平均页面加载时间。
位置 | CDN 之前 | 使用 CDN | 改进 |
---|---|---|---|
所有 MDN 访问者 | 3.91 秒 | 3.28 秒 | 0.63 秒 |
美国 | 2.44 秒 | 2.11 秒 | 0.33 秒 |
法国 | 3.03 秒 | 2.29 秒 | 0.74 秒 |
印度 | 6.05 秒 | 4.45 秒 | 1.60 秒 |
中国 | 7.87 秒 | 5.60 秒 | 2.27 秒 |
过去几个月的准备工作主要是编写我们的 CDN 缓存规则,以确保首次访问者很可能从 CDN 获得缓存副本,但登录用户、页面编辑者和翻译者会继续直接与我们的 Web 服务器进行通信。一个严重的错误在我们的初始测试中通过,导致用户在多个浏览器选项卡中编辑 MDN 时出现问题。我们修复了这个错误 (PR 4757),现在编辑已恢复正常,并且网站仍然比以往任何时候都快。
迁移了更多兼容性数据,目前已完成 72%
社区继续将兼容性数据从 MDN 迁移到 browser-compat-data 存储库。在合并了创纪录的 329 个拉取请求后,数据现在已迁移了 72%,而 4 月初为 63%。感谢 Florian Scholz、Mark Boas、Daniel Beck、ExE Boss 和许多其他人迁移数据和审查 PR。
我们了解到三个使用此数据的项目。 polyfill-checker 会验证正在运行的代码是否使用 polyfill 而不是内置功能,以确保代码在较旧的浏览器中运行相同。 eslint-plugin-bultin-compat 使用 ESLint 的静态分析执行类似的工作。 MDN 浏览器兼容性数据浏览器 是一个用于浏览数据的 Rails 应用程序,它包括功能搜索以及浏览器支持的摘要图表。
Mark Dittmer 继续在 mdn-confluence 工具 上进行工作。此工具从 Web API Confluence 生成潜在的兼容性数据更新,该工具通过直接测试浏览器收集 JavaScript API 的可用性。mdn-confluence 工具已集成到 BCD 开发环境中。数据迁移完成后,我们的重点将转移到更正和更新数据,类似这样的工具将成为该流程的一部分。
将基于字体的图标替换为内联 SVG
MDN 一直使用 Font Awesome 提供高质量的图标。基于字体的图标的一项功能是对 Internet Explorer 7 的强大支持,在 2014 年我们上次更新图标系统时,Internet Explorer 7 仍然是一个优先事项。我们一直在更新支持的浏览器列表,并且在 4 月,Schalk Neethling 开始将基于字体的图标切换为内联 SVG 图标。
这两种方法都会生成在高 DPI 显示器上看起来很好的清晰图标。图标字体需要一个网络请求来下载字体文件,无论是标准版本(包括我们不使用的许多图标)还是最小化版本(我们维护并自己提供服务)。使用内联 SVG,浏览器会通过初始 HTML 请求获取图标数据,并且不会获取页面上未使用任何其他图标。内联 SVG 也更适合我们的模板系统,使开发人员更清楚地了解正在使用的图像。
这项工作将在 5 月继续进行,因为我们将在使用 SVG 图标时改进 可访问性 和本地化。我们还将删除支持基于字体的图标的代码,从而简化 CSS 和 JavaScript。
发布了调整和修复
4 月合并了 510 个 PR
- 329 个 mdn/browser-compat-data PR
- 77 个 mdn/interactive-examples PR
- 27 个 mozilla/kuma PR
- 24 个 mdn/kumascript PR
- 20 个 mdn/data PR
- 18 个 mdn/bob PR
- 5 个 mdn/mdn-fiori PR
- 2 个 mdn/dom-examples PR
- 2 个 mdn/pwa-examples PR
- 1 个 mdn/browser-compat-toolkit PR
- 1 个 mdn/django-diy-blog PR
- 1 个 mdn/learning-area PR
- 1 个 mdn/webextensions-examples PR
- 1 个 mdn/viewsourceconf PR
- 1 个 mdn/indexeddb-examples PR
其中 140 个来自首次贡献者
- 添加了 Web 存储 API 的兼容性数据 (BCD PR 1187),来自 Adam。
- 添加了演示文稿的兼容性数据 (BCD PR 1249),来自 Lars Bärtschi。
- 添加了 SVGAnimatedInteger 的兼容性数据 (PR 1310),添加了 SVGAnimatedLength 的兼容性数据 (PR 1773),以及 BCD 的另外 21 个 PR,来自 Peter Folkins。
- 更新了 Chrome/Firefox 对请求主体中 ReadableStream 的支持 (BCD PR 1333),来自 AnthumChris。
- 添加:具有浮点数值表示法的函数语法 (PR 1342),以及新增:在 grid-gap(边距属性)中添加 calc() 值 (PR 1378),来自 一丝(BCD 的首次贡献)。
- 添加了 Bluetooth Web API 的兼容性数据 (BCD PR 1385),来自 Brian Pierce。
- HTMLEmbedElement (PR 1399),添加了 HTMLFontElement 的兼容性数据 (PR 1436),以及 BCD 的另外 6 个 PR,来自 Janet Swisher。
- 添加了 CSSConditionRule 的兼容性数据 (PR 1569),添加了 CSSCounterStyleRule 的兼容性数据 (PR 1571),以及 BCD 的另外 5 个 PR,来自 James W. Alvies。
- 添加了 CompositionEvent 的兼容性数据 (BCD PR 1676),来自 Karl Stolley。
- 添加了 BeforeUnloadEvent (BCD PR 1696),来自 Kayce Basques。
- 修复了 RTCPeerConnection.getSenders 的 Chrome/Opera 版本 (PR 1713),以及修复了 RTCPeerConnection.getReceivers 的 Chrome/Opera 版本 (PR 1714),BCD 中的这些 PR 来自 Jeremy Lainé。
- 更新了 SyncManager.json (BCD PR 1716),来自 Isaac Kwan。
- 将备用名称添加到
fullscreenElement
(BCD PR 1724),来自 timm-gs。 - 更新了 Safari 对 AbortController 的数据 (PR 1729),以及更新了 Safari 对 AbortSignal 的数据 (PR 1730),BCD 中的这些 PR 来自 mata007。
- Firefox 不支持 transceiver.setCodecPreferences() (BCD PR 1735),来自 jan-ivar。
- 添加了 Comment 的兼容性数据 (BCD PR 1736),来自 katzrkool。
- 更新 nodejs 与 javascript.function.rest_parameters 的兼容性 (BCD PR 1744),来自 Charles Samborski。
- 添加 -webkit-progress-* 伪类选择器 (PR 1748),添加 -webkit-meter-* 选择器 (PR 1749),以及 3 个其他 PR 到 BCD,来自 Connor Shea。
- Web API: 添加 HashChangeEvent (PR 1759),Web API: 添加 CaretPosition (PR 1765),以及 2 个其他 PR 到 BCD,来自 Claas Augner。
- 更新 css.selectors.marker 的兼容性数据 (BCD PR 1775),来自 Martin Schneider。
- 为替代选择器添加缺失的冒号 (PR 1778),更正
border-radius
简写属性的替代方案 (PR 1895),以及 2 个其他 PR 到 BCD,来自 Fredrik Nicol。 - 添加 IE 中字符串替换支持的兼容性数据 (BCD PR 1780),来自 Steven Goris。
- 更正 Opera 对 summary 和 details 元素的兼容性 (PR 1786),以及修复(api.Node.getRootNode): 修复 IE/Edge 兼容性 (PR 1833),到 BCD,来自 Ryan Johnson。
- 修复 overrideMimeType 的 IE 兼容性版本 (BCD PR 1792),来自 Marie P-W。
- 转移 Web/API/Element/matches 的数据 (BCD PR 1801),来自 Maarten Brouwers。
- 更新 nth-child 和 nth-last-child 支持数据 (BCD PR 1805),来自 SelenIT。
- 修复 <legend> IE 兼容性数据 (BCD PR 1821),来自 Shaun Dillon。
- 修复 URL.searchParams 的错误 URL (BCD PR 1828),来自 Zack Harley。
- 更新 Edge 对 WebAssembly 流式 API 的支持 (BCD PR 1829),来自 Michael Ferris。
- Chrome 支持 SVG 上的 filter 属性 (BCD PR 1870),来自 ypnos-web。
- 更新 CSS Shapes 数据 (PR 1871),来自 Rachel Andrew (首次贡献到 BCD)。
- 根据 Caniuse 添加 font 元素兼容性数据 (BCD PR 1880),来自 Michal Čaplygin。
- 更新/数据通道 Edge Safari (BCD PR 1940),来自 Brian Peiris。
- 为 font-synthesis 添加更具说明性的示例 (Interactive Examples PR 715),来自 陈慧晶。
- 移除硬编码的‘height’ (Interactive Examples PR 724),来自 Mats Palmgren。
- 添加 <kbd> 示例 (PR 756),添加 <mark> 示例 (PR 775),以及 10 个其他 PR,来自 Florian Scholz (首次贡献到 Interactive Examples)。
- Issue #730 – 内容分节 – header (PR 789),添加 dl 元素的交互式示例 (PR 826),以及 2 个其他 PR,来自 Eric Shepherd (首次贡献到 Interactive Examples)。
- 添加 <footer> 示例 (PR 804),添加 <del> 示例 (PR 844),以及 2 个其他 PR,来自 Adilson Sandoval (首次贡献到 Interactive Examples)。
- 配置 Renovate (Interactive Examples PR 850),来自 renovate[bot]。
- 仅预加载 .woff2 字体文件 (Kuma PR 4728),来自 Alex Gibson。
- 更新 jinja 和 django-jinja (Kuma PR 4747),来自 Mohammed Ali Zubair。
- 为 LearnSideBar 添加日语标题 (KumaScript PR 638),来自 T. Uemura。
- 更新 L10n-Common.json (KumaScript PR 644),来自 sigoa。
- 添加和更新简体中文 (zh-CN) 翻译 (KumaScript PR 648),来自 佛壁灯。
- 在 L10nStatusOverview.ejs 中添加巴西葡萄牙语翻译 (pt-BR) (KumaScript PR 661),来自 Matheus Cuba。
- 为 LearnSidebar 宏添加 pt-BR 本地化文本 (PR 663),以及添加 pt-BR 翻译 (PR 664),到 KumaScript,来自 Giorgio。
- 为 cssxref 提供测试 (PR 684),以及为 svginfo 提供测试 (PR 690),来自 Jeremie Patonnier (首次贡献到 KumaScript)。
- 检查选择器是否存在于 selectors.json 中 (KumaScript PR 687),来自 Kasper Christensen。
- 修复 SpecData 中的 ES8/ES2017 链接 (KumaScript PR 688),来自 choeun。
- 添加 justify-self CSS 属性 (PR 184),添加 justify-items CSS 属性 (PR 185),以及 5 个其他 PR 到 Data,来自 Piotr Kuczynski。
- 为 overflow[-(x|y)] 添加
clip
关键字 (PR 202),为 page-break-(after|before) 添加缺失的关键字recto
和verso
(PR 203),以及 4 个其他 PR 到 Data,来自 Fredrik Nicol。 - 将 image-resolution 标记为实验性。修复 #214 (PR 215),以及将 ruby 属性标记为实验性。修复 #216 (PR 217),到 Data,来自 Pine。
- 配置 Renovate (bob PR 26),来自 renovate[bot]。
- 更新 baseURL 指向 MDN GitHub (mdn-fiori PR 6),来自 Stephen Coogan。
- 修复过时的
mdn-browser-compat-data
依赖项 (PR 4),来自 ExE Boss (首次贡献到 browser-compat-toolkit)。 - 更新 admin.py (django-diy-blog PR 5),来自 Özgür。
- 更新 text-start.html (错别字 – 大小写) (learning-area PR 68),来自 Matt Buckley。
- 修复 HTML 片段中的结束标签 (webextensions-examples PR 355),来自 Daniel Dawson。
- 移除 404 服务工作者的注册代码 (viewsourceconf PR 239),来自 Alex Gibson。
- 按评分过滤 (indexeddb-examples PR 1),来自 matthewchao。
其他重要的 PR
- 为许多 Samsung Internet 数据填充的巨大 PR (BCD PR 1606),来自 Ada Rose Cannon。
- 在 release_statement 中禁止附加属性 (BCD PR 1790),来自 Florian Scholz。
- 使
prefix
和alternative_name
互斥 (BCD PR 1836),来自 ExE Boss。 - 为当前文档添加 hreflang (Kuma PR 4745),来自 Maton Anthony。
- 添加测试以避免被零除 (KumaScript PR 665),来自 Clément。
- 在 selectors.json 中添加一些缺失的项 (Data PR 198),来自 Joe Medley。
计划在 5 月
发布 HTML 交互式示例
MDN 员工和志愿者正在编写 HTML 交互式示例,例如 一个 <datalist> 的演示。这将添加到 JavaScript 和 CSS 示例中,并将完成交互式示例项目的第一个阶段。有一个 错误 阻止了 HTML 示例的发布,该错误将在 5 月得到修复,然后这些新示例可以发布到 MDN。
如果您想帮助编写 HTML 示例,请参见 Discourse 上的 求助信息。
部署 Django 1.11
Django 1.11 的工作在 4 月继续进行,但 CDN 比预期花费了更多精力。我们将继续进行 Django 升级工作,并计划在 5 月部署它。
关于 John Whitlock
John 是一位网页开发者,负责 MDN Web Docs 的引擎