当前位置:网站首页>浅谈在线编辑器中增量编译技术的应用
浅谈在线编辑器中增量编译技术的应用
2022-07-30 16:49:00 【51CTO】
Lightly 是 TeamCode 团队开发的一款轻量且功能强大的集成开发工具。目前已支持C、C++、Java、Python、HTML+JS+CSS、PHP、Go项目。除语法高亮、语法错误自动检测、代码智能提示和自动补全等基础功能外,它还可以自动构建开发环境,云端存储所有代码和资源,支持项目的多用户协作开发。此文介绍增量编译技术在 Lightly IDE 的应用,方便大家更好地了解和使用产品。

背景
在产品研发周期中,编写代码、编译、调试占据了工程师们绝大部分的时间,在默认情况下,更新小部分的代码,就需要触发一次全量编译,这个过程耗时大概为分钟级别,导致每次调试的反馈周期会相对较长,影响开发效率。为了解决这个问题,Lightly 团队进行了很多探索与尝试,引进了增量编译技术,旨在缩短编译时间,提升开发效率。
架构设计
鉴于 Lightly 是一支持全语言的在线编辑器(IDE),我们认为设计一个增量编译系统需满足以下条件:
- 通用性 : 能够接受各类文件类型的源代码变更,并进行结构化处理
- 扩展性 : 能够适配不同语言,不同框架,进行针对性的编译和构建
为满足以上条件,我们将增量编译系统设计为以下模块:

如上图所示,在线编辑器系统整体分成3个部分:
- 监听模块 : 负责监听源程序中文件的变化,新增、修改、删除、重命名等。
- 消息模块 : 负责将变更的内容结构化为消息,并根据已知类型进行分类打标,作为下游编译模块消费时的依据,同时,消息系统作为传输队列,本身需要具备持久化的特性。
- 编译模块 : 该模块由各类具体的语言模块构成,通过消息系统的数据作为输入,将变更的内容做针对性的编译和构建,输出产出物。
下面是整体运行的流程图,描述了从代码修改到完成编译的整个过程:

以 Java 工程为例,从整个流程出发,在线编辑器的内部流程如下:
- 监听到 Java 源代码变化之后,首先我们会将这个变化的文件打标,放入消息队列
- 将文件编译所依赖的信息进行收集,包含 maven 所有依赖的路径,以及相关环境变量和运行时参数
- 将变更的文件进行编译,得到产出物,即 class 文件
运行编译产出物
由于我们把需要的文件已经编译完成,那接下来只需要将制品加载即可看到最终效果:

Lightly使用体验
前面的部分详细描述了增量编译的具体实现,其中包含了很多复杂流程和内容,但是对用户来说,使用过程是透明的,我们在 Lightly 在线编辑器上只需要一键触发就可以在1秒内完成整个编译打包、运行流程,优化了原先 “修改代码、运行构建命令、启动” 的流程,具体介绍如下(以 Java 为例)
- 用户编码完之后, 只需点击右上角 RUN 按钮, 即可查看输出:

2. 用户再次编码完之后,再次点击右上角 RUN 按钮,结果如下:

展望
未来,Lightly 团队将继续围绕更智能化的轻量级在线编辑器(IDE)迭代更多功能,为开发者带来更好的体验,并期待后续更多的开发者可以参与共建。
边栏推荐
- lotus 爆块失败
- 【SOC FPGA】外设KEY点LED
- 23. 请你谈谈关于IO同步、异步、阻塞、非阻塞的区别
- 第5章 SQL高级处理
- The first time I used debug query and found that this was empty, does it mean that the database has not been obtained yet?please help.
- 真正懂经营管理的CIO具备哪些特质
- 优酷视频元素内容召回系统:多级多模态引擎探索
- [NCTF2019] Fake XML cookbook-1|XXE vulnerability|XXE information introduction
- Various meanings of SQL's PARTITION BY syntax (with examples)
- The case of five little pigs (five little pigs compare the size of the body weight)
猜你喜欢

Mysql进阶优化篇01——四万字详解数据库性能分析工具(深入、全面、详细,收藏备用)

DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计

你是这样的volatile,出乎意料

Login Module Debugging - Getting Started with Software Debugging

Goland 开启文件保存自动进行格式化

MySQL 8.0.29 解压版安装教程(亲测有效)

3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图

Discuz magazine/news report template (jeavi_line) UTF8-GBK template

You are a first-class loser, you become a first-class winner

Mongoose模块
随机推荐
Security business revenue growth rate exceeds 70% 360 builds digital security leader
DLCM - 基于列表上下文信息的重排序模型
Minio 入门
Test Management and Specification
Goland opens file saving and automatically formats
你是一流的输家,你因此成为一流的赢家
Scheduling_Channel_Access_Based_on_Target_Wake_Time_Mechanism_in_802.11ax_WLANs
lotus 爆块失败
MySQL 8.0.29 解压版安装教程(亲测有效)
Go新项目-编译热加载使用和对比,让开发更自由(3)
Dive deep on Netflix‘s recommender system(Netflix推荐系统是如何实现的?)
@Bean注解详解
数组和指针(2)
HUAWEI CLOUD data governance production line DataArts, let "data 'wisdom' speak"
Gvim order record
哎,这要人老命的缓存一致问题啊
huato hot update environment construction (DLL method hot update C# code)
Win11如何把d盘空间分给c盘?Win11d盘分盘出来给c盘的方法
为人处世之道,与君共勉!
The case of five little pigs (five little pigs compare the size of the body weight)