【问题标题】:Speeding up page loads while using external API's在使用外部 API 时加快页面加载速度
【发布时间】:2009-05-19 14:19:42
【问题描述】:

我正在使用 django 构建一个网站,让用户可以在一堆照片服务之间移动内容。正如您可以想象的那样,该应用程序执行了很多 api hits。

例如:用户将 picasa、flickr、photobucket 和 facebook 连接到他们的帐户。现在我们需要从 4 个不同的 api 中提取内容,以使这些用户数据保持最新。

现在我有一个更新每个 api 的函数,我通过线程同时运行它们。 (所有未启用的 api 在第二行返回 false,不,运行它们的开销并不大)。

这是我的问题:

使用这些 API保持内容最新的最佳策略是什么?

我有两个可能可行的想法:

  1. 定期更新 API(如 cron 作业),我们当时拥有的就是用户得到的。

    好处:

    • 它易于实施。
    • 当用户加载他们的第一页时,我们总是会得到很好的数据。

    陷阱:

    • 我们必须一直为不活跃的用户做 api hits,这样会浪费很多带宽
    • 这可能会让 api 提供者不高兴
  2. 在用户登录时触发更新(在页面加载时)

    好处

    • 我们节省了大量带宽并降低了惹恼 api 提供者的风险
    • 几乎不需要我们服务器上的资源量

    陷阱:

    • 我们要么必须异步进行更新(并且不会 首次登录时的任何内容)或...
    • 加载第一页需要很长时间,因为我们正在 获取所有 api 数据(我用这种方法测量了 26 秒)

edit:设计很轻,设计只有两张图片,一个外部css文件,两个外部javascript文件。

另外,26 秒的数字来自运行在与服务器位于同一 LAN 的机器上的 firebug 网络监视器

【问题讨论】:

    标签: django api


    【解决方案1】:

    就个人而言,我会选择您提到的第二种方法。第一次登录时,您可以异步查询每个服务,在进程运行时向用户显示某种活动/状态栏。然后,您可以在从每个服务返回结果时填充页面。

    然后您可以为每个用户缓存这些调用的结果,这样您就不必每次都调用 API。

    这样可以减轻服务器的负载,快速加载页面,并为用户提供一些活动指示(以及在加载内容时对页面进行增量更新)。我认为这些加起来就是您可以提供的最佳用户体验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2010-12-14
      • 2012-03-15
      • 1970-01-01
      • 2018-02-25
      相关资源
      最近更新 更多