把你的IDE搬進(jìn)瀏覽器里——JetBrains Projector 初體驗(yàn)

image

對(duì)于云端編程只损,我想大多數(shù)人的第一想法應(yīng)該是微軟推出的 VSCode Remote辕漂,這個(gè)功能基于開源的 VSCode,通過 SSH 遠(yuǎn)程連接到服務(wù)器曾雕,開發(fā)者可以通過端口轉(zhuǎn)發(fā)、SCP 等一系列實(shí)用功能快速實(shí)現(xiàn)遠(yuǎn)程開發(fā)助被。我曾體驗(yàn)過這種編程方式剖张,極大減輕了電腦性能的壓力切诀,但我認(rèn)為這并不是云端編程的最終形態(tài),因?yàn)槲胰匀恍枰谧约旱碾娔X上安裝 VSCode 才可以使用這個(gè)功能搔弄。

最近 2021 款的 iPad Pro 上市了幅虑,這次搭載的是和 Mac 同款的 M1 芯片,性能強(qiáng)大到甚至有讓人利用 iPad 編程的想法顾犹,只是迫于各大廠商沒有推出適配 iPad 的 IDE倒庵,便也只能淪為“買錢生產(chǎn)力,買后愛奇藝”的工具了炫刷。那么有沒有什么辦法可以在不安裝 IDE 的情況下使用 iPad 編程嗎擎宝?自然是有的,JetBrains 公司提出了一種新的解決方案:把 IDE 搬進(jìn)瀏覽器里浑玛。這便是本文的主角——JetBrains Projector绍申。

image

發(fā)展

提起 JetBrains,你會(huì)想到什么锄奢?各路強(qiáng)大的 IDE失晴,比如 Android Studio、IDEA拘央、WebStorm……這些對(duì)于開發(fā)者來說耳熟能詳?shù)漠a(chǎn)品都出自這家公司涂屁,這些 IDE 的功能強(qiáng)大,但同時(shí)也只能運(yùn)行在用戶自己的電腦上灰伟,其“內(nèi)存黑洞”的稱號(hào)更是讓開發(fā)者們又愛又恨拆又。

image

事實(shí)上,目前所有的 JetBrains IDE 都使用 Java Swing 繪制 UI栏账,其他基于 IntelliJ 的 IDE 也是如此帖族,比如 Android Studio。鑒于 Swing 是 Java GUI 的一個(gè)庫(kù)挡爵,而 Java 本身就是一門很吃內(nèi)存的編程語言竖般,雖然可以充分利用 Java 跨平臺(tái)的特性,這也是這些 IDE 在 macOS茶鹃、Windows 和 Linux 上 UI 幾乎一致的原因涣雕。但現(xiàn)在,Swing 跨桌面平臺(tái)的特性卻也成為阻礙其發(fā)展的一個(gè)原因了闭翩,在一些瘦客戶端的情況下挣郭,“內(nèi)存黑洞”屢屢被人詬病,Swing 也無法發(fā)揮其優(yōu)勢(shì)疗韵,于是 Projector 便應(yīng)運(yùn)而生了兑障。

橫向比較

image

JetBrains Projector 是 JetBrains 提出的“遠(yuǎn)程開發(fā)”解決方案,基于 Client + Server 架構(gòu),雖然對(duì)標(biāo)的是微軟 VSCode 的Remote Development方案流译,但是二者的原理和體驗(yàn)效果還是相差很多的逞怨。

  • VSCode 通過 SSH 等技術(shù),只傳輸代碼先蒋、索引等數(shù)據(jù)骇钦,僅將計(jì)算勻給服務(wù)器,而渲染顯示等還是依賴本地的 VSCode 客戶端竞漾,這種情況下眯搭,你仍然需要安裝 VSCode
  • Projector 改動(dòng)了 Swing 的渲染機(jī)制业岁,通過網(wǎng)絡(luò)傳輸渲染指令鳞仙,最終使用 Web 技術(shù)將界面展現(xiàn)出來。這樣做的好處是笔时,你可以直接使用瀏覽器訪問安裝在服務(wù)器上的 IDEA棍好。

筆者在查閱資料的過程中發(fā)現(xiàn),經(jīng)常有很多人將這兩者弄混允耿,通過上述內(nèi)容借笙,相信你也有一個(gè)直觀的感受了,這兩者使用體驗(yàn)的差距類似于VNC 與 SSH之間使用體驗(yàn)的差距较锡。因此筆者認(rèn)為這其實(shí)是對(duì)于「云端編程」的兩種不同的解決方案业稼,針對(duì)的使用場(chǎng)景雖有交叉,但很多情況下是不一樣的蚂蕴,因此并不會(huì)有哪一方會(huì)完全取代另一方的情況出現(xiàn)低散。

使用場(chǎng)景

