0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

OSC开源社区 来源:OSC开源社区 2023-07-30 09:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Visual Studio Code 最近将其内置的 JavaScript 大小减少了 20%,节省了超过 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);

变为更短的:

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。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA语言
    +关注

    关注

    0

    文章

    138

    浏览量

    21638
  • javascript
    +关注

    关注

    0

    文章

    526

    浏览量

    56514
  • AST
    AST
    +关注

    关注

    0

    文章

    9

    浏览量

    2498
  • vscode
    +关注

    关注

    1

    文章

    173

    浏览量

    9262

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

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【RA-Eco-RA4M2开发板评测】+VS Code 下瑞萨 RA4M2 开发环境搭建与 GPIO 点灯实验教程

    一、前言 瑞萨RA4M2 系列芯片凭借高性能、低功耗与完善的生态支持,在工业控制、物联网终端等领域得到广泛应用。相较于官方 e2 studio 集成开发环境,VS Code 具备轻量化、可扩展、跨
    发表于 04-15 15:12

    在MCUXpresso for VS Code中调用JLINK Script的三种方法

      对于MCU开发者来说,VS Code凭借轻量、跨平台、高可扩展等优势,已经成为日常编码的神器。然而长期以来,很多人只能把VS Code
    的头像 发表于 03-02 09:27 3125次阅读
    在MCUXpresso for <b class='flag-5'>VS</b> <b class='flag-5'>Code</b>中调用JLINK Script的三种方法

    Claude Code在国内怎么使用?AI编程人员必看的完整指南!

    : Claude Code在国内无法直接访问 。所以本篇内容为大家介绍Claude Code为什么国内用不了?程序员又该如何稳定、合规地使用 Claude?本文一次讲清。 一、Claude C
    的头像 发表于 01-23 14:09 5791次阅读
    Claude <b class='flag-5'>Code</b>在国内怎么使用?AI编程人员必看的完整指南!

    SN65LVDS20与SN65LVP20:高速差分收发神器揭秘

    SN65LVDS20与SN65LVP20:高速差分收发神器揭秘 在高速信号处理的领域中,差分信号的处理与传输一直是工程师们关注的焦点。德州仪器(TI)推出的SN65LVDS20和SN6
    的头像 发表于 12-29 16:00 677次阅读

    大理的AI野心藏不住了——风花雪月中千名程序员探讨人工智能

    2025 年12月4日至6日第二届CCF程序员大会暨大理人工智能与应用国际开发者大会在大理圆满落幕。
    的头像 发表于 12-24 17:45 877次阅读
    大理的AI野心藏不住了——风花雪月中千名<b class='flag-5'>程序员</b>探讨人工智能

    程序员最常见谎言

    了。 28我已经测试过了,这个功能没问题,可以上线了。 29别担心,这个问题很快就能解决。 30代码快写完了,已经完成 90% 了 。 希望大家对程序员多一些容忍以及谅解! 各位程序员你们都被我说中了哪些?说说你们的观点
    发表于 12-10 08:24

    VS Code 中`xiaozhi-esp32` 项目文件夹 修改 I2C 设备地址为 `0x78`

    VS Code 中`xiaozhi-esp32` 项目文件夹 修改 I2C 设备地址为 `0x78`
    的头像 发表于 11-28 07:30 1361次阅读

    VS Code运行 pytest_hello_world.py

    VS Code运行 pytest_hello_world.py
    的头像 发表于 11-24 00:33 751次阅读

    Joycode 无法跨项目读取源码怎么办?MCP Easy Code Reader 帮你解决!

    Code Agent 帮我们分析逻辑和编写代码,而无需手动将源码复制到对话框中发送给 AI,提高 Code Agent 准确度和编码效率。MCP 已发布 Github: easy-code
    的头像 发表于 11-19 15:50 1245次阅读
    Joycode 无法跨项目读取源码怎么办?MCP Easy <b class='flag-5'>Code</b> Reader 帮你解决!

    如何在VS code中配置Zephyr集成开发环境

    上一篇文章介绍了如何在VS code中使用瑞萨官方插件为RA芯片创建项目与项目调试,相信大家对RA在VS code中的开发有了基础的了解。
    的头像 发表于 11-05 14:46 1751次阅读
    如何在<b class='flag-5'>VS</b> <b class='flag-5'>code</b>中配置Zephyr集成开发环境

    项目效率翻倍!迅为RK3568 V2.0硬件接口升级,开发流程提速

    项目效率翻倍!迅为RK3568 V2.0硬件接口升级,开发流程提速
    的头像 发表于 10-29 10:53 662次阅读
    项目效率翻倍!迅为RK3568 V2.0硬件接口升级,开发流程<b class='flag-5'>再</b><b class='flag-5'>提速</b>

    奔赴热AI,码力全开!Talkweb House@1024程序员日系列活动圆满收官

    1024程序员日”系列活动至此划上了一个圆满句号。本届1024程序员节以“AI构建世界,智能引领未来”为主题,广邀技术大咖、产业领袖、企业代表与全球开发者齐聚星城
    的头像 发表于 10-27 18:59 938次阅读
    奔赴热AI,码力全开!Talkweb House@1024<b class='flag-5'>程序员</b>日系列活动圆满收官

    开鸿智谷“以赛促学、以赛选才”|1024程序员节暨开源鸿蒙构建大会圆满落幕!

    10月24日,由开鸿智谷联合主办的长沙1024程序员节暨开源鸿蒙构建大会在长沙圆满落幕。本次活动以“湘聚长沙,共赴热AI”为主题,通过技术分享与实战竞赛相结合的方式,着力培养“开源鸿蒙+AI”领域
    的头像 发表于 10-27 17:58 831次阅读
    开鸿智谷“以赛促学、以赛选才”|1024<b class='flag-5'>程序员</b>节暨开源鸿蒙构建大会圆满落幕!

    SEGGER工具链集成到CMake和VS Code

    SEGGER公司已将其嵌入式开发工具链集成到了广泛使用的CMake构建配置工具中,这意味着基于Visual Studio CodeVS Code)代码编辑器的应用开发可以方便的使用SEGGER工具实现了。
    的头像 发表于 07-23 15:06 1164次阅读

    程序设计与数据结构

    的地址)出发,采用推导的方式,深入浅出的分析了广大C程序员学习和开发中遇到的难点。 2. 从方法论的高度对C语言在数据结构和算法方面的应用进行了深入讲解和阐述。 3. 讲解了绝大多数C程序员开发
    发表于 05-13 16:45