0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

程序員神器VS Code再提速將內置JS減小20%!

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 2023-07-30 09:57 ? 次閱讀

Visual Studio Code 最近將其內置的 JavaScript 大小減少了 20%,節(jié)省了超過 3.9 MB。這種減少不僅降低了下載和存儲需求,而且由于在運行 JavaScript 之前需要掃描的源代碼更少,因此也提高了啟動速度。這個減小是通過一個新的構建步驟 “名稱混淆壓縮” 實現的,而非刪除任何代碼或進行重大重構。

ff3bf892-2e16-11ee-815d-dac502259ad0.png? ff621108-2e16-11ee-815d-dac502259ad0.png

workbench.js 隨時間變化大小,右側兩個下降點:VS Code 1.74 第一大跌幅結果來源于混淆壓縮私有屬性,VS Code 1.80 第二小跌幅來源于混淆壓縮 export。

混淆壓縮私有屬性

混淆壓縮源碼后 JavaScript 仍包含許多長標識符名稱如 extensionIgnoredRecommendationsService。作者本來以為 esbuild 已經將這些標識符簡化了,比如:

const someLongVariableName = 123;

console.log(someLongVariableName);

變?yōu)楦痰模?/p>

const x = 123;

console.log(x);

由于 JavaScript 以源文本形式發(fā)布,減少標識符名稱的長度實際上可以減小程序的大小。這種優(yōu)化可能看起來有些荒謬,但在 JavaScript 世界里確實頂瓜瓜。

盡管 esbuild 實現了混淆功能,默認情況下只有當確定混淆不會改變代碼行為時才對名稱進行處理。

因此,在實踐中,esbuild 只對局部變量名和參數名進行處理。

也就是說,esbuild 這種保守策略意味著許多無法確認是否安全修改名稱被忽略了。

怎么辦呢?

作者團隊最終利用 TypeScript 對混淆代碼進行驗證,正如 TypeScript 可以在常規(guī)代碼中捕獲未知的屬性訪問一樣,TypeScript 編譯器能夠捕獲到一個屬性已經被混淆但對它的引用沒有正確更新的情況。

解決思路:可以將 TypeScript 源碼進行混淆,然后使用被改變標識符名稱的新 TypeScript 進行編譯。這種方式會使得對于是否無意間破壞了代碼有更高的把握。

同時,通過使用 TypeScript,可以真正找到所有私有屬性(而不是僅以 _ 開始的屬性),甚至還可以利用 TypeScript 的現有重命名功能來智能地重命名符號,而不會意外改變對象形狀。

他們提出了新的大致工作流程: 使用 TypeScript's AST 針對每個在代碼庫中發(fā)現的私有或受保護屬性:

如果該屬性需要被修改:

通過尋找未使用過的符號名稱計算出一個新名稱

使用 TypeScript 生成所有引用該屬性的重命名編輯 將所有重命名編輯應用于 TypeScript 源碼 編譯帶有修改過名稱的新編輯過的 Typescript 資源 結果大部分有效。

當然,也有一些例外需要處理:

當前類內唯一性并不能滿足要求,在超類和子類之間也必須具備唯一性。根本原因是 TypeScripts 私有關鍵字只是一個編譯時裝飾器,并不能真正防止超級和子類訪問私有屬性。

如果不小心處理,則可能導致重新命名時產生名稱沖突(幸運地是 Typescript 將其報告為錯誤)。

在某些情況下,子類公開繼承自父類受保護權限,在很多例子里面都屬于錯誤操作,需要禁止此處進行混淆。

這樣構建成功后,混淆私有屬性后 VS Code 主要 workbench.js 文件大小從 12.3MB 降低至 10.6MB , 減少近 14%。這也帶來 5% 加載速度提高,因為需要掃描文本量減少。

混淆壓縮 export

另一方面,其實 provideWorkspaceTrustExtensionProposals 等長名字,或者 localize 函數(用于 UI 顯示字符串)明顯還有改善空間。

針對它的處理是:導出符號名稱。只要導出僅供內部使用,就可以縮短它們而不改變代碼行為。

最終,經過優(yōu)化,總體上文件比沒有進行名稱壓縮小了 20%。

在整個 VS Code 中,名稱壓縮從編譯源碼移除 3.9MB JavaScript 代碼,這既降低了下載大小和安裝大小,也使每次啟動 VS Code 需要掃描 JS 代碼量減少 3.9MB。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA語言
    +關注

    關注

    0

    文章

    138

    瀏覽量

    20027
  • javascript
    +關注

    關注

    0

    文章

    515

    瀏覽量

    53658
  • AST
    AST
    +關注

    關注

    0

    文章

    7

    瀏覽量

    2306
  • vscode
    +關注

    關注

    1

    文章

    152

    瀏覽量

    7558

