代码之家  ›  专栏  ›  技术社区  ›  Jiaaro

在使用外部API时加快页面加载速度

  •  0
  • Jiaaro  · 技术社区  · 15 年前

    我正在与Django建立一个网站,让用户在一系列照片服务之间移动内容。正如您可以想象的那样,应用程序执行了大量API操作。

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

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

    我的问题是:

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

    我有两个可行的想法:

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

      效益:

      • 实现起来简单易行。
      • 当用户加载他们的第一页时,我们总是有相当好的数据。

      陷阱:

      • 对于不活跃的用户,我们必须一直执行api命中,这会浪费大量的带宽。
      • 这可能会使API提供者不高兴
    2. 当用户登录时(在页面加载时)触发更新

      效益 :

      • 我们节省了大量带宽,减少了激怒API提供商的风险。
      • 不需要我们服务器上的几乎数量的资源

      陷阱:

      • 我们要么异步进行更新(而不是 首次登录时的任何信息)或…
      • 第一页需要很长时间才能加载,因为我们 获取所有API数据(我用这种方式测量了26秒)

    编辑 :设计非常简单,设计只有两个图像、一个外部CSS文件和两个外部JavaScript文件。

    此外,26秒的数字来自运行在与服务器位于同一局域网上的计算机上的Firebug网络监视器。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Justin Niessner    15 年前

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

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

    这可以减轻服务器上的负载,快速加载页面,并向用户提供一些活动指示(随着内容的加载,还会对页面进行增量更新)。我认为这些加起来就是你能提供的最好的用户体验。