提升 AppCode 性能的几个小技巧

AppCode 好用是好用,但这性能比起 Xcode 让人很无语。不过,AppCode 的性能是可以优化的。

最近的开发过程中发现 AppCode 占了 5GB 内存却仍然卡得干不了活,忍无可忍之下了解了一下如何优化 AppCode 性能。主要的参考资料来自 AppCode 官网。

资料中提到几个点总结下来就是:

  • 加大 AppCode 内存
  • 提升 AppCode code analysis 速度
  • 提升 AppCode indexing 速度
  • 关闭不必要的 Plugin

加大内存

打开内存指示器

AppCode 卡顿的一个主要原因是堆内存过低。所以我们很有必要打开 AppCode 内存指示器

在 AppCode 底部状态上右键点击后出现如下菜单,勾选 “Memory Indicator” 即可打开内存指示器。

-w267

我的内存指示器已打开,显示 “264 of 6131M”。内存状态良好。

注意:当可用的堆内存大小低于最大堆内存的5%时,会有低内存告警。

加大堆内存

从 AppCode 顶部菜单中 Help | Change Memory Settings 调整堆内存大小。

-w875

我的 MacBook 内存大小 16G,已经给 AppCode 分了 6144 MB。已经相当奢侈,不能再加了。(即便 6G 内存,AppCode 还是卡,所以就我遇到的问题而言,瓶颈并不在内存)

提升代码分析速度

On-the-fly code analysis is one of the most performance-consuming processes in AppCode.

AppCode 的实时代码检查过程是最吃电脑性能的一个过程。针对这个问题,我们可以对实时代码检查进行配置,减少检查过程的性能消耗。

简单来说,就是减少实时代码检查甚至干脆不要实时检查(等要要检查时再启动)。

调整代码检查项

AppCode 默认状态下会打开全部的检查类型(作者:不卡才怪?),我们可以根据自己的需要进行调整。

-w992

其实我们可以放心大胆地全关,因为完全可以在需要时通过 Code | Inspect Code 命令来检查。

调整检查级别

此外,还可以使用 Code | Configure Current File Analysis 命令调整当前已打开文件的检查级别。

分三种级别:

  • None - 不检查
  • Syntax - 语法检查
  • Inspections - 检查

不过个人感觉这个功能不太实用。

提升索引速度

AppCode 对文件进行索引(代码检查、代码自动补全、代码生成、自动导入功能依赖索引)。不过,不索引那些包含二进制文件、日志以及构建产物的目录并不会影响 AppCode 的代码检查等功能,所以进行索引时我们完全可以将这些目录排除。

另外,某些文件因过太大或是位于远程机器,索引的代价非常大。所以也应将这些文件排除在外。

排除文件或目录的方法很简单,在 Project 窗口将工程切换到 Files 视图,右击想要排除的文件,然后选择 Mark Directory as | Excluded

-w321


回到前面我提到分配6G内存的情况下 AppCode 仍然卡顿的问题,发现卡顿时 AppCode 一直在索引。检查后发现 AppCode 打开该工程后,索引范围是当前用户的所有文件(即整个 /Users/username/ 目录。发现 AppCode 打开其他工程时只会索引当前工程目录中的文件,所以这是 AppCode 的 bug?)。对数量巨大的文件进行索引,几个小时也完成不了吧?

-w318

解决办法:果断排除掉不相关的目录,减少索引时间。

其他优化技巧

另外一些优化手段包括:

  • 关闭 AppCode 中不必要的插件。AppCode 默认加载了很多插件,我们可以关闭不需要的插件以减少内存占用、提升速度

  • 保证 AppCode 和 Xcode 版本兼容。如下图,这是我自己遇到的一个情况:AppCode 提示当前 Xcode 版本为 12.4,版本过高。

-w967

不清楚到底有什么影响,不过还是升级到跟 Xcode 12.4 兼容的 AppCode。如下图,AppCode 和 Xcode 兼容时,没有上述的警告。

-w898

  • Download Xcode caches。如下图,勾选这里的 Download Xcode cacheds automatically,某些情况下能提升索引性能。(作者:按官方解释,这里的”某些情况”其实并不多,主要是指升级 Xcode 的情况)

-w898

总结

一番折腾之后,AppCode 速度果然上来了。虽然 AppCode 响应速度相对 Xcode 还是有些差距,不过考虑到 AppCode 强大的重构功能还是非常值得使用的!