原文標題:程序員神器VS Code再提速,將內置JS減小20%!

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    程序員節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎

    10月24日,程序員專屬的節(jié)日里,我們盛大開啟“程序員節(jié)視頻創(chuàng)意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創(chuàng)意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發(fā)表于 07-08 10:38 ?72次閱讀
    <b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎

    程序員節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

    10月24日,程序員專屬的節(jié)日里,我們盛大開啟“程序員節(jié)視頻創(chuàng)意大賽”特別活動!這不僅是一場視覺的盛宴,更是智慧與創(chuàng)意的璀璨碰撞。我們誠摯邀請每一位程序員及編程愛好者,拿起你的鏡頭,記錄下那些平凡日子中的不凡瞬間,讓編程的魅力與
    的頭像 發(fā)表于 07-04 09:00 ?67次閱讀
    <b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

    適者生存,程序員最終會流向哪……

    程序員沒有永遠的護城河?。【湍壳暗幕ヂ?lián)網大環(huán)境來看,it行業(yè)已經是……
    的頭像 發(fā)表于 03-11 17:11 ?279次閱讀
    適者生存,<b class='flag-5'>程序員</b>最終會流向哪……

    VS CodeVS Codium之間的區(qū)別有哪些?你選哪個?

    VS Codium 是一個 VS Code 的克隆版本,百分之百免費且開源。
    的頭像 發(fā)表于 02-23 15:28 ?1083次閱讀
    <b class='flag-5'>VS</b> <b class='flag-5'>Code</b>和<b class='flag-5'>VS</b> Codium之間的區(qū)別有哪些?你選哪個?

    2024程序員的未來方向如何走?還看今朝

    這幾年的IT行業(yè)想必大家已經感受到了,Android、Java、前端等等程序員都經歷了大廠……
    的頭像 發(fā)表于 02-02 09:45 ?687次閱讀
    2024<b class='flag-5'>程序員</b>的未來方向如何走?還看今朝

    Simplicity Studio 5擴增功能支持以VS Code開發(fā)

    應用程序開發(fā)的支持。此一功能擴展可讓開發(fā)人員在VSCode生態(tài)系統(tǒng)中構建、刷新和調試。用戶可以使用VS Code作為主要的IDE,同時仍然能夠使用熟悉和喜愛的項目配置圖形界面。在Simplicity Studio中配置、設置和生
    的頭像 發(fā)表于 01-29 10:34 ?683次閱讀
    Simplicity Studio 5擴增功能支持以<b class='flag-5'>VS</b> <b class='flag-5'>Code</b>開發(fā)

    程序員表白程序

    電子發(fā)燒友網站提供《程序員表白程序.rar》資料免費下載
    發(fā)表于 11-21 10:41 ?0次下載
    <b class='flag-5'>程序員</b>表白<b class='flag-5'>程序</b>

    嵌入式程序員應知道的幾個基本問題

    電子發(fā)燒友網站提供《嵌入式程序員應知道的幾個基本問題.pdf》資料免費下載
    發(fā)表于 11-20 11:21 ?0次下載
    嵌入式<b class='flag-5'>程序員</b>應知道的幾個基本問題

    MCUXpresso for VS Code保姆式教程免費送!

    背景 NXP 在 2023 年 7 月 31 日正式發(fā)布了 MCUXpresso for VS Code? 插件,使得廣大的 VS Code 用戶可以在熟悉的代碼編輯環(huán)境中,快速開發(fā)基
    的頭像 發(fā)表于 11-16 08:55 ?1054次閱讀
    MCUXpresso for <b class='flag-5'>VS</b> <b class='flag-5'>Code</b>保姆式教程免費送!

    智能低代碼洪流涌動程序員節(jié),華為云 Astro 觸發(fā) 1024 的乘法效應!

    ? 從人工智能至量子計算,再到最新的云原生技術,越來越多的榮耀被程序員斬獲。今年 1024 程序員節(jié),華為云 Astro 向全民致敬:「低代碼高產出?拓荒數字化版圖——人人皆是程序員」,為全球工程師
    的頭像 發(fā)表于 11-13 09:39 ?365次閱讀
    智能低代碼洪流涌動<b class='flag-5'>程序員</b>節(jié),華為云 Astro 觸發(fā) 1024 的乘法效應!

    在嵌入式中如何利用VS Code進行遠程開發(fā)呢?

    VS Code幾乎是所有的程序員必備的工具之一,據說全球一般的開發(fā)者都使用過VS Code這款工具。
    的頭像 發(fā)表于 11-07 09:27 ?586次閱讀
    在嵌入式中如何利用<b class='flag-5'>VS</b> <b class='flag-5'>Code</b>進行遠程開發(fā)呢?

    喜迎1024程序員節(jié)!祝各位開發(fā)者們“碼”到“程”功!

    祝各位開發(fā)者們,節(jié)日快樂! 程序員(Programmer)是從事程序開發(fā)、維護的專業(yè)人員。 對于奮斗在一線的程序員們來說, 10月24日 是一個特殊的日子,這一天是屬于程序員們自己的節(jié)
    的頭像 發(fā)表于 10-24 20:00 ?604次閱讀
    喜迎1024<b class='flag-5'>程序員</b>節(jié)!祝各位開發(fā)者們“碼”到“程”功!

    今天程序員節(jié)長沙出招 全國首個!長沙為程序員打造“1024街”

    今天10月24日,今天程序員節(jié);先給程序員點贊,我們還看到有一些平臺舉辦了程序員節(jié);而在長沙,更有為程序員打造“1024街”。 昨天第四屆“長沙·中國1024
    的頭像 發(fā)表于 10-24 14:29 ?523次閱讀

    程序員節(jié) | 今年程序員們都想要的禮物竟然是……

    原文標題:程序員節(jié) | 今年程序員們都想要的禮物竟然是…… 文章出處:【微信公眾號:微軟科技】歡迎添加關注!文章轉載請注明出處。
    的頭像 發(fā)表于 10-24 10:35 ?407次閱讀
    <b class='flag-5'>程序員</b>節(jié) | 今年<b class='flag-5'>程序員</b>們都想要的禮物竟然是……

    16位MCU和DSC程序員參考手冊

    電子發(fā)燒友網站提供《16位MCU和DSC程序員參考手冊.pdf》資料免費下載
    發(fā)表于 09-25 14:51 ?9次下載
    16位MCU和DSC<b class='flag-5'>程序員</b>參考手冊