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

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

3天内不再提示

CodeBlitz 正式对外开源

OSC开源社区 来源:OSC开源社区 2023-09-10 09:39 次阅读

前言

一直以来,我们对 Cloud IDE 的期待都是随时随地、环境统一、释放本地资源、一站式研发、安全可控等等,可以和各类研发平台进行场景对接。然而在越来越多的场景对接中我们发现,并不是所有场景都需要这么重的容器运行环境,特别是对于一些非常轻量级的代码查看、代码编辑等场景,而且一旦涉及容器会带来成本高、打开 IDE 慢、稳定性不足、管理复杂度高等问题。

蚂蚁研发效能云研发团队在对接内部这类场景的过程中,基于 OpenSumi 封装了纯前端、极速版 IDE 框架 CodeBlitz,无需容器资源,仅需浏览器即可拥有代码阅读、语法高亮、代码编写、WebSCM等能力,通过开放的插件体系,支持 Git Graph、Git Blame 等 Git 辅助能力、多语言服务在线索引、基于 wasm 的代码运行能力。CodeBlitz 在蚂蚁集团被广泛应用于代码阅读、代码评审、解决冲突、在线笔试、代码扫描报告查看、产物预览、SQL 编辑等场景。此外,CCF Gitlink、Atom Git 及小程序云效能等代码托管平台也与 CodeBlitz 有深入合作。今天,CodeBlitz 正式对外开源!

Github 地址(点击文末阅读原文即可跳转):

https://github.com/opensumi/codeblitz

Gitee 地址:

https://gitee.com/opensumi/codeblitz

官网地址:

https://codeblitz.cloud.alipay.com

全文目录如下:

1. CodeBlitz 起源:OpenSumi

2. CodeBlitz 解决的问题是什么?
2.1. 带容器版本的问题及背景
2.2. 去掉容器带来新的问题
2.3. CodeBlitz 解决方案
2.4. CodeBlitz 核心能力
2.5. CodeBlitz 与 OpenSumi 的关系

3. CodeBlitz 应用实践
3.1. 代码阅读
3.2. WebSCM

3.3. 代码评审
3.4. 解决冲突
3.5. 在线笔试
3.6. 在线运行
4. 谁在使用 CodeBlitz ?
4.1. CCF Gitlink

4.2. 开放原子 Atom Git
4.3. 支付宝小程序云
5. 结语

01

b050ba6e-4f05-11ee-a25d-92fbcf53809c.gif

CodeBlitz 起源:OpenSumi

OpenSumi 是国内首个低门槛、高性能、高定制性的双端(Web 及 Electron)IDE 研发的框架,主要里程碑如下:

2019 年由蚂蚁集团及阿里集团联合发起并封闭开发

2020 年发布 1.0 版本,提供插件机制并兼容 VS Code 插件

2021 年发布 2.0,先于 VS Code、Theia 提供基于 React 组件的侧部面板插件,供业务更加方便的自定义 UI 界面

2022 年 3 月正式开源,目前有支付宝小程序 IDE、支付宝小程序云 Codespaces、飞书开发者工具、钉钉开发者工具等产品使用

为了让上层产品能更好的定制出自己的 IDE 形态,OpenSumi 在架构上主要考虑了三点设计:

组合能力:OpenSumi 默认提供了 56 个基础 IDE 模块包和丰富的 IDE 风格组件,集成方可以自由组合自己的业务场景,形成不同的 IDE 形态

定制能力:集成方可以通过自定义模块的方式,调用 IDE 各个实例方法,实现自身复杂业务逻辑;通过贡献点机制,深度参与到 IDE 的各个生命周期。

替换能力:通过自研的依赖注入容器(IOC),整体框架代码都遵循依赖倒置原则(DIP),集成方可以非常方便的可替换掉框架默认的视图、逻辑的实现。

b0672bd2-4f05-11ee-a25d-92fbcf53809c.png

▲支付宝小程序云效能 Cloud IDE

为了保证框架可以同时在 Web 和 Electron 环境下运行,OpenSumi 采用了一套前后端分离、通过抽象的通信层进行相互调用的项目结构。

b07e05d2-4f05-11ee-a25d-92fbcf53809c.png

▲OpenSumi 技术架构图

OpenSumi 在蚂蚁集团及阿里集团沉淀落地了一系列具有代表意义的研发实践,大部分研发场景都可以在 OpenSumi 中找到实践经验:1. 小程序研发场景针对小程序研发场景, 支付宝小程序开发者工具以及淘宝小程序开发者工具此类桌面客户端 IDE 便是使用了 OpenSumi 作为核心框架进行实现,截止目前,月服务开发者数量已达到 2W +。

