image

对于云端编程,我想大多数人的第一想法应该是微软推出的 VSCode Remote,这个功能基于开源的 VSCode,通过 SSH 远程连接到服务器,开发者可以通过端口转发、SCP 等一系列实用功能快速实现远程开发。我曾体验过这种编程方式,极大减轻了电脑性能的压力,但我认为这并不是云端编程的最终形态,因为我仍然需要在自己的电脑上安装 VSCode 才可以使用这个功能。

最近 2021 款的 iPad Pro 上市了,这次搭载的是和 Mac 同款的 M1 芯片,性能强大到甚至有让人利用 iPad 编程的想法,只是迫于各大厂商没有推出适配 iPad 的 IDE,便也只能沦为“买钱生产力,买后爱奇艺”的工具了。那么有没有什么办法可以在不安装 IDE 的情况下使用 iPad 编程吗?自然是有的,JetBrains 公司提出了一种新的解决方案:把 IDE 搬进浏览器里。这便是本文的主角——JetBrains Projector。

image

发展

提起 JetBrains,你会想到什么?各路强大的 IDE,比如 Android Studio、IDEA、WebStorm……这些对于开发者来说耳熟能详的产品都出自这家公司,这些 IDE 的功能强大,但同时也只能运行在用户自己的电脑上,其“内存黑洞”的称号更是让开发者们又爱又恨。

image

事实上,目前所有的 JetBrains IDE 都使用 Java Swing 绘制 UI,其他基于 IntelliJ 的 IDE 也是如此,比如 Android Studio。鉴于 Swing 是 Java GUI 的一个库,而 Java 本身就是一门很吃内存的编程语言,虽然可以充分利用 Java 跨平台的特性,这也是这些 IDE 在 macOS、Windows 和 Linux 上 UI 几乎一致的原因。但现在,Swing 跨桌面平台的特性却也成为阻碍其发展的一个原因了,在一些瘦客户端的情况下,“内存黑洞”屡屡被人诟病,Swing 也无法发挥其优势,于是 Projector 便应运而生了。

横向比较

image

JetBrains Projector 是 JetBrains 提出的“远程开发”解决方案,基于 Client + Server 架构,虽然对标的是微软 VSCode 的Remote Development方案,但是二者的原理和体验效果还是相差很多的。

  • VSCode 通过 SSH 等技术,只传输代码、索引等数据,仅将计算匀给服务器,而渲染显示等还是依赖本地的 VSCode 客户端,这种情况下,你仍然需要安装 VSCode
  • Projector 改动了 Swing 的渲染机制,通过网络传输渲染指令,最终使用 Web 技术将界面展现出来。这样做的好处是,你可以直接使用浏览器访问安装在服务器上的 IDEA。

笔者在查阅资料的过程中发现,经常有很多人将这两者弄混,通过上述内容,相信你也有一个直观的感受了,这两者使用体验的差距类似于VNC 与 SSH之间使用体验的差距。因此笔者认为这其实是对于「云端编程」的两种不同的解决方案,针对的使用场景虽有交叉,但很多情况下是不一样的,因此并不会有哪一方会完全取代另一方的情况出现。

使用场景

既然上文已经提到了,JetBrains Projector 和 VSCode Remote 的使用场景并不相同,那这一节就来简单说说 Projector 特别适合解决的问题:

  1. 运行时或数据库附近运行代码以减少往返次数。
  2. 高度安全的企业环境。
  3. 真正的大型项目
  4. 禁止源代码本地复制。
  5. 用户硬件约束
  6. 瘦客户端
  7. 需要在 Windows 机器甚至是 ChromeOS 等非传统操作系统上的 GNU/Linux 环境中运行 IDE。
  8. 需要在关闭计算机后让应用在服务器上继续运行。
  9. 远程调试服务器端(devtest、devprod)。
  10. 具有调试源和预配置 IDE 的VM 或 Docker 映像
  11. 需要远程访问的配置

Note:Projector 不支持协作开发。

初体验

前文说了 JetBrains Projector 是基于 Client + Server 架构的,因此为了体验 Projector,我们需要分别安装 Client 端和 Server 端。

Server 端

image

官方给出了三种搭建 Server 端的方式,分别是:

  1. Docker 镜像:Docker 是在云环境中运行 Projector 的最简单的方法,需要额外安装 Docker 环境。不需要额外安装 IDEA,如果只是为了体验,推荐该方式。
  2. Python 脚本:通过 PyPi 安装,这是一个独立的发行版,目前仅适用于 GNU/Linux 主机。
  3. IDE 插件:需要有图形界面的电脑支持并运行 Jetbrains IDE,通过安装 Projector 插件来作为服务端。

    PS:个人觉得第三种方式有多此一举的嫌疑,既然远程服务器都已经具备图形界面了,那我直接使用 VNC 不就好了吗?

搭建过程很简单,这里选择 Docker 搭建 Projector 服务,直接选择以下几个命令安装指定 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

例如,这个代码段可以拉取 IntelliJ IDEA Community Edition:

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

然后运行镜像,执行以下命令,将<IMAGE_ID>换成刚刚下载完成的镜像 ID 即可。

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

出现以下内容说明 Server 端安装成功

