lmk123 / blog

个人技术博客,博文写在 Issues 里。
https://github.com/lmk123/blog/issues
624 stars 34 forks source link

于是我从 WebStorm 转向了 VS Code #59

Open lmk123 opened 7 years ago

lmk123 commented 7 years ago

自大学以来,我换了不少编辑器。一开始学习 C# 的时候,用的是 Visual Studio,这款编辑器确实非常好用,即使是用来写 JavaScript 也有很全的代码提示。

后来我决定专攻前端开发,这时候 Visual Studio 就显得太过于笨重了。在学校老师的建议下,我开始用 Dreamweaver,老师极力推荐它的原因是它的「所见即所得」特性——不需要自己写代码,只需要拖一些控件进去,它就会自动帮你生成页面……可是它生成的代码太差劲了,我从来没拖过控件,它的代码提示也不如 Visual Studio 全面,时不时的还会卡顿。

再后来,我在网友的推荐下开始用 WebStorm,简直爱不释手,从此再也没有换过编辑器——

直到半个月前,我试了一下 VS Code

让我决定去尝试一下 VS Code 原因倒不是因为这个编辑器本身,而是因为它的一个插件——Vetur,由 Vue.js 团队开发,用来给 *.vue 文件提供代码提示与 TypeScript 支持。用过 Vue.js 的同学都知道,Vue.js 配置项里面的方法的 this 其实指向这个 Vue 实例本身,但是 WebStorm(我想其他编辑器也一样)只会把方法里的 this 识别成这个方法所在的对象,所以编辑器不能正确的提供 this 的代码提示。

在尝试了 VS Code 之后,我再一次体会到了当时发现 WebStorm 的时候的心情——爱不释手、给它折腾了一堆插件、想立刻写一些代码来体验一下这个编辑器,最后,我就停不下来了 😂

我想从我的使用角度解释一下为什么我最终从 WebStorm 转向了 VS Code,也许能给看到这篇文章的朋友们一点参考。

VS Code 最让我看中的特点就是轻量——它的轻量体现在它的启动速度内存占用功能

注意:我是在 2015 年款 MacBook Pro (8GB 内存)上对这两款编辑器进行比较的,可能与你的感受不太一样。

启动速度

VS Code 启动的时候非常快——这里的非常快是相对于 WebStorm 而言的。我使用了同一个中等大小的项目(下文统一称之为测试项目)做测试,这个项目使用了 TypeScript 和 Vue.js,大概有 30 个文件。

在使用 WebStorm 的时候,一般要经过下面这些步骤:

  1. 打开 WebStorm,这一阶段差不多要 7 秒。
  2. 选择上面提到的测试项目并打开,需要 3 秒。
  3. 打开项目之后,WebStorm 会索引代码,这段时间内它的一些功能(比如代码提示与代码着色)还没有准备好,所以我一般会等索引完成之后再开始写代码。这一阶段根据项目大小需要的时间也不固定,但对于测试项目,这一过程差不多要 10 多秒——如果你没有将 node_modules 文件夹 Mark Directory as Excluded,那么需要的时间会更长。

所以从我打开 WebStorm 到它真的可以用的这段时间,已经快有半分钟了!在使用 VS Code 之前,我从来没觉得这段时间很长。

那么同样的项目,VS Code 打开需要多长时间?答案是 4 秒。这是在我安装了 19 个扩展的情况下得出的结论,而这 19 个扩展基本涵盖了 WebStorm 中我用得到的功能。

我仔细观察了一下为什么 VS Code 相对于 WebStorm 会快很多:

  1. 在 MacOS 中,直接用两个手指点击 VS Code 的图标就能展开最近打开过的项目,而 WebStorm 要先打开一个选择界面。
  2. VS Code 没有那么明显的索引代码的过程。也许它根本就没有索引代码这一过程,又或者,它在后台偷偷索引但没有提示给用户知道,不过当我打开文件的时候,代码提示和代码着色都是已经准备好了的。有一些扩展会在第一次使用时花费一段时间索引你的项目代码,但这一过程在下次打开项目时会非常快,所以这段时间没有计入 VS Code 的打开时间中。

内存占用

我经常会需要同时开启两三个项目,然后再开一些其他软件(听歌的、微信、Chrome 之类的)。如果我使用 WebStorm,时间一长,8GB 内存就会被用的只剩两三百兆,我不得不用 CleanMyMac 清理我的内存,不然电脑会变得反应迟钝。

