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

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

3天内不再提示

新版本 IDE 的启动速度变快了?原来是在背后做了这些!

龙智 来源:jf_15970448 作者:jf_15970448 2025-01-24 13:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

IntelliJ IDEA 功能强、范围广,因此对资源有一定需求。根据您正在处理的项目,IDE 可能会出现滞后,这自然会令人沮丧。

打开项目时也许是开发者需要等待的最常见场景。IntelliJ IDEA 需要加载和同步项目、执行索引编制以及完成许多其他小任务才能启用所有实用功能。

在这篇博文中,我们将介绍在新版本 IntelliJ IDEA 中为提高性能而采取的措施,这些措施缩短了代码可交互时间并使 IDE 从启动开始就具有更高的响应速度。

我们的使命:改进代码可交互时间

对于 2023.2 之前的 IntelliJ IDEA 版本,IDE 必须等待项目的 Maven 或 Gradle 项目模型完全同步后才能开始编制索引。然后,在等待索引编制完成时,IDE 的所有智能功能都被禁用,包括代码高亮显示和导航。只有在索引编制完成后才能使用它们。

下面是相关组件的示意图:

wKgZPGeTKO2AOO6ZAADB5TQdSwU816.png

项目越大,同步项目和编制项目索引所需的时间越长。虽然这在意料之中,因为大型项目对于 IDE 来说更加复杂,但等待几分钟才能开始工作仍然有些糟糕。然而,由于加载项目时要执行的步骤太多,即使是较小的步骤也会花费大量时间,让人感觉 IntelliJ IDEA 运行缓慢。没人喜欢等待,尤其是您想要投入工作的时候。因此,我们将改善这种状况作为一项高度优先的任务。为了衡量我们的进度,我们决定跟踪我们所谓的“代码可交互时间”– 从应用程序启动或项目打开到可以在其中正常处理代码的时间。我们的目标是尽可能缩短代码可交互时间

改进项目打开流和体验

在 IntelliJ IDEA 中改进启动和项目打开的问题实际上非常复杂,因为它取决于多个组件及其互连。不过,这种复杂性也有好处,因为它可以让我们从多个角度解决问题。在等待技术改进方面的长期工作取得成果的同时,我们还调整了 IntelliJ IDEA 的索引编制方式,用户已经可以体验到在代码可交互时间方面的显著改进。

技术改进 >>

缩短代码可交互时间的一个明显方式是执行技术更新以提高 IDE 的性能 – 优化代码和架构、使用更好的硬件、并行化等。IntelliJ IDEA 已有 20 多年的历史,早期的一些架构和算法决策仍然存在于产品中。这方面的工作正在开展。我们投入了大量精力来适当监测、调查和优化性能瓶颈,并且已经取得了一些显著成果。我们将应用程序的启动应用程序性能指数 (Apdex) 提升到

顶级类别

,得分为 0.94,将多线程索引编制的速度提高了 25%,并消除了并行索引编制过程中不必要的锁,减少了其他线程等待此类锁的时间。但这将是一个漫长的过程,因为重构可能会对 IDE 中的其他子系统产生影响,需要经过较长时间的仔细评估。

在技术层面开展工作的同时,我们还决定另辟蹊径来解决 IDE 的感知性能问题。

分阶段同步索引编制 >>

IDE 不一定需要技术改进,用户就能体验到它的速度提升。

只要能够更快开始工作,他们就会感受到性能改进

。通过研究,我们了解到许多用户认为,当他们能够看到项目结构和正确的代码高亮显示时,IDE 就可以开始用于工作了。所以,这就是我们努力的重点。IDE 必须执行几个关键步骤才能使高亮显示和导航正常运作,但我们想知道这些步骤是否真的需要按顺序依次执行。2023.3 版本中一些很有前景的实验表明,

将同步和索引编制过程分为几个阶段并以异步方式运行,可以让用户更快地开始与代码交互。

因此,作为第一步,我们让 IntelliJ IDEA 在实际从 Gradle 或 Maven 等底层构建工具获取项目模型之前开始对项目目录中的文件编制索引。这样做的缺点是,不必要的文件也被编入索引,并且与构建工具同步后,需要重新编制索引。不过,根据我们的测试套件,整体代码可交互时间(包括同步和完整索引编制)显著缩短,在大型项目中的速度提高了 1.5 倍。但是,如果不加载项目模型,就无法正确建立项目各部分之间的关系、显示正确的项目树、高亮显示或提供导航。为了解决这个问题,我们实现了所谓的分阶段同步。我们让 IDE 分阶段获取模型,而不是一次性从构建工具请求完整项目模型。目前有两个阶段。

阶段 1:跳过依赖项解析

