现已发布!阅读关于 11 月新增功能和修复的内容。

1.7 回滚事件报告

2016年11月3日,Wade Anderson,@waderyan_

昨晚,即11月2日星期三,我们将Visual Studio Code的1.7版本回滚到了1.6.1。如果您已经升级到1.7,您将收到提示更新回1.6.1。今天早上,我们实施了一个缓解修复并发布了一个新版本,您现在应该使用的是VS Code 1.7.1。如果您不确定您当前的版本,可以在“关于”对话框中找到版本信息

对于这些更新给您带来的不便,我们深表歉意,并希望解释所发生的事件以及我们正在采取的步骤,以确保您拥有良好的VS Code体验。

自动类型获取

在VS Code 1.7中,我们发布了一个名为“自动类型获取”(ATA)的功能。ATA的目的是改善JavaScript IntelliSense体验。

VS Code使用TypeScript语言服务为JavaScript提供IntelliSense。TypeScript语言服务使用特殊文件,称为类型声明文件(也称为类型文件),它们在npm上以@types 范围发布。过去,您必须手动安装类型声明文件才能点亮package.json中依赖项的IntelliSense。我们知道这不是一件容易的事,因此我们与TypeScript团队合作开发了ATA。

启用了ATA的TypeScript语言服务会监视您的package.json文件,并自动将所有依赖项的类型声明文件安装到您文件系统上的缓存中。当它发现对知名客户端库的引用时,也会执行相同的操作。

在Insiders构建中启用此功能两周后,我们认为它对用户很有用,并决定在VS Code 1.7中向所有人发布ATA。

发生了什么?

11月2日下午1:57左右(太平洋标准时间) 我们发布了VS Code 1.7。苏黎世团队去睡觉了,雷德蒙德团队开始制定我们1.8版本的计划。

11月2日下午4:12左右(太平洋标准时间) 我们收到了npm的联系。他们发现客户端尝试访问@types范围下不存在的包,导致注册表活动急剧增加。在其高峰期,这些请求约占所有流量的10%(有趣的事实:VS Code用户发送的请求量大约与npm从印度看到的请求量相同),并短暂地使他们的服务不堪重负。

npm开发运维团队迅速采取行动,减轻了非故意的DDoS攻击,并诊断出问题源于VS Code 1.7版本。关键问题是由于以下算法导致的大量不存在包的请求:

  1. TypeScript语言服务器根据其应用程序缓存检查package.json中列出的模块。
  2. 对于应用程序缓存中不存在的每个模块,TypeScript语言服务器向npm请求@types/{module}
  3. 存在的模块被添加到应用程序缓存中。
  4. 由于预期新的类型声明文件将被添加到@types范围中,每次打开项目或文件夹时都会请求不存在的模块,这导致npm响应404。

考虑到@types范围下不存在的模块数量,大量的404请求短暂地影响了npm的可用性。

11月2日下午5:45左右(太平洋标准时间) 在获得适当背景并应npm要求后,我们下架了1.7版本,并将用户回滚到VS Code 1.6.1。我们用我们掌握的事实更新了网站,并卷起袖子分析最佳的下一步措施。

未来展望

您应该已经收到安装VS Code 1.7.1的提示。此版本已禁用ATA,但所有其他1.7功能均可使用。在接下来的几天里,我们将与TypeScript团队合作,为ATA提供一个令人满意的修复(昨晚已在此PR中开始),当此更新可用时,我们将通知您。

#HappyCoding

Wade Anderson,VS Code 团队成员
@waderyan_

© . This site is unofficial and not affiliated with Microsoft.