把你的IDE搬进浏览器里——JetBrains Projector 初体验相关推荐

  1. JetBrains Fleet 初体验

    几天前获得了fleet的体验资格.长话短说,今天就来和你一起看看现在的fleet都有啥 先看名字–fleet 什么是fleet? n. 舰队;捕鱼船队;(一国的)全部军舰,海军 看来,JetBrain ...

  2. 在浏览器里使用 SAP GUI

    事务码SICF,service name输入WEBGUI, 点右键,选择Test Service: 可以在浏览器里敲SE38进入ABAP editor了: 然么缺乏语法高亮显示: 如果想要浏览器里的语 ...

  3. linux的QQ浏览器里微信,移动端微信内置浏览器(或QQ浏览器)无法识别onclick事件的问题解决...

    1.微信内置浏览器(或QQ浏览器或safari浏览器)无法识别onclick事件的解决 对于这类不兼容的问题真的是很磨人,比较浪费时间,对于技术大牛可能不是问题,但是对于新手来说,可能就是个好几天无法 ...

  4. JavaScript武力值飙升!用TensorFlow.js轻松实现在浏览器里搞深度学习......

    近年来,AI 与人类的生活越来越紧密,慢慢变得无处不在.那么提到 AI ,我们会想到什么?小编最先想到的是机器人.早在小学作文中,我就写到 2021 年到处都是机器人,机器人汽车到处飞.结果 2021 ...

  5. JavaScript调用浏览器里的websocket,如何多帧上行数据

    JavaScript调用浏览器里的websocket,如何多个后续帧上行数据?这个组合帧的目的是什么?什么场景会用到?这个帧和http中的chunked编码有是不是一个意思?

  6. 如何修改以前登录过的共享文件夹的用户名和密码以及查看或删除浏览器里保存的密码...

    1.如何修改以前登录过的共享文件夹的用户名和密码: (1)打开控制面板-->用户账户,如下图: (2)然后点击 管理Windows凭据,如下图: (3)点击要修改的共享文件夹右侧的下拉箭头,如下 ...

  7. OData元数据在浏览器里以Feed视图显示的解决办法

    我们在IE浏览器里打开OData服务的metadata时,如果我们选择以xml格式显示元数据,可能会遇到如下情况:元数据在浏览器里以feed视图的方式显示,而不是默认的xml源代码: 解决办法:在浏览 ...

  8. 小技巧:浏览器里显示成星号的密码,忘记了该怎么办?

    比如下图这种,记性不好,忘记了密码该怎么办? 很简单,Chrome浏览器里按F12打开开发者工具,切换到Elements面板,点击下图Step1的图标,然后单击密码显示框,保持这个字段处于选中状态,然 ...

  9. ABAP的语法高亮是如何在浏览器里显示的

    这篇文章的原文我发表在SAP官方社区上:https://blogs.sap.com/2018/03/09/how-abap-syntax-highlight-is-implemented-in-web ...

  10. 在浏览器里使用SAPGUI里的SE80

    效果如图:点击Fiori launchpad的SE80对应的tile: 即可在浏览器里打开SE80 具体步骤 (1). 在后台找到Fiori catalog page ID: SAP_FIORI_EX ...

最新文章

  1. 匿名内部类和局部内部类访问的外部类的局部变量必须是final的
  2. linux fcitx 守护进程,解决ubuntu下输入法切换问题
  3. 【第一届“文翁杯”现场竞技赛】(校内“欢乐”赛)T1—洗刷刷(dp)
  4. 08_JS工厂方法和构造函数
  5. ubuntu下安装chrome浏览器和flash插件
  6. sdp ddp内存怎么分_旗舰手机跑分66万+,缩短与PC差距,手机成生产力工具也许不是梦...
  7. 超强计算机病毒代码,木马编程 之超强服务... 附代码 原创.
  8. 谈谈我的跳槽感想,从日资企业到互联网的转变
  9. 敏捷(AM):TDD(Test Driven Development)实践与变化--TAD(Test Assist Development)
  10. MySQL-第十五篇使用连接池管理连接
  11. OpenWRT上如何让 ss 设置指定域名dst bypass
  12. AutoCAD二次开发学习文档
  13. July 16th 模拟赛C T4 奶牛排队 Solution
  14. Unity 屏幕中显示区域截图
  15. AWS DynamoDB基础使用
  16. c语言变量声明放在开头,C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?...
  17. MIT发布2018年10大突破性技术,3项与嵌入式工程师相关!
  18. 命令模式---电视机遥控器
  19. 接入层网络用于讲家庭用户计算机,根据寄生虫的方法,计算机病毒分为引导区型病毒,文件型病毒和寄生虫病毒...
  20. Excel如何根据相同项合并表格某一列数据

热门文章

  1. 关于电脑突然产生数字文件夹用360删不掉的情况
  2. 中恒建模助手插件和绿色建筑的完美结合
  3. 十六国帝王纪元表-20170722
  4. arm 开发环境搭建-基于QEMU和Docker
  5. 利用 Python 实现简单的基于用户的商品推荐模型
  6. 实测:熊猫烧香考验五大杀毒软件
  7. 2007年5月12日,地坛书市
  8. 小白操作Win10扩充C盘(把D盘内存分给C盘)亲测多次有效
  9. Python set 计算集合的并集,交集,差集以及对称集(补集)
  10. mysql通过触发器获取数据表的操作id_MySQL触发器初试:当A表插入新记录,自动在B表中插入相同ID的记录...