在第一阶段,即项目加载过程的早期阶段,IntelliJ IDEA 不会解析依赖项或连接到互联网。它只是提供一个足够精确的模型,让 IDE 能够显示项目树、对项目中最必要的部分编制索引,并提供一些必要的智能功能。显然,这个阶段之后一些依赖项可能仍然缺失,从而导致解析问题,甚至出现代码即使正确也被标记为红色的情况。IDE 实际上可以感知这些误报错误,并通过抑制因缺少依赖项而导致的错误在个别语言支持级别解决这些问题。它还能正确处理带有相应消息的导航尝试。自 2024.2 版本起,此错误抑制适用于 Java,在 2024.3 版本中,支持已扩展到 Kotlin。Maven 中第一阶段尤其快速,因为它的静态 pom.xml 配置文件可以由 IDE 解析而无需启动 Maven,同时还能提供足够的知识来构建非常精确的模型。对于本质上动态且脚本非常灵活的 Gradle,IntelliJ IDEA 目前无法独立解析脚本,这意味着它必须运行 Gradle 守护进程。通过仅向 Gradle 请求 sourceSets、必需语言级别和其他基本信息,我们加快了这一过程。不过,通过声明式 Gradle 计划,我们将来也许能够带来大幅改善。

阶段 2:下载并解析依赖项

在第二阶段,IntelliJ IDEA 下载所有插件和依赖项,正确解析所有配置,并为 IDE 提供完全准确的模型。然后,索引根据完整模型更新。通过这种两阶段方式,在依赖项下载和解析的同时,您可以更快获得几乎功能齐全的 IntelliJ IDEA 版本。

作为一项额外改进,我们使许多功能在索引尚未就绪时也能运行,进一步缩短了代码可交互时间。最重要的是个别文件中的代码高亮显示、部分代码解析和运行配置。当然,准备好底层索引会让这些操作更快,但即使只有部分索引,它们也能可靠地工作。

结果

总体来看,整个流程现在是这样的:

wKgZPGeTKKqAcXGtAACVLetFHRU940.png

我们怎么知道是否值得?

根据项目,我们测试套件中的代码可交互时间(或者更准确地说,以上架构中完全高亮显示之前的时间)在第一次打开项目时速度最多能快上几倍

调查显示,大约 30% 的用户认为 IntelliJ IDEA 2024.2 让他们能够更快开始编码。

后续计划

虽然并非所有 IntelliJ IDEA 功能都能在编制项目索引时使用,但两阶段同步方式无疑加快了整体启动性能,让您更快地开始与代码交互。此外,我们还使许多操作与没有索引或只有部分索引的情况兼容。在 2024.2 版本中,大约 10% 的用户确实在整个同步和索引编制过程完成之前编写代码。但我们的工作还没有结束。

我们现在的目标是改进分阶段同步,尤其是与 Gradle 的同步,进一步缩短代码可交互时间。我们还在更新依赖项尚未解析时处理项目的用户体验。

同时,我们希望您能享受我们在缩短代码可交互时间方面取得的成果。

本博文英文原作者:Kerry Beetge

关于 IntelliJ IDEA

JetBrains 的旗舰 IDE IntelliJ IDEA 专为高效的 JVM 开发而设计。凭借对语言和技术的深入了解以及符合人体工程学的用户界面,IntelliJ IDEA 使开发成为愉悦的体验!

免费的开源 IntelliJ IDEA 社区版和 IntelliJIDEA Edu 也可以用于学习和教学编程。

咨询JetBrains授权合作伙伴-龙智,进一步了解 IntelliJ IDEA:

