如何让我的应用程序与Facebook和linkedin快速运行?

时间:2012-08-14 09:40:38

标签: ruby-on-rails facebook performance rest linkedin

在我提供简短背景时请耐心等待:

  1. 我的应用程序从Facebook和LinkeIn检索用户数据。
  2. 两者都有非常严格的使用条款。具体来说,他们没有 允许在我的应用程序中保存用户数据(好吧,亲切的。 Facebook允许缓存。链接不允许甚至缓存。)
  3. 天真的解决方案是在我需要的时候拨打Facebook / LinkedIn 来自他们的数据。问题是,如果我需要,这会变得太慢 大量数据(例如100个用户的简档)。批量调用可以实现 更好,但他们有限制,我不确定这种方法可以 规模。
  4. 所以问题是如何在使用来自Facebook / LinkedIn的数据时让我的应用程序快速运行?

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

2 个答案:

答案 0 :(得分:3)

  

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

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

  

B中。仅将内容存储为允许,3。为性能缓存:

     

要改善会员体验,您可以缓存LinkedIn内容,但不得超过原始请求超过24小时。这种有限的缓存权限仅出于性能原因。

答案 1 :(得分:3)

当你谈到让你的应用程序“快速”时,请注意“快速”可能意味着“高吞吐量”或“低延迟”,并且两者之间存在很大差异。为延迟(每个用户应该服务的速度)和吞吐量(每单位时间应该能够服务的用户数量)设置性能目标会很好。

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

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

    1. 再次,在本地缓存尽可能多的数据。
    2. 如果可以“猜测”即将需要哪些数据,请预先获取。 (例如:如果您的用户必须填写一个大表单然后提交,但是该表单中有一个标识您需要的数据的关键字段,您可以使用AJAX使页面尽快返回该字段它被填写,而不是等待整个表格提交!)
    3. 如果您需要多个数据来为单个用户提供服务,请不要使用多个连续请求获取它们 - 使用批量请求或多个并行请求(可能两者)。
    4. 当需要让用户等待时,“分散”他们 - 尽你所能使等待看起来更短。
    5. 如果页面的某些部分可以在没有FB / LinkedIn数据的情况下呈现,请先将这些部分发回,并在数据准备就绪时使用AJAX调用填写其他部分。
    6. 如果您绝对必须拥有来自FB / LinkedIn的数据XYZ来为用户服务,并且单个API请求的延迟为N秒,并且您为每个用户提供服务的目标最长时间是< N秒,唯一可能达到目标的方法是预取数据。也许当您看到第一页请求进入用户(例如主页)时,您可以开始将该用户所需的所有数据加载到缓存中(如果它尚未存在)。

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