同样的情况换成是 VS Code 就没有这个问题。我知道这一感受非常主观,所以在我写这片文章的时候,我尝试分别用这两个编辑器同时打开三个相同的项目,但它们的内存占用从数字上看是差不多的——都是 1.6GB 左右。有一点不同的是,VS Code 的进程本身占用内存很少,但它有很多个 Code Helper 进程,我每关掉一个项目,Code Helper 的数量和它们占用的内存都会相应减少。

上面的数据仅仅只是打开了三个项目的情况,如果后面多使用一段时间,WebStrom 的内存占用会越来越多——这也跟你使用了 WebStorm 中的多少功能相关。按照我这半个月来的使用体验,WebStorm 会让我觉得内存不够用,而 VS Code 就没有。

当然,这些都只是我的主观感受,由于没有足够的数据支持,你可以认为它们在内存占用方面打了个平手。

功能

一个编辑器的功能是越多越好还是越少越好?功能多当然很不错,但并不是所有人都需要一些功能,而且多余的功能会导致编辑器更加笨重。

WebStorm 和 VS Code 都提供了插件系统,但仅从核心大小来看的话,VS Code 无疑要比 WebStorm 轻量许多——这一点你从它们的设置里就可以看出来了。

WebStorm 的插件系统更像是锦上添花,因为它已经内置了很多很有用并且也很好用的功能了。WebStorm 还内置了很多官方维护的插件,但大部分我都不需要,我还得自己去关闭一些。所以,第三方插件我一个也没装过。

反观 VS Code,我觉得它的插件系统才是它的核心功能——VS Code 本身缺少很多功能,如果你不安装一些插件,基本上很难愉快的写代码。

从个人的角度来看,我非常喜欢 VS Code 的做法——我在写一些 JavaScript 项目的时候也是这么想的——核心应该尽可能的小,然后通过插件的方式来补充功能以适应不同的使用场景。Koa 和 Chrome 浏览器就是使用插件扩充功能的例子。

但是,依赖于社区开发的插件就会出现一个问题——插件的质量总是参差不齐的,插件的维护者也不一定会长时间维护下去,所以在给 VS Code 安装插件的时候我花了很长时间尝试了很多个同样功能的不同插件,不过这个痛苦的过程也只是一次性的。

对于未来,我希望 VS Code 团队能像 WebStorm 那样有一些官方维护的高质量插件,避免用户在选择插件的时候眼花缭乱。不过,目前 VS Code 肯定是没有多余的精力做这些的,所以作为用户的我们也只能自己不断的尝试了。

总结

本文从三个方面阐述了我个人认为 VS Code 对比 WebStorm 的优势,但实际上 WebStorm 也并不是没有比 VS Code 好的方面:

  1. 就像上面提到的,WebStorm 有很多内置的官方维护的插件,能有效避免用户自行挑选第三方插件。
  2. 不能否认,WebStorm 确实功能齐全,而有一些功能并不是 VS Code 的插件能取代的。让我个人感觉最强烈的一点就是 WebStorm 内置的 Git 集成要比 VS Code 好太多,即使安装了好几个 VS Code 的 Git 相关插件,也比不过 WebStorm 内置的 Git 功能。
  3. ……想了想似乎就没有更多了 :joy:

我的建议是,如果你不喜欢折腾、更喜欢使用纯 GUI 方式写代码,WebStorm 无疑更适合你,使用 VS Code 的时候,你可能得学一些 Git 命令来弥补 VS Code 在 Git 集成功能方面的不足;如果你更看中 VS Code 的轻量,并且也愿意付出时间去适应、安装插件,那 VS Code 会比较合你的胃口。

最后,欢迎你留下自己的看法 ;)

EthanLin-TWer commented 7 years ago

感谢分享\~速度体验和核心理念特别好。我一直在用 WebStorm,上次在 chat 群里面讨论到 IDE 的事情,因为换 IDE 还是一个成本比较高的事情,想试试 VSCode 但我一直没有做。不过倒是产出了一个 checklist,可供换 IDE 的时候参考,里面有几个点,不知道楼主可否分享下这些方面试用 VSCode 的心得\~

image

