1

当我提供简短的背景时,请耐心等待:

  1. 我的应用程序从 Facebook 和 LinkeIn 检索用户数据。
  2. 两者都有非常严格的使用条款。具体来说,他们不允许在我的应用程序上保存用户数据(嗯,有点。Facebook 允许缓存。链接甚至不允许缓存)。
  3. 天真的解决方案是在我需要他们的数据时调用 Facebook/LinkedIn。问题是,如果我需要大量数据(例如 100 个用户的个人资料),这会变得太慢。批量调用使事情变得更好,但它们有局限性,我不确定这种方法是否可以扩展。

所以问题是如何让我的应用程序在使用来自 Facebook/LinkedIn 的数据时快速运行?

如果您可以分享您的经验,或者有一个使用大量来自 Facebook/LinkedIn 数据的网站的示例,我很乐意听到。

4

2 回答 2

3

具体来说,他们不允许在我的应用程序上保存用户数据(嗯,有点。Facebook 允许缓存。链接甚至不允许缓存)。

这不是真的…… http://developer.linkedin.com/documents/linkedin-apis-terms-use

B. 仅在允许的情况下存储内容,3. 缓存性能:

为改善会员体验,您可以缓存领英内容,但您在最初请求后的 24 小时内不得这样做。这种有限的缓存权限仅出于性能原因。

于 2012-08-14T10:20:03.153 回答
3

当您谈论使您的应用程序“快速”时,请注意“快速”可以表示“高吞吐量”或“低延迟”,两者之间存在很大差异。最好为延迟(应为每个用户提供服务的速度)和吞吐量(每单位时间应该能够服务多少用户)设置性能目标。

如果从 FB/LinkedIn 获取数据是吞吐量的瓶颈,

  1. 使用批处理请求。
  2. 如果可以重复使用相同的数据,请尽可能多地缓存它,并尽可能长时间地缓存它。
  3. 确保您的应用程序能够并行发出许多请求。由于通过网络发送查询是一种高延迟操作,因此您可以通过这种方式获得大量吞吐量。

如果从 FB/LinkedIn 获取数据是延迟的瓶颈,

  1. 同样,在本地缓存尽可能多的数据。
  2. 如果可以“猜到”很快需要哪些数据,请预先获取它。(例如:如果您的用户必须填写一个大表单然后提交,但该表单中有一个关键字段标识您需要的数据,您可以使用 AJAX 使页面尽快发送该字段它被填写,而不是等待整个表单被提交!)
  3. 如果您需要多条数据来为单个用户提供服务,请不要使用多个顺序请求来获取它们——要么使用批处理请求,要么使用多个并行请求(可能两者兼而有之)。
  4. 当需要让用户等待时,“分散”他们的注意力——尽你所能让等待看起来更短。
  5. 如果页面的某些部分可以在没有 FB/LinkedIn 数据的情况下呈现,请先将这些部分发回,并在数据准备好时使用 AJAX 调用填充其他部分。

如果您绝对必须拥有来自 FB/LinkedIn 的数据 XYZ 才能为用户提供服务,并且单个 API 请求的延迟是 N 秒,并且您为每个用户提供服务的目标最大时间是 < N 秒,那么您可以达到您的唯一可能的方式目标是通过预取数据。也许当您看到用户的第一个页面请求进入(例如主页)时,您可以开始将该用户所需的所有数据加载到缓存中(如果它不存在的话)。

无论您做什么,我都建议您将 FB/LinkedIn 数据访问代码封装在“数据访问层”中。缓存应该严格地发生在数据访问层内部——应用程序代码不需要知道缓存。是否使用批处理调用,是否并行发出多个调用也是一个实现细节,应严格保留在数据访问层内部。

于 2012-08-14T10:36:50.710 回答