(服务器端 Swift 框架)Vapor 3.0 与 2.0 在性能方面的表现如何?除了小型项目之外,这有什么严重的吗?

How is (Server-Side Swift framework) Vapor 3.0 vs 2.0 doing performance-wise? Is it anything serious other than for small-scale projects?

与 2.0、Perfect 或 Python 框架(如 Django)相比。如果可用于小型项目以外的任何东西

我假设你的问题如下:

What does Vapor 3's architectural changes mean for performance and larger projects?

我会将具体的硬性数字留给其他框架讨论。


Vapor 3 是一个为未来而设计的框架。它具有极高的性能、轻量级的内存使用、可扩展性并具有大量官方支持的功能集。


性能

虽然这些 不是 硬性数字,但我的笔记本电脑在 103k 明文 requests/second.

下测得 HTTP Engine

由于默认中间件、服务和内容系统的开销,Vapor framework 略低。它仍然非常高效,明文吞吐量为 80k requests/second。

内存使用

Vapor 3 启动时的内存开销在我的测试中介于 6.4MB 和 7.5MB 之间。这符合我测试过的Go框架。

可扩展

Vapor 3 的主要架构差异是这里的关键。我们在 Java 生态系统中致力于我们自己的 Async library that is inspired by reactive-streams.org。我们的流模型是拉流模型,其中数据不会被强加到另一个库中,而是库在准备好时请求更多数据。因为这适用于我们整个生态系统,所以无论请求大小如何,内存使用率都非常低。此规则的少数例外是(多部分)形式、JSON 和模板。模板是我们将来能够应用适当反应性的唯一库。

特点

除了 Web 框架中的反应性,我们还构建了自己的 ORM, Fluent.

Fluent 默认支持 SQLite,但也有 MySQL, PostgreSQL and MongoDB through MongoKitten.

的驱动程序

除了这些驱动程序,我们还支持 Redis

以上所有驱动程序都支持反应流和 Codable。这些驱动程序是用 Swift 编写的,下面没有 C 库,并且针对减少的内存副本进行了高度优化。

整合

由于我们构建并维护了上述整个生态系统,因此与大多数其他框架相比,我们能够在性能和 API 方面实现更深入的集成。但是,这确实会对我们的工作量产生重大影响。

未来的证明

我们决定将我们的大部分 API 内部化,直到明确要求某个功能可以公开访问为止。这样做是为了确保对我们的实现的更改不会导致重大更改。

它可用于 medium/large 规模的项目吗?

我无法判断。我是 Vapor 3 核心团队的成员。但是,我们有一个活跃的 slack 社区,可以告诉您他们到目前为止使用 Vapor 3 的体验。我们仍处于测试阶段,因此我不会立即发布带有它的产品。