审核编辑 黄宇

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

    关注

    0

    文章

    364

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32 MCU用什么IDE开发?

    推荐使用IAR Embedded Workbench for ARM、Keil μVision for ARM等IDE开发CW32 MCU应用,其中新版本IAR EWARM直接支持CW32 MCU,Keil MDK-ARM则需要安装CW32 MCU Pack包。
    发表于 11-12 07:52

    如何使用新版本J-Flash编程CW32 MCU

    1、从Segger公司官网下载安装最新版本JLink驱动,比如V7.96a,安装目录下没有JLinkDevices.xml文件。 2、C:Users<用户名>
    发表于 11-12 07:24

    UART5.2.0版本E2S中的重定向

    随着FSP库版本更新到5.2.0,开发过程中就会发现4.0.0版本的串口重定义并不适用于最新版本。继续使用原来的重定向代码时,编译器就会报
    的头像 发表于 10-31 15:28 3781次阅读
    UART<b class='flag-5'>在</b>5.2.0<b class='flag-5'>版本</b>E2S中的重定向

    【直播预告】RT-Trace 全新版本发布|ITM输出 MemoryWatch 功能首发实测! | 问学直播

    RT-Trace迎来又一次重要更新!本次新版本带来了两项备受期待的功能——ITM输出与MemoryWatch内存监控,让调试可视化更高效、问题定位更精准。为帮助开发者快速上手新特性
    的头像 发表于 10-14 11:57 382次阅读
    【直播预告】RT-Trace 全<b class='flag-5'>新版本</b>发布|ITM输出  MemoryWatch 功能首发实测! | 问学直播

    原来正常的studio工程cubemx更新(迁移)版本后编译报错,怎么解决?

    cubemx更新(迁移)版本前编译运行一切正常。 打开cubemx setting后提示有新版本可以更新(迁移) 点Continue或者Migrate后都会有一个更新package的过程,之后
    发表于 09-26 06:20

    戴尔数据保护软件迎来全新版本

    无缝运行的异常检测,一站式监控多达150个系统,额外的MFA多重身份验证Dell PowerProtect Data Manager19.19全新版本现已到来!
    的头像 发表于 06-27 13:55 725次阅读

    普华基础软件开源汽车操作系统新版本代码上线

    近日,第二十一届上海国际汽车工业展览会现场,开源车用操作系统新版本代码上线仪式中国电科展台成功召开。全球首个开源智能驾驶操作系统微内核龘EasyAda V2.1和首个规模化、量产级安全车控操作系统
    的头像 发表于 04-30 09:17 821次阅读

    普华基础软件开源车用操作系统迎来全新版本

    近日,普华基础软件开源车用操作系统媒体发布会在上海中国汽车会客厅召开——全球首个开源智能驾驶操作系统微内核龘EasyAda、开源安全车控操作系统小满EasyXMen全新版本正式发布。现场,普华基础软件开源项目技术团队专家就开源项目新版本技术亮点、新增功能及社区治理与运营等
    的头像 发表于 04-25 16:18 814次阅读

    网络传输利器索尼NXL-ME80 V1.2新版本发布

    网络传输利器NXL-ME80,凭借着高画质、高压缩比、低延时、高密度轻巧机箱,高冗余能力,一经上市就收到全球客户的大量好评。基于用户反馈和市场需求,NXL-ME80新版本V1.2强势来袭,必将为使用者带来更好的体验。
    的头像 发表于 04-23 14:37 903次阅读
    网络传输利器索尼NXL-ME80 V1.2<b class='flag-5'>新版本</b>发布

    SOA架构开发小助手PAVELINK.SOA-Converter 2.1.2新版本发布

    为提升汽车SOA架构设计开发效率,优化用户体验,我们对PAVELINK.SOA-Converter进行了全新升级。本次2.1.2新版本升级,聚焦于提升软件性能、扩展功能特性及增强用户交互体验。
    的头像 发表于 04-09 10:37 1277次阅读
    SOA架构开发小助手PAVELINK.SOA-Converter 2.1.2<b class='flag-5'>新版本</b>发布

    keil不同版本,有的文件新版本上报错怎么办?要装两个版本一起用?

    有的文件新版本上报错怎么办?要装两个版本一起用?
    发表于 03-10 07:05

    新版本 IDE启动速度变快了原来是背后做了这些

    IDEA 需要加载和同步项目、执行索引编制以及完成许多其他小任务才能启用所有实用功能。在这篇博文中,我们将介绍新版本 IntelliJ IDEA 中为提高性能而采取的
    的头像 发表于 02-12 15:58 716次阅读
    <b class='flag-5'>新版本</b> <b class='flag-5'>IDE</b> 的<b class='flag-5'>启动</b><b class='flag-5'>速度</b><b class='flag-5'>变快了</b>?<b class='flag-5'>原来是</b><b class='flag-5'>在</b><b class='flag-5'>背后</b><b class='flag-5'>做了</b><b class='flag-5'>这些</b>!

    GUI Guider v1.9.0全新版本上线

    新年伊始,GUI Guider也迎来了全新版本!这一次,我们带来了多项重磅更新,旨在为你提供更强大、更便捷的开发体验。无论你是工业控制、智能家居,还是消费电子领域的开发者,这些更新都将为你的项目注入新的活力!
    的头像 发表于 02-07 10:43 4556次阅读

    高通推出Qualcomm Aware平台最新版本

    CES 2025上,高通技术公司宣布推出Qualcomm Aware平台的最新版本,这一基于云的服务平台支持企业为物流、零售、能源、智能家居和机器人等行业的智能网联终端增加可观测性、监测和定位功能
    的头像 发表于 01-07 10:36 1350次阅读

    索尼发布空间现实显示播放器新版本

    索尼于2024年12月发布适用于空间现实显示屏ELF-SR1和ELF-SR2的空间现实显示播放器新版本
    的头像 发表于 12-24 15:19 971次阅读