Elixir 代码性能优化指北
Elixir 作为基于 Erlang/OTP 的年轻语言,拥有良好的并发模型设计,在 Web 场景下对于实现能承载高并发的服务毫无问题。有好事者对比过包括 Phoenix 在内不同的 Web Framework 的性能,可见如果采用 Phoenix/Plug 来实现 Web Server 在性能上不会有太大的问题(代码实现良好的情况下)。所以,本文不会讨论真正的工业生产环境下整个系统的性能状态,因为系统性能受到很多因素的影响,具体编程语言的运行时的执行效率往往不是真正的问题所在,与其考虑编程语言本身的运行时效率,不如探讨系统在具体架构和实现上如何能优化来承载更高的负载来得实际。在生产环境中,我们可以借助 APM 服务来监控系统状态和性能指标。
由于 Elixir 本身是基于 Erlang 的更高层次的抽象,所以直觉上我们会觉得 Elixir 在运行性能上应该比 Erlang 本身要差一些。实际情况是不是这样呢?Elixir 相比于 Erlang 而言,为我们提供了一些可以快速调用的高阶函数库,典型的有 Enum
、Stream
,提高了日常实现需求的开发效率,可以让代码实现得更清晰且更易维护。而更高的抽象又几乎必然意味着底层的实现逻辑需要更通用健壮,从而也会更复杂。更高的抽象程度似乎天然与更高的运行效率有着内在的矛盾。本文的焦点在 Elixir 代码的运行性能,即对于实现同样的功能,用哪样的 Elixir 实现方式会让代码在运行时跑得更快。