b09745b0-4f05-11ee-a25d-92fbcf53809c.png

2. 云端一体化研发链路

针对于云端研发场景,支付宝小程序云 Codespaces (https://ide.cloud.alipay.com) 提供一站式集成开发环境环境,其中一键部署至云托管插件便是利用 OpenSumi 视图插件的能力。

b0bcbee4-4f05-11ee-a25d-92fbcf53809c.png

02

b050ba6e-4f05-11ee-a25d-92fbcf53809c.gif

CodeBlitz 解决的问题是什么?

既然已经有 OpenSumi 了,那么为什么还会封装出 CodeBlitz 框架?

2.1. 带容器版本的问题及背景

蚂蚁 Ant Codespaces 通过 OpenSumi 的高扩展性在内部对接了很多研发场景,但过程中发现并不是所有场景都需要研发容器。需要带研发容器的场景一般依赖运行、调试等能力,但读代码、简单写代码等轻量场景则没必要挂载容器。而且,依赖容器可能会有以下几个问题:

启动较慢:冷启动容器一般较慢,即便做了预热优化,也并不能覆盖所有场景

资源浪费:容器是需要消耗计算资源和存储资源的,根据不同的容器规格,如果按照阿里云按量计费的 ECS 参考价格来计算,这中间产生的资源费用可能在 6 元到 80 元不等,显然这造成了极大的浪费

网络耗时:因为 Cloud IDE 通过 WebSocket 进行浏览器和容器的通信,那就必然决定了使用 Cloud IDE 就必须要有网络,而且网速好坏也会很大程度上印象研发体验。在无网情况下 Cloud IDE 是不可用状态

对于整个研发活动来说,一些场景确实是无需容器:

b0eee068-4f05-11ee-a25d-92fbcf53809c.png

2.2. 去掉容器带来新的问题

那去除容器是否就能满足上述场景?实践过程中,我们发现了去除容器后带来新的问题:

文件系统:在有容器的情况下,文件保存在了挂载到在容器的云盘中,但无容器的场景下如何存储文件?

语言服务:在有容器的情况下,不同语言的语言服务能力是通过插件实现语言服务协议(LSP)来完成索引计算的,在无容器的场景下这些语言服务谁来提供?

前端模块复用:如果去除掉容器,意味着需要改变前端模块调用后端模块方式,是否能在通信层面进行磨平,如果要替换后端实现直接替换实现即可,无需针对于前端代码进行修改?

好在现代浏览器的能力越来越强,可以通过浏览器的特性来解决上述问题。如果说有容器的是比较常见的 Cloud IDE 标准版,那么将容器替换为浏览器那就是 Cloud IDE 提供的另一种方式:极速版。

b114edd0-4f05-11ee-a25d-92fbcf53809c.png

▲标准版到极速版的改造

2.3. CodeBlitz 解决方案

针对不挂载容器带来的 3 个典型问题,CodeBlitz 做了以下能力建设:

文件系统:利用 BrowserFS 的能力,在浏览器实现了七种文件读写策略,可以应对不同的业务场景;如果内置的文件系统不能满足需求,集成方也可以提供 FileSystemProvider 自己实现文件系统接口

语言服务:通过和蚂蚁代码分析团队的合作,CodeBlitz 支持了 Java、TS、JS 三种语言的离线语言服务索引(LSIF)服务,可在代码提交时离线计算当前代码索引用于语言服务的展示;同时借助于 Tree-sitter 技术,对于 Python、Go 、Rust、C++、Php 几种语言也支持简单的定义跳转、查找引用等功能。同时,CodeBlitz 正在尝试将 OpenSumi Node.js 插件进程运行在浏览器 WASM 环境,提供与有容器版本一致的 TS/JS 语言服务能力,进一步增强语言服务体验

通信方式改造:将之前基于 WebSocket 调用的方式改造为前端 Function 直接的调用,前端无需感知环境的变化,调用后端无需修改替换前端 Provider 实现,直接通过 DI 方式替换后端模块实现即可

2.4. CodeBlitz 核心能力

对标有容器的标准版,CodeBlitz 主要在读、写、运行、提交等方面进行了探索:

读:

适配了多种代码托管平台,例如 Github、Gitlab、Gitlink、AtomGit 等代码托管平台,业务可以非常方便的使用代码服务的能力

内置了包括 Java、TS/JS、C++、Go、Python、Rust 等几十种常见语言的语法高亮支持

支持了如 Git Blame、GitGraph 等代码阅读辅助插件

写:

支持 HTML/CSS/JS/Markdown 等在线语言服务能力,支持错误诊断能力

浏览器文件系统

运行

支持基于 Skypack 的前端代码运行方案

支持基于 Pyodide 的 Python 运行

正在探索 WebContainer 能力

提交

支持 WebSCM,提供分支切换/新增、代码提交等能力

2.5. CodeBlitz 与 OpenSumi 的关系

CodeBlitz 为 OpenSumi 的下游项目,是 OpenSumi 在纯前端领域场景实践出来的解决方案框架。在 OpenSumi 之上对文件系统、通信系统、插件机制等模块进行了扩展,更好的应用在没有容器、本地客户端环境的纯浏览器环境上,为此类场景提供多套解决方案。

如果说以 CodeMirror、Monaco 为代表的浏览器 IDE 组件为 Web IDE 1.0,那拥有上述能力的 CodeBlitz 就是 Web IDE 2.0。CodeBlitz 在蚂蚁内部于 2021 年 4 月上线,承接了代码阅读、代码评审、在线笔试、代码检查结果反馈、轻量在线研发等众多场景,同年 8 月 vscode.dev 和 github.dev 上线,与之相比,CodeBlitz 利用 OpenSumi 框架的高扩展性,业务可以更加深度的定制模块与插件,让业务有多的想象空间。

03

b050ba6e-4f05-11ee-a25d-92fbcf53809c.gif

CodeBlitz 应用实践

3.1. 代码阅读

代码阅读是 CodeBlitz 最常见的应用场景,通常此类场景不需要运行/调试代码,所以也无需容器环境,内部常见的场景有代码阅读、代码扫描报告查看等场景,可以说需要代码阅读的场景就有 CodeBlitz 的身影。

b14432fc-4f05-11ee-a25d-92fbcf53809c.png

3.2. WebSCM

传统的代码托管平台修改代码只能单文件修改提交,CodeBlitz 让 WebIDE 拥有了 WebSCM 能力,可以在Web IDE 中新建分支,修改代码后在 SCM 面板看到变更文件列表,写完 commit message 后提交到代码服务上。如果想快速修改一些文件可以不用在本地修改,直接通过 Web IDE修改代码一次性提交。

b1656a30-4f05-11ee-a25d-92fbcf53809c.png

3.3. 代码评审

代码评审功能用户长久以来一直反馈以下几个问题:

语言服务缺失,阅读效率低:缺少代码高亮、提示、跳转、查看引用及大纲功能

大 PR 浏览体验不佳:统计显示 Gitlink PR 平均有 14-17 个变更文件,传统代码评审交互一般为代码 Diff 组件流式展示,对于一些变更文件多、文件内部较大的场景 Review 体验不佳,常常要等待很久。

代码修改流程重,耗时久:代码 Diff 组件只有读能力,无法快速修改一些拼写或 lint 错误,需要在本地找到对应文件后修改提交

针对于上述需求,CodeBlitz 提供了 IDE 风格的代码评审场景:

b184a0c6-4f05-11ee-a25d-92fbcf53809c.png

IDE 模式的代码评审场景主要模块如下:

变更树

提供平铺和树状两种浏览方式

变更树使用 OpenSumi Recycle 组件,对于大 PR 也能通过虚拟滚动高性能的查看变更文件

工具栏

提供 IDE 编辑器基础设置,如字体大小、编码、忽略收尾空格等

快速切换当前分支历史版本与基线的对比

变更文件快速定位、设置已查看,并支持快捷键快速执行

编辑器

通过 monaco fold 能力完成非变更内容的折叠

自定义评论组件嵌入编辑器

插件

复用代码浏览 Blame 插件能力进行代码行 Git 信息查看

3.4. 解决冲突

解决冲突是研发同学经常会遇到的问题之一,多人协作的情况下极易出现冲突。与之前提到的一样,每一次在 Cloud IDE 上解冲冲突都需要启动一个容器,而高峰期则意味着很容易短时间内出现资源不足的问题。同时仓库 clone 往往耗时 20 秒以上,这导致许多同学解决冲突时使用体验都不佳。通过 CodeBlitz 可以实现秒级还原冲突、解决冲突。

针对于 Java 同学对于 IntelliJ IDEA 使用习惯,OpenSumi 提供了 3-way merge editor,让 Java 同学解决冲突更加丝滑。

b1d160f0-4f05-11ee-a25d-92fbcf53809c.png

3.5. 在线笔试

在线笔试也是 CodeBlitz 非常受欢迎的场景之一,使用过阿里伯乐系统的同学应该已经体验过 CodeBlitz 提供的编辑器及编辑器内的协同能力。

b216325c-4f05-11ee-a25d-92fbcf53809c.gif

3.6. 在线运行

对于一些项目体验场景来说,无需复杂的语言服务能力,简单修改,远程运行,蚂蚁链智能合约使用 CodeBlitz 作为 Web IDE 编辑器,对接蚂蚁链中心化服务实现编译合约、部署合约

体验地址: https://openlab.antchain.antgroup.com/ide

b2e560ea-4f05-11ee-a25d-92fbcf53809c.png

04

b050ba6e-4f05-11ee-a25d-92fbcf53809c.gif

谁在使用 CodeBlitz ?

除了蚂蚁、阿里内部的一些实践以外,CodeBlitz 在正式开源前也已经和 CCF Gitlink、Atom Git 等外部产品展开合作。

4.1. CCF Gitlink

在代码托管平台上进行代码阅读时经常需要查看当前方法在哪里被引用、当前接口在哪里被实现,CodeBlitz 为 Gitlink 提供编辑器 + 插件的能力,解决了上述用户需求:

b32234d4-4f05-11ee-a25d-92fbcf53809c.png

Gitlink 通过实现 Blame 插件,完成了编辑器 Blame 查看的能力:

b33c545e-4f05-11ee-a25d-92fbcf53809c.png

Gitlink 通过集成 CodeBlitz,也支持用 IDE 模式评审代码,甚至能一键修改:

b35716c2-4f05-11ee-a25d-92fbcf53809c.gif

Gitlink 代码阅读场景虽然接入 CodeBlitz 编辑器,但文件树、代码搜索、快捷键、IDE 皮肤、等均和平时开发时使用习惯的 IDE 差异较大,更有大部分用户仅仅是为了代码阅读将代码克隆到本地,尽管保证了一致的体验,但整个链路繁琐费时。

基于这个洞察,Gitlink 与蚂蚁研发效能云研发团队合作,集成 CodeBlitz 并推出 Gitlink Web IDE,可以一键快速打开 Web IDE 访问阅读项目仓库代码,实现项目与 IDE 的无缝衔接,保持研发同学的日常偏好习惯,同时完美兼容 Gitlink 代码托管平台。更重要的是,通过无容器在浏览器上直接运行 Web IDE,确保「秒开」的即时体验。

体验地址: https://www.gitlink.org.cn/Gitlink/forgeplus/webIDE/tree/master

b3c4cf5a-4f05-11ee-a25d-92fbcf53809c.png

更多 CodeBlitz 与 Gitlink 合作详见 GitLink 如何使用 OpenSumi 突破代码托管平台3大体验瓶颈?

4.2. 开放原子 Atom Git

Atom Git 是开放原子开源基金会代码托管平台,CodeBlitz 为 Atom Git 提供 Web IDE 应用,用户在仓库安装应用后即可体验 CodeBlitz 提供的 Web IDE 能力

体验地址: https://atomgit.com/opensumi/codeblitz

b3e7357c-4f05-11ee-a25d-92fbcf53809c.gif

更多 CodeBlitz 与 Atom Git 合作详见吧 OpenSumi X AtomGit:WebIDE 与代码托管的合作实践

4.3. 支付宝小程序云

支付宝云开发是基于 Serverless 的一站式小程序后端服务开发平台,其中函数在线编辑 IDE 使用 CodeBlitz。

体验地址:https://cloudbase.cloud.alipay.com

b46f1e38-4f05-11ee-a25d-92fbcf53809c.png

蚂蚁研发效能已将内部产品陆续上架到支付宝小程序云,其中代码阅读、Web IDE、解决冲突等场景已可以通过云效能来体验 CodeBlitz 的能力。

体验地址:https://code.cloud.alipay.com

b4827d66-4f05-11ee-a25d-92fbcf53809c.gif

除了上述已接入的客户以外,阿里云效、Gitee 均正在接入 CodeBlitz 中。

CodeBlitz 在常规的 Cloud IDE、客户端 IDE 之外,探索出了只需要浏览器环境即可拥有 IDE 体验的场景,与 github.dev、vscode.dev 不同的是,CodeBlitz 作为框架可以让上层产品通过 OpenSumi 模块、插件的方式定制出属于自己业务场景的 Web IDE,如果您有此类需求,不妨试试 CodeBlitz。

审核编辑:彭菁

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

    关注

    124

    文章

    7281

    浏览量

    141100
  • 浏览器
    +关注

    关注

    1

    文章

    974

    浏览量

    34420
  • 开源
    +关注

    关注

    3

    文章

    2989

    浏览量

    41720
  • 插件
    +关注

    关注

    0

    文章

    313

    浏览量

    22198

原文标题:比快更快,极速版 IDE 框架 CodeBlitz 开源!

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

收藏 人收藏

    评论

    相关推荐

    labview对外部仪器的控制

    各位大侠、大神好!我是一个Laview初学者,我有一个疑问---“是否可以说Labview对外部仪器的控制都必须通过通讯来实现?"
    发表于 06-28 15:56

    STM32F140如何对外部脉冲进行计数

    请问有谁使用过使STM32F140对外部脉冲进行计数,帮忙说一下方法呗
    发表于 11-13 15:50

    HarmonyOS的开源问题。

    朋友们,都说鸿蒙是开源的,那么关于鸿蒙os 开源到什么程度,是100%开源吗?有小道消息嘛?
    发表于 09-08 16:29

    国内唯一开源基金会“开放原子开源基金会“正式成立!

    昨日,中国首个开源软件的基金会“开放原子开源基金会”,官方对外宣布已正式成立。据悉,开放原子开源基金会,是中国首个也是唯一一个以开源为主题的
    发表于 09-10 17:24

    关于鸿蒙os的开源程度。 开源到什么程度,是100%开源吗?

    想了解下关于鸿蒙os的开源程度。 开源到什么程度,是100%开源吗?
    发表于 09-22 11:15

    用stm32对外部输入脉冲进行计数

    最近几天要用到stm32对外部输入脉冲进行计数,
    发表于 08-19 06:17

    如何通过SPI的方式实现对外部flash的读与写?

    如何读写flash?如何通过SPI的方式实现对外部flash的读与写?
    发表于 12-17 07:18

    开源协议、开源贡献协议与OpenHarmony

    开源软件显示其“低成本”、“自由”、“透明”等优势的同时,需要很多的程序员、开发者参与贡献才能蓬勃发展。所以,如果程序员、开发者们的利益没有保障,那么大家参与的动力就没法持续,也会影响程序员的创造
    发表于 08-30 15:33

    RISC-V开源带来的思考

    由于RISC-V对外开源的,各个厂家定制个性化内核,各厂家研发的产品能否兼容,做到一个生态中呢?
    发表于 04-21 10:06

    如何用ICP或ISP对外部FLASH加密

    如何用ICP或ISP对外部FLASH加密用ICP 或ISP 对外部FLASH 加密
    发表于 10-19 06:49

    罗德与施瓦茨北京开放实验室正式对外开放

    罗德与施瓦茨北京开放实验室正式对外开放 为了更好地服务用户,罗德与施瓦茨公司北京开放实验室于2010年1月正式对外开放。实验室面向R&S公司的客户完全免费,
    发表于 01-26 08:58 896次阅读

    余承东:方舟编译器将于8月31日正式开源 系统响应速度提升了44%

    华为余承东刚刚在微博宣布,方舟编译器将于8月31日正式开源。8月29日晚,华为EMUI官方微博也正式对外宣布了这一消息。
    的头像 发表于 09-01 10:26 2405次阅读

    华为对外开源MindSpore 效率整体提升 50% 以上

    今年华为开发者大会 2020(Cloud)上,继发布开源的 openEuler 20.03 LTS 版本之后,3 月 28 日,华为对外开源 MindSpore,这是一个全场景 AI 计算框架
    的头像 发表于 03-28 11:37 2148次阅读

    国内唯一开源基金会“开放原子开源基金会“正式成立!

    昨日,中国首个开源软件的基金会 开放原子开源基金会 ,官方对外宣布已正式成立。据悉,开放原子开源基金会,是中国首个也是唯一一个以开源为主题的
    的头像 发表于 09-10 18:00 3.3w次阅读
    国内唯一<b class='flag-5'>开源</b>基金会“开放原子<b class='flag-5'>开源</b>基金会“正式成立!

    openEuler开源一周年:持续完善生态

    2019年底,华为宣布将服务器操作系统EulerOS对外开放,并正式成立了openEuler开源社区。到2020年底,openEuler社区已经拥有了超过2000个贡献者、1500个代码贡献者以及2万多个开源项目,成为了业界最具
    的头像 发表于 01-05 09:46 1662次阅读