既然上文已經(jīng)提到了,JetBrains Projector 和 VSCode Remote 的使用場(chǎng)景并不相同骡楼,那這一節(jié)就來簡(jiǎn)單說說 Projector 特別適合解決的問題:

  1. 運(yùn)行時(shí)或數(shù)據(jù)庫(kù)附近運(yùn)行代碼以減少往返次數(shù)熔号。
  2. 高度安全的企業(yè)環(huán)境。
  3. 真正的大型項(xiàng)目鸟整。
  4. 禁止源代碼本地復(fù)制引镊。
  5. 用戶硬件約束
  6. 瘦客戶端篮条。
  7. 需要在 Windows 機(jī)器甚至是 ChromeOS 等非傳統(tǒng)操作系統(tǒng)上的 GNU/Linux 環(huán)境中運(yùn)行 IDE弟头。
  8. 需要在關(guān)閉計(jì)算機(jī)后讓應(yīng)用在服務(wù)器上繼續(xù)運(yùn)行。
  9. 遠(yuǎn)程調(diào)試服務(wù)器端(devtest兑燥、devprod)。
  10. 具有調(diào)試源和預(yù)配置 IDE 的VM 或 Docker 映像琴拧。
  11. 需要遠(yuǎn)程訪問的配置降瞳。

Note:Projector 不支持協(xié)作開發(fā)。

初體驗(yàn)

前文說了 JetBrains Projector 是基于 Client + Server 架構(gòu)的,因此為了體驗(yàn) Projector挣饥,我們需要分別安裝 Client 端和 Server 端除师。

Server 端

image

官方給出了三種搭建 Server 端的方式,分別是:

  1. Docker 鏡像:Docker 是在云環(huán)境中運(yùn)行 Projector 的最簡(jiǎn)單的方法扔枫,需要額外安裝 Docker 環(huán)境汛聚。不需要額外安裝 IDEA,如果只是為了體驗(yàn)短荐,推薦該方式倚舀。
  2. Python 腳本:通過 PyPi 安裝,這是一個(gè)獨(dú)立的發(fā)行版忍宋,目前僅適用于 GNU/Linux 主機(jī)痕貌。
  3. IDE 插件:需要有圖形界面的電腦支持并運(yùn)行 Jetbrains IDE,通過安裝 Projector 插件來作為服務(wù)端糠排。

    PS:個(gè)人覺得第三種方式有多此一舉的嫌疑舵稠,既然遠(yuǎn)程服務(wù)器都已經(jīng)具備圖形界面了,那我直接使用 VNC 不就好了嗎入宦?

搭建過程很簡(jiǎn)單哺徊,這里選擇 Docker 搭建 Projector 服務(wù),直接選擇以下幾個(gè)命令安裝指定 IDE 即可

docker pull registry.jetbrains.team/p/prj/containers/projector-clion
docker pull registry.jetbrains.team/p/prj/containers/projector-datagrip
docker pull registry.jetbrains.team/p/prj/containers/projector-goland
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-u
docker pull registry.jetbrains.team/p/prj/containers/projector-phpstorm
docker pull registry.jetbrains.team/p/prj/containers/projector-pycharm-c
docker pull registry.jetbrains.team/p/prj/containers/projector-pycharm-p
docker pull registry.jetbrains.team/p/prj/containers/projector-webstorm

例如乾闰,這個(gè)代碼段可以拉取 IntelliJ IDEA Community Edition:

docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c

然后運(yùn)行鏡像落追,執(zhí)行以下命令,將<IMAGE_ID>換成剛剛下載完成的鏡像 ID 即可汹忠。

docker run --rm -p 8887:8887 -it <IMAGE_ID>

出現(xiàn)以下內(nèi)容說明 Server 端安裝成功 ??

image

Client 端

JetBrains 官方給出兩種 Client 端的使用方式淋硝,一種是直接通過瀏覽器訪問,另一種是使用官方開發(fā)的客戶端宽菜。

官方客戶端的地址在:https://github.com/JetBrains/projector-client

瀏覽器訪問

我們先通過瀏覽器訪問http://localhost:8887/谣膳,同意 Policy 后便可以看到如下頁面 ??

image

顯示效果和本地的 IDEA 幾乎沒有差別,當(dāng)然了铅乡,使用體驗(yàn)也還是和服務(wù)器的性能有很大關(guān)系继谚。

官方 Client App

我們打開官方提供的客戶端后填入剛才的地址便會(huì)顯示同樣的效果。

image

在簡(jiǎn)單閱讀了這個(gè)官方 App 的源碼后發(fā)現(xiàn)這個(gè) Desktop App 其實(shí)是基于 Electron 的阵幸,有趣的是花履,雖然使用的是自家的 Kotlin 語言編寫,但不知道為什么不順便使用自家的Compose for Desktop挚赊。

瀏覽器訪問的一些缺點(diǎn)

