1

我目前正在为我当前的一个 iPhone 应用程序使用 node.js 构建一个 RESTful Web 服务。目前,系统工作如下:

  • 客户端向 node.js 服务器发出请求,服务器进行适当的计算和 MySQL 查找,并返回数据
  • 客户端的反应器处理响应并更新 UI

我一直在考虑的一件事是对我的服务器进行多个 API 调用与在 MySQL 数据库中执行多个连接语句然后返回构造对象的调用之间的差异(在性能和最佳实践方面)。

例如:假设我正在加载要在 UI 中显示的用户配置文件。用户拥有个人资料图片、基本信息和新闻提要项目。使用选项一,我将执行以下操作:

  • 向服务器发出 getUser 请求,它将在数据库中执行如下查询:
    Select * from user join user_info on user.user_id=user_info.user_id left join user_profile_picture on user_profile_picture.user_id=user.user_id.
    然后服务器将返回一个构造的用户对象,其中包含来自每个表的信息
  • 客户端等待服务器的响应并立即更新所有内容

选项 2 是:

  • 向服务器发出 3 个异步请求:
    • 获取用户
    • 获取用户信息
    • 获取用户配置文件
  • 每当收到任何请求时,都会更新 UI

因此,鉴于这两个选项,我想知道哪个会提供更好的可扩展性。

目前,出于以下原因,我正在考虑使用选项 2:

  1. 每个异步请求都将比选项 a 中的查询更快,因此更快地向用户显示某些内容
  2. 我也在集成 Memecache,我觉得 3 个单独的调用将更容易缓存特定结果(例如,不缓存用户配置文件,但缓存用户、user_info 和 user_profile_picture)。

有什么想法或经验吗?

4

1 回答 1

1

我认为这里的关键问题是这些 API 调用是否总是一起进行。如果是,那么设置单个端点的 a 并执行连接会更有意义。但是,如果不是这种情况,那么您应该保持分开。

现在,您当然可以使用查询语法来指定特定端点是否应该为您提供更多数据并将其与联接结合起来。这确实需要更多的输入卫生,但这可能是值得的,因为您可以最大限度地减少请求并仍然获得一个适应性强的系统。

在服务器端,除非您一次处理数千行,否则您的两种方法中的任何一种都不太可能明显慢于另一种

于 2016-11-23T21:06:44.760 回答