上面是我的界面,简明的界面可以避免分散注意力在多余的元素上,没有 toolbar / status bar / navigation bar / tool buttons,只有行号和代码。同时,没了 GUI,快捷键系统就必须跟上。所以比较感兴趣全键盘、快捷键支持、插件系统这一块,以及 VSCode 有哪些特色的功能和体验,楼主可否分享下使用体验。谢谢啦。


楼下补充得真详细。产品定位、LSP API 很有启发。感谢分享,没有其他独立问题就不再单独回复了。

hronro commented 7 years ago

我来补充一点, VS Code 的定位其实是 code editor,并不是 IDE,更准确的说,可能是介于 code editor 和 IDE 之间的一种产品形态。VS Code 本身的设计可能更趋于 code editor 一些,但会提供很多基于 Language Server Protocol (LSP) 的 API,使其能够很方便的扩展到 IDE 级别的功能。VS Code 本身内置了 JS/TS 的 LSP,而其他语言的 LSP,就需要用户自己安装插件来获取了。像 Vetur 这个插件,其实也就是个 LSP,会将 vue 文件里面的 html/css/js 分别交由各自语言的 LSP 处理,这一点在 Vetur 的项目主页也是有说明的。 另外 VS Code 对 JS/TS 的智能提示,并不需要通过索引代码来完成,而是通过 TypeScript 的类型系统来完成的。这个东西快是快,但也有一些缺点,比如你用了某个很小众的库,而这个库并没有 TypeScript 的类的申明文件,那就没有办法对这个库做智能提示了。同理,如果在你自己写的 JS 代码中,如果某些变量不能被 TypeScript 的类型推导系统推导出类型的话,智能提示也会失效。而 WebStorm 里面的情况就要好很多。

@linesh-simplicity

  1. 界面颜值还是挺高的,并且第三方主题丰富
  2. 键盘快捷键可以通过插件切换到 VIM、Sublime、IntelliJ、VS、Eclipse 等不同的键位布局,如果想只通过键盘完成所有功能,VIM 插件应该是个不错的选择
  3. 已内置 Terminal,并且 Windows 下可以自由切换成 cmd、powershell、git bash、wsl,macOS/Linux 下可以自由切换 bash、zsh、fish。Git 功能 VS Code 已内置一部分,结合插件 Git Lens 应该功能相当全了。
  4. 所有功能的快捷键都可以自定义
  5. VS Code 自带 Zen Mode,可以隐去所有多余界面,只留代码
agileago commented 6 years ago

然后我觉得过一段时间你就会换回webstorm的,因为ws的智能提示完爆任何编辑器

git-issue commented 6 years ago

vscode 比 webstorm 还有抢很多的是 调试。。。尤其是 node

EthanLin-TWer commented 6 years ago

调试功能也基本不会用到😂 都通过其他的方式消化了,基本只有调调生命周期方法的时候会打个 log:

lmk123 commented 6 years ago

@agileago 没错,VS Code 的智能提示体验太差了,这点我忘了在文章里提到了,但是,WebStorm 的智能提示也没有好太多,如果没有用 TypeScript,它会索引所有代码,收集项目里所有的变量名,然后在你输入匹配的字符时将所有匹配项全显示出来。

@git-issue 正好相反,我觉得 WebStorm 里的调试功能比 VS Code 要好用一些 😂

izee commented 6 years ago

https://github.com/JetBrains/intellij-plugins/tree/master/vuejs

lmk123 commented 6 years ago

@izee WebStorm 已经内置了这个插件了,但是这个插件没法支持 TypeScript,也没法正确提示 this 的属性与方法,就像我在文中说过的那样。

yyman001 commented 6 years ago

vs的提示包含太多内容了,有点不够好用,而且你没办法关闭那些无用的提示,无从下手。

lmk123 commented 6 years ago

@yyman001 赞同。但是在 WebStorm 中,即使开启了「强类型检测」,也还是有很多无用的提示。

qlie commented 6 years ago

博主让我又增长了见识,原来还能用issue来做博客。

songxing10000 commented 6 years ago

最近也在用VSCode写vue,那么问来了,点一个class的字符串,不会跳转到对应 的style里,点一个方法 不会跳转到方法实现那里去,求帮助

agileago commented 6 years ago

@songxing10000 没准博主已经从vscode转到webstorm了,期待下一篇我为什么从vscode转到webstorm

songxing10000 commented 6 years ago

