MDN 2018 年 7 月变更日志:CDN 测试,告别区域和 BCD

编辑注:变更日志 是“对项目所做的所有重大更改的日志或记录。[它] 通常包括更改记录,例如错误修复、新功能等”。发布变更日志在开源中是一种传统,也是网络上的长期做法。我们认为 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%,这表明性能显着下降

A graph comparing page load time during the experiment vs. the previous week.

7 月 13 日,中国的页面加载时间更长,慢了 60%

页面加载时间在工作日和周末也有所不同(正百分比表示页面加载时间更短,对用户更有利)

国家/地区 页面加载时间减少,
工作日
页面加载时间减少,
周末
全部 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 的历史

On the Progressive Web Apps MDN page, the zone style has an icon next to the tile, that it will lose without zone styles.

删除区域样式后的细微变化

区域侧边栏已转换为 KumaScript 侧边栏,并通过 wbamberg (PR 711 和其他几个) 的英勇努力,将它们添加到区域中的每个页面。

大约删除了 2600 行代码,约占代码库的 10%。维基代码现在更简单、更不容易出错,并且更新起来更安全。

转换兼容性数据

在去年的 7 月份,浏览器兼容性数据 (BCD) 项目达到了使用新兼容性数据的 MDN 页面超过 1000 个的里程碑,大约有 4900 个页面需要转换。本月,还有不到 850 个页面需要转换,超过 5000 个 MDN 页面正在使用新数据。BCD 团队的持续努力对 MDN 和社区产生了巨大的影响。

Visual Studio Code 提高了其数据的准确性,他们在 2018 年 6 月发布版中采用了 BCD 项目。这是由 Pinevscode-css-languageservice 问题 #102 中提出的,并在 PR #105 中实现,并得到了 BCD 和 mdn/data 贡献者 Connor Shea 的反馈。

The compatibilty data is available as a tooltip when editing

来自 BCD 的数据,如在 Visual Studio Code 中所见。

经过长时间的讨论,BCD 项目更新了 Node.js 版本号的策略 (PR 2196PR 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

其中 58 个来自首次贡献者

其他重要的 PR

计划在 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 引擎的开发。

更多 John Whitlock 的文章...