現已釋出!閱讀關於 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.