雖然通過官方 App 使用 Projector 很方便诡壁,但說到底我還是要下載一個(gè)應(yīng)用程序,既然都這樣了荠割,和 VSCode Remote 也沒什么區(qū)別妹卿,我為什么不直接使用瀏覽器訪問呢旺矾?
其實(shí)官方文檔中已經(jīng)針對(duì)這個(gè)疑問做了詳細(xì)的說明

  1. iPad 不支持 self-signed WebSockets,即不安全的 Websockets 連接(較新的安卓其實(shí)也不支持)夺克,因此想利用 iPad 訪問局域網(wǎng)內(nèi)的 Projector 會(huì)有些麻煩箕宙,當(dāng)然了,你給服務(wù)器添加 HTTPS 訪問也是可以的铺纽。
  2. 一些快捷鍵會(huì)被瀏覽器攔截柬帕,例如,Windows/Linux 中的 Ctrl+Q 或 Mac 中的 Cmd+N 是由瀏覽器處理的狡门。這可能會(huì)導(dǎo)致你在使用 Projector 無法使用一些快捷鍵陷寝。
  3. 剪切板不同步,服務(wù)端的剪切板會(huì)有一些限制融撞,使得開發(fā)過程中的復(fù)制與粘貼會(huì)出現(xiàn)一些問題盼铁。

也正是因?yàn)樯鲜鲞@些問題,官方才推出了自己的客戶端 App尝偎。

頭腦風(fēng)暴——VSCode on Browser

通過上述的介紹饶火,相信你對(duì) JetBrains Projector 已經(jīng)有了一定的了解了,其原理就是改變 Swing 的渲染方式致扯,使其最終可以使用 Web 技術(shù)將界面展現(xiàn)出來肤寝。

這時(shí)候,我們可以頭腦風(fēng)暴一下抖僵,既然 VSCode 基于的 Electron 技術(shù)本質(zhì)上是讓運(yùn)行在瀏覽器中的網(wǎng)頁可以順暢的運(yùn)行在桌面端鲤看,那么是不是可以進(jìn)行一個(gè)“逆向”,將運(yùn)行在桌面的 VSCode 反向運(yùn)行在瀏覽器中呢耍群?這種方式的思路不同于 VSCode Remote义桂,反而和 JetBrains Projector 有些類似,答案當(dāng)然是可以的蹈垢,國(guó)外也已經(jīng)有大神將源碼開源出來了慷吊,詳情參考 ??https://github.com/cdr/code-server,這里就不再多說了曹抬,感興趣的讀者們可以自行查閱相關(guān)資料溉瓶。

image

最后

先前我曾在《云游戲在革誰的命?》一文中討論過云游戲?qū)τ趥鹘y(tǒng)游戲的影響以及是否會(huì)取代 PC 游戲谤民,其實(shí)云端編程和云游戲類似堰酿,都需要高速且穩(wěn)定的網(wǎng)絡(luò),在這個(gè)萬物上云的時(shí)代张足,只有解決了這兩點(diǎn)才可以真正將云游戲和云編程推廣触创,我相信這一天很快就會(huì)到來。

以上就是本篇文章的全部?jī)?nèi)容了为牍,如果覺得對(duì)你有所幫助哼绑,不妨點(diǎn)個(gè)贊顺饮,新來的讀者不妨給個(gè)關(guān)注支持一下,你們的支持是我繼續(xù)更文的最大動(dòng)力凌那。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吟逝,隨后出現(xiàn)的幾起案子帽蝶,更是在濱河造成了極大的恐慌,老刑警劉巖块攒,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件励稳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡囱井,警方通過查閱死者的電腦和手機(jī)驹尼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庞呕,“玉大人新翎,你說我怎么就攤上這事∽×罚” “怎么了地啰?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)讲逛。 經(jīng)常有香客問我亏吝,道長(zhǎng),這世上最難降的妖魔是什么盏混? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任蔚鸥,我火速辦了婚禮,結(jié)果婚禮上许赃,老公的妹妹穿的比我還像新娘止喷。我一直安慰自己,他們只是感情好图焰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布启盛。 她就那樣靜靜地躺著,像睡著了一般技羔。 火紅的嫁衣襯著肌膚如雪僵闯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天藤滥,我揣著相機(jī)與錄音鳖粟,去河邊找鬼。 笑死拙绊,一個(gè)胖子當(dāng)著我的面吹牛向图,可吹牛的內(nèi)容都是我干的泳秀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榄攀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嗜傅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起檩赢,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤吕嘀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贞瞒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偶房,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年军浆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棕洋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乒融,死狀恐怖掰盘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赞季,我是刑警寧澤庆杜,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站碟摆,受9級(jí)特大地震影響晃财,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜典蜕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一断盛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧愉舔,春花似錦钢猛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至火的,卻和暖如春壶愤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馏鹤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工征椒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人湃累。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓勃救,卻偏偏與公主長(zhǎng)得像碍讨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒙秒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容