前言
一直以來,我們對 Cloud IDE 的期待都是隨時隨地、環(huán)境統(tǒng)一、釋放本地資源、一站式研發(fā)、安全可控等等,可以和各類研發(fā)平臺進(jìn)行場景對接。然而在越來越多的場景對接中我們發(fā)現(xiàn),并不是所有場景都需要這么重的容器運(yùn)行環(huán)境,特別是對于一些非常輕量級的代碼查看、代碼編輯等場景,而且一旦涉及容器會帶來成本高、打開 IDE 慢、穩(wěn)定性不足、管理復(fù)雜度高等問題。
螞蟻研發(fā)效能云研發(fā)團(tuán)隊(duì)在對接內(nèi)部這類場景的過程中,基于 OpenSumi 封裝了純前端、極速版 IDE 框架 CodeBlitz,無需容器資源,僅需瀏覽器即可擁有代碼閱讀、語法高亮、代碼編寫、WebSCM等能力,通過開放的插件體系,支持 Git Graph、Git Blame 等 Git 輔助能力、多語言服務(wù)在線索引、基于 wasm 的代碼運(yùn)行能力。CodeBlitz 在螞蟻集團(tuán)被廣泛應(yīng)用于代碼閱讀、代碼評審、解決沖突、在線筆試、代碼掃描報(bào)告查看、產(chǎn)物預(yù)覽、SQL 編輯等場景。此外,CCF Gitlink、Atom Git 及小程序云效能等代碼托管平臺也與 CodeBlitz 有深入合作。今天,CodeBlitz 正式對外開源!
Github 地址(點(diǎn)擊文末閱讀原文即可跳轉(zhuǎn)):
https://github.com/opensumi/codeblitz
Gitee 地址:
https://gitee.com/opensumi/codeblitz
官網(wǎng)地址:
https://codeblitz.cloud.alipay.com
全文目錄如下:
1. CodeBlitz 起源:OpenSumi
2. CodeBlitz 解決的問題是什么?
2.1. 帶容器版本的問題及背景
2.2. 去掉容器帶來新的問題
2.3. CodeBlitz 解決方案
2.4. CodeBlitz 核心能力
2.5. CodeBlitz 與 OpenSumi 的關(guān)系
3. CodeBlitz 應(yīng)用實(shí)踐
3.1. 代碼閱讀
3.2. WebSCM
3.3. 代碼評審
3.4. 解決沖突
3.5. 在線筆試
3.6. 在線運(yùn)行
4. 誰在使用 CodeBlitz ?
4.1. CCF Gitlink
4.2. 開放原子 Atom Git
4.3. 支付寶小程序云
5. 結(jié)語
01
CodeBlitz 起源:OpenSumi
OpenSumi 是國內(nèi)首個低門檻、高性能、高定制性的雙端(Web 及 Electron)IDE 研發(fā)的框架,主要里程碑如下:
2019 年由螞蟻集團(tuán)及阿里集團(tuán)聯(lián)合發(fā)起并封閉開發(fā)
2020 年發(fā)布 1.0 版本,提供插件機(jī)制并兼容 VS Code 插件
2021 年發(fā)布 2.0,先于 VS Code、Theia 提供基于 React 組件的側(cè)部面板插件,供業(yè)務(wù)更加方便的自定義 UI 界面
2022 年 3 月正式開源,目前有支付寶小程序 IDE、支付寶小程序云 Codespaces、飛書開發(fā)者工具、釘釘開發(fā)者工具等產(chǎn)品使用
為了讓上層產(chǎn)品能更好的定制出自己的 IDE 形態(tài),OpenSumi 在架構(gòu)上主要考慮了三點(diǎn)設(shè)計(jì):
組合能力:OpenSumi 默認(rèn)提供了 56 個基礎(chǔ) IDE 模塊包和豐富的 IDE 風(fēng)格組件,集成方可以自由組合自己的業(yè)務(wù)場景,形成不同的 IDE 形態(tài)
定制能力:集成方可以通過自定義模塊的方式,調(diào)用 IDE 各個實(shí)例方法,實(shí)現(xiàn)自身復(fù)雜業(yè)務(wù)邏輯;通過貢獻(xiàn)點(diǎn)機(jī)制,深度參與到 IDE 的各個生命周期。
替換能力:通過自研的依賴注入容器(IOC),整體框架代碼都遵循依賴倒置原則(DIP),集成方可以非常方便的可替換掉框架默認(rèn)的視圖、邏輯的實(shí)現(xiàn)。
▲支付寶小程序云效能 Cloud IDE
為了保證框架可以同時在 Web 和 Electron 環(huán)境下運(yùn)行,OpenSumi 采用了一套前后端分離、通過抽象的通信層進(jìn)行相互調(diào)用的項(xiàng)目結(jié)構(gòu)。
▲OpenSumi 技術(shù)架構(gòu)圖
OpenSumi 在螞蟻集團(tuán)及阿里集團(tuán)沉淀落地了一系列具有代表意義的研發(fā)實(shí)踐,大部分研發(fā)場景都可以在 OpenSumi 中找到實(shí)踐經(jīng)驗(yàn):1. 小程序研發(fā)場景針對小程序研發(fā)場景, 支付寶小程序開發(fā)者工具以及淘寶小程序開發(fā)者工具此類桌面客戶端 IDE 便是使用了 OpenSumi 作為核心框架進(jìn)行實(shí)現(xiàn),截止目前,月服務(wù)開發(fā)者數(shù)量已達(dá)到 2W +。
2. 云端一體化研發(fā)鏈路
針對于云端研發(fā)場景,支付寶小程序云 Codespaces (https://ide.cloud.alipay.com) 提供一站式集成開發(fā)環(huán)境環(huán)境,其中一鍵部署至云托管插件便是利用 OpenSumi 視圖插件的能力。
02
CodeBlitz 解決的問題是什么?
既然已經(jīng)有 OpenSumi 了,那么為什么還會封裝出 CodeBlitz 框架?
2.1. 帶容器版本的問題及背景
螞蟻 Ant Codespaces 通過 OpenSumi 的高擴(kuò)展性在內(nèi)部對接了很多研發(fā)場景,但過程中發(fā)現(xiàn)并不是所有場景都需要研發(fā)容器。需要帶研發(fā)容器的場景一般依賴運(yùn)行、調(diào)試等能力,但讀代碼、簡單寫代碼等輕量場景則沒必要掛載容器。而且,依賴容器可能會有以下幾個問題:
啟動較慢:冷啟動容器一般較慢,即便做了預(yù)熱優(yōu)化,也并不能覆蓋所有場景
資源浪費(fèi):容器是需要消耗計(jì)算資源和存儲資源的,根據(jù)不同的容器規(guī)格,如果按照阿里云按量計(jì)費(fèi)的 ECS 參考價格來計(jì)算,這中間產(chǎn)生的資源費(fèi)用可能在 6 元到 80 元不等,顯然這造成了極大的浪費(fèi)
網(wǎng)絡(luò)耗時:因?yàn)?Cloud IDE 通過 WebSocket 進(jìn)行瀏覽器和容器的通信,那就必然決定了使用 Cloud IDE 就必須要有網(wǎng)絡(luò),而且網(wǎng)速好壞也會很大程度上印象研發(fā)體驗(yàn)。在無網(wǎng)情況下 Cloud IDE 是不可用狀態(tài)
對于整個研發(fā)活動來說,一些場景確實(shí)是無需容器:
2.2. 去掉容器帶來新的問題
那去除容器是否就能滿足上述場景?實(shí)踐過程中,我們發(fā)現(xiàn)了去除容器后帶來新的問題:
文件系統(tǒng):在有容器的情況下,文件保存在了掛載到在容器的云盤中,但無容器的場景下如何存儲文件?
語言服務(wù):在有容器的情況下,不同語言的語言服務(wù)能力是通過插件實(shí)現(xiàn)語言服務(wù)協(xié)議(LSP)來完成索引計(jì)算的,在無容器的場景下這些語言服務(wù)誰來提供?
前端模塊復(fù)用:如果去除掉容器,意味著需要改變前端模塊調(diào)用后端模塊方式,是否能在通信層面進(jìn)行磨平,如果要替換后端實(shí)現(xiàn)直接替換實(shí)現(xiàn)即可,無需針對于前端代碼進(jìn)行修改?
好在現(xiàn)代瀏覽器的能力越來越強(qiáng),可以通過瀏覽器的特性來解決上述問題。如果說有容器的是比較常見的 Cloud IDE 標(biāo)準(zhǔn)版,那么將容器替換為瀏覽器那就是 Cloud IDE 提供的另一種方式:極速版。
▲標(biāo)準(zhǔn)版到極速版的改造
2.3. CodeBlitz 解決方案
針對不掛載容器帶來的 3 個典型問題,CodeBlitz 做了以下能力建設(shè):
文件系統(tǒng):利用 BrowserFS 的能力,在瀏覽器實(shí)現(xiàn)了七種文件讀寫策略,可以應(yīng)對不同的業(yè)務(wù)場景;如果內(nèi)置的文件系統(tǒng)不能滿足需求,集成方也可以提供 FileSystemProvider 自己實(shí)現(xiàn)文件系統(tǒng)接口
語言服務(wù):通過和螞蟻代碼分析團(tuán)隊(duì)的合作,CodeBlitz 支持了 Java、TS、JS 三種語言的離線語言服務(wù)索引(LSIF)服務(wù),可在代碼提交時離線計(jì)算當(dāng)前代碼索引用于語言服務(wù)的展示;同時借助于 Tree-sitter 技術(shù),對于 Python、Go 、Rust、C++、Php 幾種語言也支持簡單的定義跳轉(zhuǎn)、查找引用等功能。同時,CodeBlitz 正在嘗試將 OpenSumi Node.js 插件進(jìn)程運(yùn)行在瀏覽器 WASM 環(huán)境,提供與有容器版本一致的 TS/JS 語言服務(wù)能力,進(jìn)一步增強(qiáng)語言服務(wù)體驗(yàn)
通信方式改造:將之前基于 WebSocket 調(diào)用的方式改造為前端 Function 直接的調(diào)用,前端無需感知環(huán)境的變化,調(diào)用后端無需修改替換前端 Provider 實(shí)現(xiàn),直接通過 DI 方式替換后端模塊實(shí)現(xiàn)即可
2.4. CodeBlitz 核心能力
對標(biāo)有容器的標(biāo)準(zhǔn)版,CodeBlitz 主要在讀、寫、運(yùn)行、提交等方面進(jìn)行了探索:
讀:
適配了多種代碼托管平臺,例如 Github、Gitlab、Gitlink、AtomGit 等代碼托管平臺,業(yè)務(wù)可以非常方便的使用代碼服務(wù)的能力
內(nèi)置了包括 Java、TS/JS、C++、Go、Python、Rust 等幾十種常見語言的語法高亮支持
支持了如 Git Blame、GitGraph 等代碼閱讀輔助插件
寫:
支持 HTML/CSS/JS/Markdown 等在線語言服務(wù)能力,支持錯誤診斷能力
瀏覽器文件系統(tǒng)
運(yùn)行
支持基于 Skypack 的前端代碼運(yùn)行方案
支持基于 Pyodide 的 Python 運(yùn)行
正在探索 WebContainer 能力
提交
支持 WebSCM,提供分支切換/新增、代碼提交等能力
2.5. CodeBlitz 與 OpenSumi 的關(guān)系
CodeBlitz 為 OpenSumi 的下游項(xiàng)目,是 OpenSumi 在純前端領(lǐng)域場景實(shí)踐出來的解決方案框架。在 OpenSumi 之上對文件系統(tǒng)、通信系統(tǒng)、插件機(jī)制等模塊進(jìn)行了擴(kuò)展,更好的應(yīng)用在沒有容器、本地客戶端環(huán)境的純?yōu)g覽器環(huán)境上,為此類場景提供多套解決方案。
如果說以 CodeMirror、Monaco 為代表的瀏覽器 IDE 組件為 Web IDE 1.0,那擁有上述能力的 CodeBlitz 就是 Web IDE 2.0。CodeBlitz 在螞蟻內(nèi)部于 2021 年 4 月上線,承接了代碼閱讀、代碼評審、在線筆試、代碼檢查結(jié)果反饋、輕量在線研發(fā)等眾多場景,同年 8 月 vscode.dev 和 github.dev 上線,與之相比,CodeBlitz 利用 OpenSumi 框架的高擴(kuò)展性,業(yè)務(wù)可以更加深度的定制模塊與插件,讓業(yè)務(wù)有多的想象空間。
03
CodeBlitz 應(yīng)用實(shí)踐
3.1. 代碼閱讀
代碼閱讀是 CodeBlitz 最常見的應(yīng)用場景,通常此類場景不需要運(yùn)行/調(diào)試代碼,所以也無需容器環(huán)境,內(nèi)部常見的場景有代碼閱讀、代碼掃描報(bào)告查看等場景,可以說需要代碼閱讀的場景就有 CodeBlitz 的身影。
3.2. WebSCM
傳統(tǒng)的代碼托管平臺修改代碼只能單文件修改提交,CodeBlitz 讓 WebIDE 擁有了 WebSCM 能力,可以在Web IDE 中新建分支,修改代碼后在 SCM 面板看到變更文件列表,寫完 commit message 后提交到代碼服務(wù)上。如果想快速修改一些文件可以不用在本地修改,直接通過 Web IDE修改代碼一次性提交。
3.3. 代碼評審
代碼評審功能用戶長久以來一直反饋以下幾個問題:
語言服務(wù)缺失,閱讀效率低:缺少代碼高亮、提示、跳轉(zhuǎn)、查看引用及大綱功能
大 PR 瀏覽體驗(yàn)不佳:統(tǒng)計(jì)顯示 Gitlink PR 平均有 14-17 個變更文件,傳統(tǒng)代碼評審交互一般為代碼 Diff 組件流式展示,對于一些變更文件多、文件內(nèi)部較大的場景 Review 體驗(yàn)不佳,常常要等待很久。
代碼修改流程重,耗時久:代碼 Diff 組件只有讀能力,無法快速修改一些拼寫或 lint 錯誤,需要在本地找到對應(yīng)文件后修改提交
針對于上述需求,CodeBlitz 提供了 IDE 風(fēng)格的代碼評審場景:
IDE 模式的代碼評審場景主要模塊如下:
變更樹
提供平鋪和樹狀兩種瀏覽方式
變更樹使用 OpenSumi Recycle 組件,對于大 PR 也能通過虛擬滾動高性能的查看變更文件
工具欄
提供 IDE 編輯器基礎(chǔ)設(shè)置,如字體大小、編碼、忽略收尾空格等
快速切換當(dāng)前分支歷史版本與基線的對比
變更文件快速定位、設(shè)置已查看,并支持快捷鍵快速執(zhí)行
編輯器
通過 monaco fold 能力完成非變更內(nèi)容的折疊
自定義評論組件嵌入編輯器
插件
復(fù)用代碼瀏覽 Blame 插件能力進(jìn)行代碼行 Git 信息查看
3.4. 解決沖突
解決沖突是研發(fā)同學(xué)經(jīng)常會遇到的問題之一,多人協(xié)作的情況下極易出現(xiàn)沖突。與之前提到的一樣,每一次在 Cloud IDE 上解沖沖突都需要啟動一個容器,而高峰期則意味著很容易短時間內(nèi)出現(xiàn)資源不足的問題。同時倉庫 clone 往往耗時 20 秒以上,這導(dǎo)致許多同學(xué)解決沖突時使用體驗(yàn)都不佳。通過 CodeBlitz 可以實(shí)現(xiàn)秒級還原沖突、解決沖突。
針對于 Java 同學(xué)對于 IntelliJ IDEA 使用習(xí)慣,OpenSumi 提供了 3-way merge editor,讓 Java 同學(xué)解決沖突更加絲滑。
3.5. 在線筆試
在線筆試也是 CodeBlitz 非常受歡迎的場景之一,使用過阿里伯樂系統(tǒng)的同學(xué)應(yīng)該已經(jīng)體驗(yàn)過 CodeBlitz 提供的編輯器及編輯器內(nèi)的協(xié)同能力。
3.6. 在線運(yùn)行
對于一些項(xiàng)目體驗(yàn)場景來說,無需復(fù)雜的語言服務(wù)能力,簡單修改,遠(yuǎn)程運(yùn)行,螞蟻鏈智能合約使用 CodeBlitz 作為 Web IDE 編輯器,對接螞蟻鏈中心化服務(wù)實(shí)現(xiàn)編譯合約、部署合約
體驗(yàn)地址: https://openlab.antchain.antgroup.com/ide
04
誰在使用 CodeBlitz ?
除了螞蟻、阿里內(nèi)部的一些實(shí)踐以外,CodeBlitz 在正式開源前也已經(jīng)和 CCF Gitlink、Atom Git 等外部產(chǎn)品展開合作。
4.1. CCF Gitlink
在代碼托管平臺上進(jìn)行代碼閱讀時經(jīng)常需要查看當(dāng)前方法在哪里被引用、當(dāng)前接口在哪里被實(shí)現(xiàn),CodeBlitz 為 Gitlink 提供編輯器 + 插件的能力,解決了上述用戶需求:
Gitlink 通過實(shí)現(xiàn) Blame 插件,完成了編輯器 Blame 查看的能力:
Gitlink 通過集成 CodeBlitz,也支持用 IDE 模式評審代碼,甚至能一鍵修改:
Gitlink 代碼閱讀場景雖然接入 CodeBlitz 編輯器,但文件樹、代碼搜索、快捷鍵、IDE 皮膚、等均和平時開發(fā)時使用習(xí)慣的 IDE 差異較大,更有大部分用戶僅僅是為了代碼閱讀將代碼克隆到本地,盡管保證了一致的體驗(yàn),但整個鏈路繁瑣費(fèi)時。
基于這個洞察,Gitlink 與螞蟻研發(fā)效能云研發(fā)團(tuán)隊(duì)合作,集成 CodeBlitz 并推出 Gitlink Web IDE,可以一鍵快速打開 Web IDE 訪問閱讀項(xiàng)目倉庫代碼,實(shí)現(xiàn)項(xiàng)目與 IDE 的無縫銜接,保持研發(fā)同學(xué)的日常偏好習(xí)慣,同時完美兼容 Gitlink 代碼托管平臺。更重要的是,通過無容器在瀏覽器上直接運(yùn)行 Web IDE,確保「秒開」的即時體驗(yàn)。
體驗(yàn)地址: https://www.gitlink.org.cn/Gitlink/forgeplus/webIDE/tree/master
更多 CodeBlitz 與 Gitlink 合作詳見 GitLink 如何使用 OpenSumi 突破代碼托管平臺3大體驗(yàn)瓶頸?
4.2. 開放原子 Atom Git
Atom Git 是開放原子開源基金會代碼托管平臺,CodeBlitz 為 Atom Git 提供 Web IDE 應(yīng)用,用戶在倉庫安裝應(yīng)用后即可體驗(yàn) CodeBlitz 提供的 Web IDE 能力
體驗(yàn)地址: https://atomgit.com/opensumi/codeblitz
更多 CodeBlitz 與 Atom Git 合作詳見吧 OpenSumi X AtomGit:WebIDE 與代碼托管的合作實(shí)踐
4.3. 支付寶小程序云
支付寶云開發(fā)是基于 Serverless 的一站式小程序后端服務(wù)開發(fā)平臺,其中函數(shù)在線編輯 IDE 使用 CodeBlitz。
體驗(yàn)地址:https://cloudbase.cloud.alipay.com
螞蟻研發(fā)效能已將內(nèi)部產(chǎn)品陸續(xù)上架到支付寶小程序云,其中代碼閱讀、Web IDE、解決沖突等場景已可以通過云效能來體驗(yàn) CodeBlitz 的能力。
體驗(yàn)地址:https://code.cloud.alipay.com
除了上述已接入的客戶以外,阿里云效、Gitee 均正在接入 CodeBlitz 中。
CodeBlitz 在常規(guī)的 Cloud IDE、客戶端 IDE 之外,探索出了只需要瀏覽器環(huán)境即可擁有 IDE 體驗(yàn)的場景,與 github.dev、vscode.dev 不同的是,CodeBlitz 作為框架可以讓上層產(chǎn)品通過 OpenSumi 模塊、插件的方式定制出屬于自己業(yè)務(wù)場景的 Web IDE,如果您有此類需求,不妨試試 CodeBlitz。
審核編輯:彭菁
-
封裝
+關(guān)注
關(guān)注
128文章
8618瀏覽量
145116 -
瀏覽器
+關(guān)注
關(guān)注
1文章
1040瀏覽量
36179 -
開源
+關(guān)注
關(guān)注
3文章
3645瀏覽量
43663 -
插件
+關(guān)注
關(guān)注
0文章
340瀏覽量
23003
原文標(biāo)題:比快更快,極速版 IDE 框架 CodeBlitz 開源!
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
labview對外部儀器的控制
STM32F140如何對外部脈沖進(jìn)行計(jì)數(shù)
國內(nèi)唯一開源基金會“開放原子開源基金會“正式成立!
開源協(xié)議、開源貢獻(xiàn)協(xié)議與OpenHarmony
RISC-V開源帶來的思考
騰訊醫(yī)療AI開源模型讓3D醫(yī)療應(yīng)用性能提升
華為對外開源MindSpore 效率整體提升 50% 以上
大眾計(jì)劃使用開源方式改進(jìn)車載操作系統(tǒng)
國內(nèi)唯一開源基金會“開放原子開源基金會“正式成立!

openEuler開源一周年:持續(xù)完善生態(tài)
首次對外 頒發(fā)官方證書 GOTC2023實(shí)施和管理開源合規(guī)計(jì)劃培訓(xùn)研討會來啦

評論