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

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

公众号新闻

转自:OSC开源社区

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

END

官方站点:www.linuxprobe.com

Linux命令大全:www.linuxcool.com

刘遄老师QQ:5604215

Linux技术交流群:2636170

(新群,火热加群中……)

想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!


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

戳这里提交新闻线索和高质量文章给我们。
相关阅读
5108 血壮山河之武汉会战 浴血田家镇 16JS三大运行时对比:Deno、Bun和Node.js中国程序员拒写赌博程序被拔14颗牙,全身损伤达88%中国 程序员 赴越南,拒写 赌博程序 遭到数月虐待,被拔 14 颗牙,全身损伤达 88%程序员未写出赌博程序被拔掉 14 颗牙CVPR 2023 | 改动一行代码,PyTorch训练三倍提速,这些高级技术是关键VS Code上跑ChatGPT,程序员神器更丝滑了中国46岁程序员拒写赌博程序遭拔14颗牙;小红书被疑“偷”原画师作品喂自家大模型;全面停止服务,俄遇“微软危机”|Q资讯朋友来做客/看文化如何影响你改动一行代码,PyTorch训练三倍提速,这些「高级技术」是关键罗氏再付20亿美元!获多款分子胶候选药,新数据显示可有效减小肿瘤尺寸全国 程序员 薪酬大曝光!狠狠酸住了,33% 程序员月薪达到...程序员「求生宝典」!AI大发展下的程序员求生指南,干货满满数字员工来了!有何神通?保险业AI应用提速,行业大咖这样说秋空中小银行“输血”提速,今年专项债累计发行超1300亿元VS Code内置JS减小20%;Python团队官宣下线GIL;Chrome替代品1.0发布;Twitter改名X | 周热点可怕!真实版中国程序员因在东南亚拒写赌博程序,被囚禁、虐待拔14颗牙,身体损伤达88%移民观【宏观市场】政府债发行再提速—第三季度政府债供给报告他们犯罪了吗?联想拯救者 Y9000K 2023 旗舰游戏本将内置水泵,为 GPU 快速降温程序员神器VS Code再提速,将内置JS减小20%!户籍改革再提速!江苏、浙江出招体积减小20%,TypeScript的npm包逐渐变小[9月26日]科学历史上的今天——金·赫尔尼(Jean Amédée Hoerni)起底PC新机皇:高通4nm芯片,Arm架构Windows系统,内置Transformer加速,还配了5G和WiFi7特大喜迅|移民局审批提速,58天批准5年期工卡及回美纸申请!这个工具,Java程序员必备神器 !“根本不需要TypeScript,JS+JSDoc够了”,大佬说我想多了网传高盛中国办公室所有人被带走,北京、上海办事处最新回应;中国程序员拒写赌博程序被拔14颗牙;北京严禁使用AI生成处方丨雷峰早报程序员未写出赌博程序被拔掉14颗牙;前华为“天才少年”稚晖君公布首款人形机器人;马斯克称X平台将移除拉黑功能 | AI一周资讯AI代码神器火了,复杂操作秒变easy,网友:要抛弃VS Code了谷歌重磅发布多平台应用开发神器:背靠 AI 编程神器 Codey,支持 React、Vue 等框架,还能补全、解释代码code review 和同事吵架,老板说我态度有问题一公司奖励程序员38g黄金空格键价值2万元:奖励给有效代码量最多的程序员
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。