Redian新闻
>
程序员神器VS Code再提速,将内置JS减小20%!

程序员神器VS Code再提速,将内置JS减小20%!

公众号新闻
Visual Studio Code 最近将其内置的 JavaScript 大小减少了 20%,节省了超过 3.9 MB。这种减少不仅降低了下载和存储需求,而且由于在运行 JavaScript 之前需要扫描的源代码更少,因此也提高了启动速度。这个减小是通过一个新的构建步骤 “名称混淆压缩” 实现的,而非删除任何代码或进行重大重构。
 

workbench.js 随时间变化大小,右侧两个下降点:VS Code 1.74 第一大跌幅结果来源于混淆压缩私有属性,VS Code 1.80 第二小跌幅来源于混淆压缩 export。

在这篇文章中作者具体介绍了背后的思路,主要是两个方面的优化。下边看看实现逻辑。
文章链接:https://code.visualstudio.com/blogs/2023/07/20/mangling-vscode

混淆压缩私有属性

混淆压缩源码后 JavaScript 仍包含许多长标识符名称如 extensionIgnoredRecommendationsService。作者本来以为 esbuild 已经将这些标识符简化了,比如:
  • const someLongVariableName = 123;

  • console.log(someLongVariableName);

变为更短的:
  • const x = 123;

  • console.log(x);

由于 JavaScript 以源文本形式发布,减少标识符名称的长度实际上可以减小程序的大小。这种优化可能看起来有些荒谬,但在 JavaScript 世界里确实顶瓜瓜。
尽管 esbuild 实现了混淆功能,默认情况下只有当确定混淆不会改变代码行为时才对名称进行处理。因此,在实践中,esbuild 只对局部变量名和参数名进行处理。
也就是说,esbuild 这种保守策略意味着许多无法确认是否安全修改名称被忽略了。
怎么办呢?
作者团队最终利用 TypeScript 对混淆代码进行验证,正如 TypeScript 可以在常规代码中捕获未知的属性访问一样,TypeScript 编译器能够捕获到一个属性已经被混淆但对它的引用没有正确更新的情况。
解决思路:可以将 TypeScript 源码进行混淆,然后使用被改变标识符名称的新 TypeScript 进行编译。这种方式会使得对于是否无意间破坏了代码有更高的把握。
同时,通过使用 TypeScript,可以真正找到所有私有属性(而不是仅以 _ 开始的属性),甚至还可以利用 TypeScript 的现有重命名功能来智能地重命名符号,而不会意外改变对象形状。
他们提出了新的大致工作流程:
使用 TypeScript's AST 针对每个在代码库中发现的私有或受保护属性:
        如果该属性需要被修改:
                通过寻找未使用过的符号名称计算出一个新名称
                使用 TypeScript 生成所有引用该属性的重命名编辑
将所有重命名编辑应用于 TypeScript 源码
编译带有修改过名称的新编辑过的 Typescript 资源
结果大部分有效。
当然,也有一些例外需要处理:
  • 当前类内唯一性并不能满足要求,在超类和子类之间也必须具备唯一性。根本原因是 TypeScripts 私有关键字只是一个编译时装饰器,并不能真正防止超级和子类访问私有属性。如果不小心处理,则可能导致重新命名时产生名称冲突(幸运地是 Typescript 将其报告为错误)。

  • 在某些情况下,子类公开继承自父类受保护权限,在很多例子里面都属于错误操作,需要禁止此处进行混淆。

这样构建成功后,混淆私有属性后 VS Code 主要 workbench.js 文件大小从 12.3MB 降低至 10.6MB , 减少近 14%。这也带来 5% 加载速度提高,因为需要扫描文本量减少。

混淆压缩 export

另一方面,其实 provideWorkspaceTrustExtensionProposals 等长名字,或者 localize 函数(用于 UI 显示字符串)明显还有改善空间。针对它的处理是:导出符号名称。只要导出仅供内部使用,就可以缩短它们而不改变代码行为。
最终,经过优化,总体上文件比没有进行名称压缩小了 20%。在整个 VS Code 中,名称压缩从编译源码移除 3.9MB JavaScript 代码,这既降低了下载大小和安装大小,也使每次启动 VS Code 需要扫描 JS 代码量减少 3.9MB。
相关链接:https://code.visualstudio.com/blogs/2023/07/20/mangling-vscode


往期推荐



马斯克 “零元购”,骚操作强夺 @x 推特账号
已被LLM“杀死”?Stack Overflow:打不过就加入
开源模拟器Dolphin放弃上架Steam



这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
再也不怕「视频会议」尬住了!谷歌CHI顶会发布新神器Visual Captions:让图片做你的字幕助手戏成CVPR 2023 | 改动一行代码,PyTorch训练三倍提速,这些高级技术是关键全国 程序员 薪酬大曝光!狠狠酸住了,33% 程序员月薪达到...【宏观市场】政府债发行再提速—第三季度政府债供给报告程序员未写出赌博程序被拔掉14颗牙;前华为“天才少年”稚晖君公布首款人形机器人;马斯克称X平台将移除拉黑功能 | AI一周资讯GitHub Copilot:6人小团队如何开发出风靡全球的程序员神器? |【经纬低调分享】云原生背景下如何配置JVM内存JS三大运行时对比:Deno、Bun和Node.jsAI代码神器火了,复杂操作秒变easy,网友:要抛弃VS Code了路遇桥上大卡车起火Nodejs应用编译构建提速建议学假[9月26日]科学历史上的今天——金·赫尔尼(Jean Amédée Hoerni)阿里终面:每天100w次登陆请求, 8G 内存该如何设置JVM参数?携手英超劲旅狼队,沱牌聚势焕新,复星赋能舍得酒业国际化进程再提速程序员神器 VS Code 再提速,将内置 JS 减小 20% !VS Code上跑ChatGPT,程序员神器更丝滑了程序员未写出赌博程序被拔掉 14 颗牙直击上影节|AIGC冲击、“暑期档”提速,电影行业复苏“低调进行时”?体积减小20%,TypeScript的npm包逐渐变小可怕!真实版中国程序员因在东南亚拒写赌博程序,被囚禁、虐待拔14颗牙,身体损伤达88%6人小团队,如何开发出风靡全球的程序员神器?宇宙人(1282期)梦天舱首个出舱载荷安装到位;海南商业航天发射场建设再提速;乌克兰初创公司的卫星电推进系统首次在轨演示VS Code内置JS减小20%;Python团队官宣下线GIL;Chrome替代品1.0发布;Twitter改名X | 周热点程序员「求生宝典」!AI大发展下的程序员求生指南,干货满满户籍改革再提速!江苏、浙江出招重磅!新西兰移民局独家回应:这些工作经验不算数!新政下审批大提速,一个多月就能拿绿卡!?但有人更难办了...联想拯救者 Y9000K 2023 旗舰游戏本将内置水泵,为 GPU 快速降温为了你走遍草原 第二十二章中国46岁程序员拒写赌博程序遭拔14颗牙;小红书被疑“偷”原画师作品喂自家大模型;全面停止服务,俄遇“微软危机”|Q资讯网传高盛中国办公室所有人被带走,北京、上海办事处最新回应;中国程序员拒写赌博程序被拔14颗牙;北京严禁使用AI生成处方丨雷峰早报中国 程序员 赴越南,拒写 赌博程序 遭到数月虐待,被拔 14 颗牙,全身损伤达 88%中国程序员拒写赌博程序被拔14颗牙,全身损伤达88%we want to stay in touch with information,Our processing capabil
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。