我正在使用django构建一个网站,让用户可以在一堆照片服务之间移动内容。你可以想象这个应用程序有很多功能。
例如:用户将picasa,flickr,photobucket和facebook连接到他们的帐户。现在我们需要从4种不同的api中提取内容,以使这些用户数据保持最新状态。
现在我有一个更新每个api的函数,我通过线程同时运行它们。 (所有未启用的api都会在第二行返回false,并不是没有太大的开销来运行它们。)
使用这些API保持内容最新的最佳策略是什么?
我有两个可能有用的想法:
定期更新api(如cron作业),当时我们拥有的是用户获取的内容。
好处:
- 实施简单易行。
- 当用户加载他们的第一页时,我们将始终拥有非常好的数据。
陷阱:
- 我们必须为那些不活跃的用户提供api hits,这会浪费大量带宽
- 这可能会让api提供商不高兴
在用户登录时触发更新(在页面加载上)
好处:
- 我们节省了大量带宽,减少了滥用api提供商的风险
- 近乎不需要我们服务器上的资源量
陷阱:
- 我们必须异步进行更新(并且不会 首次登录时的任何事情)或......
- 第一页需要很长时间才能加载,因为我们是 获取所有api数据(我用这种方式测量了26秒)
编辑:设计非常轻巧,设计只有两个图片,一个外部css文件和两个外部javascript文件。
此外,26秒的数字来自在与服务器位于同一LAN上的计算机上运行的firebug网络监视器
答案 0 :(得分:2)
就个人而言,我会选择你提到的第二种方法。第一次登录时,您可以异步查询每个服务,在进程运行时向用户显示某种活动/状态栏。然后,您可以在从每个服务中获取结果时填充页面。
然后,您可以为每个用户缓存这些调用的结果,这样您就不必每次都调用apis。
这样可以减轻服务器的负担,快速加载页面,并为用户提供一些活动指示(以及在内容加载时对页面进行实际更新)。我认为这些可以提供您可以提供的最佳用户体验。