当前位置:网站首页>增量编译技术在Lightly中的实践
增量编译技术在Lightly中的实践
2022-08-02 03:30:00 【TeamCode】
背景
在产品研发周期中,编写代码、编译、调试占据了工程师们绝大部分的时间,在默认情况下,更新小部分的代码,就需要触发一次全量编译,这个过程耗时大概为分钟级别,导致每次调试的反馈周期会相对较长,影响开发效率。为了解决这个问题,Lightly 团队进行了很多探索与尝试,引进了增量编译技术,旨在缩短编译时间,提升开发效率。
架构设计
鉴于Lightly是一支持全语言的IDE,我们认为设计一个增量编译系统需满足以下条件:
- 通用性 : 能够接受各类文件类型的源代码变更,并进行结构化处理
- 扩展性 : 能够适配不同语言,不同框架,进行针对性的编译和构建
为满足以上条件,我们将增量编译系统设计为以下模块:
如上图所示,系统整体分成3个部分:
- 监听模块 : 负责监听源程序中文件的变化,新增、修改、删除、重命名等。
- 消息模块 : 负责将变更的内容结构化为消息,并根据已知类型进行分类打标,作为下游编译模块消费时的依据,同时,消息系统作为传输队列,本身需要具备持久化的特性。
- 编译模块 : 该模块由各类具体的语言模块构成,通过消息系统的数据作为输入,将变更的内容做针对性的编译和构建,输出产出物。
下面是整体运行的流程图,描述了从代码修改到完成编译的整个过程:
以Java工程为例,从整个流程出发,内部流程如下:
- 监听到 Java 源代码变化之后,首先我们会将这个变化的文件打标,放入消息队列
- 将文件编译所依赖的信息进行收集,包含maven所有依赖的路径,以及相关环境变量和运行时参数
- 将变更的文件进行编译,得到产出物,即class文件
运行编译产出物
由于我们把需要的文件已经编译完成,那接下来只需要将制品加载即可看到最终效果:
Lightly使用体验
前面的部分详细描述了增量编译的具体实现,其中包含了很多复杂流程和内容,但是对用户来说,使用过程是透明的,我们在 Lightly 上只需要一键触发就可以在1秒内完成整个编译打包、运行流程,优化了原先 “修改代码、运行构建命令、启动” 的流程,具体介绍如下(以 Java 为例)
1. 用户编码完之后, 只需点击右上角 RUN 按钮, 即可查看输出:
2. 用户再次编码完之后,再次点击右上角 RUN 按钮,结果如下:
展望
未来,Lightly团队将继续围绕更智能化的轻量级IDE迭代更多功能,为开发者带来更好的体验,并期待后续更多的开发者可以参与共建。扫描下方二维码,加入 Lightly 用户交流群,获取更多信息!
Lightly 官网:https://lightly.teamcode.com/
TeamCode 官网:https://www.teamcode.com/
边栏推荐
- 电子密码锁_毕设‘指导’
- HDMI转MIPI CSI东芝转换芯片-TC358743XBG/TC358749XBG
- n皇后问题(回溯法)
- 功率计,物联网,智能插座电路设计【毕业设计】
- 【plang 1.4.6】Plang高级编程语言(发布)
- [Popular Science Post] I2C Communication Protocol Detailed Explanation - Partial Software Analysis and Logic Analyzer Example Analysis
- 【水位传感器与 Arduino 连接测量水位】
- Arduino lights up nixie tubes
- 2020 - AAAI - Image Inpainting论文导读《Learning to Incorporate Structure Knowledge for Image Inpainting》
- 与TI的lvds芯片兼容-GM8284DD,GM8285C,GM8913,GM8914,GM8905C,GM8906C,国腾振芯LVDS类芯片,
猜你喜欢
随机推荐
【Arduino connects SD card module to realize data reading and writing】
将ORCAD原理图导入allegro中进行PCB设计
开源日志库 [log4c] 使用
PCB Design Ideas
【nRF24L01 connects with Arduino to realize wireless communication】
Personal image bed construction based on Alibaba Cloud OSS+PicGo
MQ-5 可燃气体传感器与 Arduino 接口
联阳IT66121FN提供SDI转HDMI方案分享
Industry where edge gateway strong?
Scala,Spark依赖jar包冲突解决方法
Typora使用
本地数据库 sqlite3 编译和使用
【Arduino 连接 SD 卡模块实现数据读写】
向龙芯2K1000板子上烧写中标麒麟系统
Based on the raspberry pie smart luggage development environment set up
龙芯2K1000使用nfs挂载文件系统进行使用
日志分析系统:ELK
使用Vercel托管自己的网站
【Arduino连接时钟模块在LCD1602上显示时间】
无向图的连通分支数(并查集)