使用外部API时加速页面加载

时间:2009-05-19 14:19:43

标签: django api

我正在使用django构建一个网站,让用户可以在一堆照片服务之间移动内容。你可以想象这个应用程序有很多功能。

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

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

这是我的问题:

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

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

  1. 定期更新api(如cron作业),当时我们拥有的是用户获取的内容。

      

    好处:

         
        
    • 实施简单易行。
    •   
    • 当用户加载他们的第一页时,我们将始终拥有非常好的数据。
    •   
         

    陷阱:

         
        
    • 我们必须为那些不活跃的用户提供api hits,这会浪费大量带宽
    •   
    • 这可能会让api提供商不高兴
    •   
  2. 在用户登录时触发更新(在页面加载上)

      

    好处

         
        
    • 我们节省了大量带宽,减少了滥用api提供商的风险
    •   
    • 近乎不需要我们服务器上的资源量
    •   
         

    陷阱:

         
        
    • 我们必须异步进行更新(并且不会   首次登录时的任何事情)或......
    •   
    • 第一页需要很长时间才能加载,因为我们是   获取所有api数据(我用这种方式测量了26秒)
    •   
  3. 编辑:设计非常轻巧,设计只有两个图片,一个外部css文件和两个外部javascript文件。

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

1 个答案:

答案 0 :(得分:2)

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

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

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