提高 API 调用速度 osx

Posted

技术标签:

【中文标题】提高 API 调用速度 osx【英文标题】:Increase speed of API calls osx 【发布时间】:2018-05-22 18:25:49 【问题描述】:

我想使用 swift 尽可能快地调用我的 API。我知道使用 Alamofire 有助于提高速度,但有什么比使用 Alamofire 更快的吗?我正在创建交易软件,所以每一毫秒都会产生巨大的差异。这些是我为执行交易而发出的“发布”和“获取”请求。目前,通话速度存在很大差异。我知道有像 neumob 这样的平台可以加速应用程序,所以我想知道是否有任何类似的概念可以应用于我的应用程序。我正在使用 swift 开发它,它将在 OS X 上运行。

我还使用 websocket 来获取订单簿数据。要连接到 websocket,我使用的是 Starscream。如果有更好的方法连接到套接字,我也很想知道。

【问题讨论】:

提高性能的第一条规则是在尝试提高性能之前衡量性能。在尝试优化您认为很慢的代码路径之前,请先验证花费最多时间的位置。有一些工具可以显示您在各个功能(包括和独占)上花费的时间。使用它来指导您优化什么。至于网络性能的改进,那是另一回事了。但是您可能希望获得 Charles/Fiddler 跟踪,以了解您的应用程序在网络 I/O 上的花费。可能是服务器.... Alamofire 实际上与速度无关。 【参考方案1】:

如果毫秒很重要,您不应该使用 HTTP。甚至是 TCP。 AFAIK,大多数交易应用程序使用某种类型的流连接,通常传输 protobufs 而不是 JSON,因此事件的传入速度与通过网络发送的速度一样快。除此之外,直接使用URLSession 可能比包装URLSession 的Alamofire 快一些指令,但我怀疑它会产生明显的差异。就 HTTP 连接而言,URLSession 非常快,因为这是 Safari 和系统其余部分使用的。

【讨论】:

如果毫秒很重要,那么最重要的事情就是拥有专用的物理连接。 对。我认为问这个问题是因为这是不可能的(即这是针对应用程序,而不是交易后端)。 这是一个 os x 应用程序。我们正在交易加密货币,因此我们对交易所使用的 API(即币安)没有太多控制权。我们可以将 AFAIK 与 binance 一起使用吗? @Nevin 基本上你最初的假设是错误的。如果您没有实施具有物理连接的自动决策软件,那么毫秒甚至数百毫秒都无关紧要。您的应用会因用户操作和实际 API 调用而变慢,两者都会造成长达数秒的延迟。 @Sulthan 我正在实施一个自动决策软件,所以这与用户的行为无关【参考方案2】:

您的程序很可能受 I/O 限制,而不是 CPU 限制,因此主要瓶颈将是您的互联网连接和它传输的数据。

如果您因为无法控制 API 服务器而无法更改通信协议,那么您唯一能做的就是在地理位置靠近 API 服务器的数据中心运行您的应用程序。只要服务要求您使用 HTTP 和 Web 套接字,如果没有经过多年的优化,您的速度不会比 NSURLSession、Alamofire 或 Starscream 快多少。

如果您可以控制 API 服务器,您可以切换到纯 TCP 甚至 UDP。然后你可以想出一个使用小二进制消息的自定义通信协议。


当然,您必须先进行概要分析,然后才能真正找出代码的哪些部分运行缓慢。可能还有其他代码需要几毫秒才能运行。

【讨论】:

那么,如果我们提高互联网连接的速度,会有很大的不同吗? 我无法给出明确的答案。也许是的,如果连接的延迟是主要瓶颈。地理距离也可能起作用,因为光以 0.6*c 的速度通过光纤在全球范围内传播大约需要 20 毫秒。也许 API 服务器本身可以有更大的延迟,对于所有用户来说并不相同,所以这可能根本没有任何好处。

以上是关于提高 API 调用速度 osx的主要内容,如果未能解决你的问题,请参考以下文章

如何提高google cloud vision api的处理速度?

如何提高终端中的光标速度? [关闭]

如果使用 CloudFlare,如何提高 API 响应速度

低代码开发平台如何提高全栈开发应用程序速度

低代码开发平台如何提高全栈开发应用程序速度

我正在运行一个 REST API 服务器,但我不太确定基础架构。另外,我可以做些啥来基准测试和提高速度?