@agileago 本来想自己写个VSCode插件跳转的,结果折腾了一晚上,太麻烦了,还是期待有对应的插件吧,不然回归Webstorm是必然啊

lmk123 commented 6 years ago

@songxing10000 平常没有用到过这个功能,这个功能对我来说无关紧要所以没觉得有啥不妥 😂

@agileago 我仍然在用 VS Code

songxing10000 commented 6 years ago

@lmk123 你看到一个方法,想看下怎么实现的或者想修改这个方法,在webstorm里点击一下这个方法的字符串就能跳转到方法实现那里去,VSCode目前,只能自己复制一个这个方法名,搜索,command g跳转到下一个字符串,才能定位到这个方法实现

lmk123 commented 6 years ago

@songxing10000 VS Code 确实不支持 JavaScript 的方法跳转,但是它支持 TypeScript 的,而我一直都写 TypeScript 所以没太大问题。

WebStorm 的做法其实跟全局搜索差不多,如果有多个同名的方法,你点击方法名之后会展示一个列表给你选择要跳到哪个方法去,并不能精准定位到你点击的这个方法的实现位置。

hronro commented 6 years ago

@songxing10000 @lmk123 vs code 可以实现 js 的方法跳转啊,而且是精准定位,不是全局搜索

ghost commented 6 years ago

说 vscode 不能实现 js 方法跳转,我不服

image

songxing10000 commented 6 years ago

@liuliangsir 一开始就说的vue,没有说过JS

kinglisky commented 6 years ago

哈哈,关于编辑器的撕逼就多了,vs code 大法好!

keepeye commented 6 years ago

我还是换回webstorm吧,vue文件里的js方法不能跳转就算了,现在连 template 也不能正常识别了。。

image

弱智的一笔,改成 > 或者 <= 就没问题

gxy01 commented 6 years ago

蛤,启动速度和内存到你这里居然变成了优势。 每个人对同一个事物的体会果然会因为自己的经历不同啊

EthanLin-TWer commented 6 years ago

说到这个,我个人有个理念是这样。性能这个事情,可以用钱解决的问题就用钱解决就好了。比如现在对我来说,我觉得追求效率的一个开发配置应该是这样:

还要省钱买垃圾桶…

songxing10000 commented 6 years ago

@linesh-simplicity 同意,注意效率的人才是真正热爱程序的人

QwertyJack commented 6 years ago

Atom 怎么样?有没有大佬指点一下。

heiliuer commented 6 years ago

webstorm => vscode换了半年没换过来,说下 webstorm

缺点:

  1. 新建node_modules文件夹会突然索引卡死
  2. 收费
  3. 自带功能太多,臃肿吃内存(java开发的ide貌似都这样)

优点:

  1. 自带vcs功能,无论是git还是svn都用的非常舒心(vscode自带的感觉比不上)
  2. 自带 terminal 功能无论是windows还是mac都很好用(vscode不支持tab模式,文件夹拖进去不能进入)
  3. 自带deployment 功能非常逆天,无论terminalftpsftp,部署,运维,文件同步很方便了(vscode要找插件,而且找了遍,没发现这些功能都有的)
  4. 自带的test rest client功能,测试接口很方便(vscode没发现)
  5. 全局快速搜索替换,定位symbol(方法,变量)神操作(vscode检索比较慢,暂时没发现定位symbol的方式)
  6. 自带的插件就对vueangularreactnodejs有很好支持
wangcansunking commented 6 years ago

强烈推荐 WebStorm 如果你像我一样 。 。 。 。 电脑是32g内存的话。。。 image (我是黑苹果 i5-8500 + 16g * 2 芝奇 3200)

LinSundy commented 6 years ago

vscode 的vue中方法如何跳转? image

我点击this.getData的时候,无法跳转到对应的方法、

heiliuer commented 6 years ago

说 vscode 不能实现 js 方法跳转,我不服

image vscode跳转定义,会索引搜索,要耗时的,而且js代码跳转的位置并不准确。

LinSundy commented 6 years ago

说 vscode 不能实现 js 方法跳转,我不服 image vscode跳转定义,会索引搜索,要耗时的,而且js代码跳转的位置并不准确。

你现在用的什么编辑器,我是超喜欢vscode, 可是现在就一个很常用的功能不能用, vue中 变量以及方法无法跳转~~ 超级蛋疼,其他都调好了

LinSundy commented 6 years ago

@heiliuer 你现在用的什么编辑器,我是超喜欢vscode, 可是现在就一个很常用的功能不能用, vue中 变量以及方法无法跳转~~ 超级蛋疼,其他都调好了

prophetw commented 5 years ago

关于WebStorm 占内存的问题,也是有解决方案的。在不需要索引的文件夹上,右键 Mark directory as 选择Exclude,就不会对该文件夹进行索引。 自己测试,只要取消不必要的文件夹索引,比如node_modules,bower_components 这些,真的可以减少很多内存的占用,我使用的情况基本都是2g左右内存的占用(虽然不能和vscode比)。 VSCode 轻量级确实让人垂涎,但是js没有跳转,还怎么用。

rexleimo commented 5 years ago

然后我觉得过一段时间你就会换回webstorm的,因为ws的智能提示完爆任何编辑器

并不这么认为

WeiYuanStudio commented 5 years ago

Issues 当博客233333

songxing10000 commented 5 years ago

由于没有跳转,于是我从 VS Code 转向了 WebStorm

wl05 commented 5 years ago

算了,还是抱紧webStorm 吧,老了折腾不动了

songxing10000 commented 5 years ago

由于写Weex没有跳转,于是我再次从 VS Code转向了 WebStorm

agileago commented 5 years ago

@songxing10000 Weex还活着呢?现在不都是flutter

songxing10000 commented 5 years ago

@agileago 我们都用Weex近两年了,挺好的,Flutter很多东西还不成熟,上次运行了其demo感觉流畅度还不如Weex呢,不过我看好Flutter

lmk123 commented 5 years ago

各位,我又回归 WebStorm 了 😂

顺便分享一波我的 WebStorm 设置:https://github.com/lmk123/WebStorm-Settings

yyman001 commented 5 years ago

我用的 webstorm v2017 版 对冲突文件处理不太友好,有没啥别的插件支持

seraphlive commented 5 years ago

各位用webstorm的大佬们,借楼请问有没有用Emacs/Mac OSX keymap的?最近试了一下好像jetbrain全家桶在我win10/ubuntu上,每当按ctrl-n的时候都会卡住报错搞得想放弃了.....去google了半天也没看出个所以来......不知道大家有没有遇到的,这种属于得等他们修复的bug么?

EthanLin-TWer commented 5 years ago

我用的 webstorm v2017 版 对冲突文件处理不太友好,有没啥别的插件支持

这个的话,我一直直接在文本上解决冲突。这种冲突一般不是很复杂,用图形化界面还要点几下,不必要。如果冲突一般很多很复杂,说明开发流程应该改善,要经常更新主分支的代码、经常把代码合并回主分支。

各位用webstorm的大佬们,借楼请问有没有用Emacs/Mac OSX keymap的?最近试了一下好像jetbrain全家桶在我win10/ubuntu上,每当按ctrl-n的时候都会卡住报错搞得想放弃了.....去google了半天也没看出个所以来......不知道大家有没有遇到的,这种属于得等他们修复的bug么?

不知道设置里面的“Invalid and Restart”有用没?

seraphlive commented 5 years ago

不知道设置里面的“Invalid and Restart”有用没?

我还没试这个,然后也不知道为啥自己就好了,很神奇......谢谢回复哈。

bestkp commented 5 years ago

说 vscode 不能实现 js 方法跳转,我不服 image vscode跳转定义,会索引搜索,要耗时的,而且js代码跳转的位置并不准确。

你现在用的什么编辑器,我是超喜欢vscode, 可是现在就一个很常用的功能不能用, vue中 变量以及方法无法跳转~~ 超级蛋疼,其他都调好了

有段时间也是被不能跳转折磨的不行,后来偶尔返现option(alt)+左键可以

lyon007 commented 5 years ago

各位,我又回归 WebStorm 了 😂

顺便分享一波我的 WebStorm 设置:https://github.com/lmk123/WebStorm-Settings

我就知道 你会用回ws的,

wl05 commented 5 years ago

年轻人玩得真花

EthanLin-TWer commented 5 years ago

用WebStorm TDD FizzBuzz 两部分需求,只需要92秒,VSCode党也整一个分享分享呗?友好交流一下。

Castleeee commented 5 years ago

只有4G内存的我,转向了VSCODE.不过我还是觉得Webstorm好用,吃内存不是白吃的