热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用外部API时加速页面加载-SpeedinguppageloadswhileusingexternalAPI's

Imbuildingasitewithdjangothatletsusersmovecontentaroundbetweenabunchofphotoservice

I'm building a site with django that lets users move content around between a bunch of photo services. As you can imagine the application does a lot of api hits.

我正在使用django构建一个网站,允许用户在一堆照片服务之间移动内容。你可以想象这个应用程序做了很多api命中。

for example: user connects picasa, flickr, photobucket, and facebook to their account. Now we need to pull content from 4 different apis to keep this users data up to date.

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

right now I have a a function that updates each api and I run them all simultaneously via threading. (all the api's that are not enabled return false on the second line, no it's not much overhead to run them all).

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

Here is my question:

What is the best strategy for keeping content up to date using these APIs?

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

I have two ideas that might work:

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

  1. Update the apis periodically (like a cron job) and whatever we have at the time is what the user gets.

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

    benefits:

    • It's easy and simple to implement.
    • 实施简单易行。

    • We'll always have pretty good data when a user loads their first page.
    • 当用户加载他们的第一页时,我们总是会有非常好的数据。

    pitfalls:

    • we have to do api hits all the time for users that are not active, which wastes a lot of bandwidth
    • 我们必须一直为那些不活跃的用户做api命中,这会浪费很多带宽

    • It will probably make the api providers unhappy
    • 它可能会使api提供商不高兴

  2. Trigger the updates when the user logs in (on a pageload)

    用户登录时触发更新(在页面加载上)

    benefits:

    • we save a bunch of bandwidth and run less risk of pissing off the api providers
    • 我们节省了大量带宽,降低了api提供商的压力

    • doesn't require NEARLY the amount of resources on our servers
    • 我们的服务器上几乎不需要大量的资源

    pitfalls:

    • we either have to do the update asynchronously (and won't have anything on first login) or...
    • 我们要么必须异步进行更新(并且首次登录时不会有任何内容)或者......

    • the first page will take a very long time to load because we're getting all the api data (I've measured 26 seconds this way)
    • 第一页需要很长时间才能加载,因为我们正在获取所有api数据(我用这种方式测量了26秒)

edit: the design is very light, the design has only two images, an external css file, and two external Javascript files.

编辑:设计很轻,设计只有两个图像,一个外部css文件和两个外部Javascript文件。

Also, the 26 seconds number comes from the firebug network monitor running on a machine which was on the same LAN as the server

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

1 个解决方案

#1


Personally, I would opt for the second method you mention. The first time you log in, you can query each of the services asynchronously, showing the user some kind of activity/status bar while the processes are running. You can then populate the page as you get the results back from each of the services.

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

You can then cache the results of those calls per user so that you don't have to call the apis each time.

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

That lightens the load on your servers, loads your page fast, and provides the user with some indication of activity (along with incrimental updates to the page as their content loads). I think those add up to the best User Experience you can provide.

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


推荐阅读
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • PHP-Casbin v3.20.0 已经发布,这是一个使用 PHP 语言开发的轻量级开源访问控制框架,支持多种访问控制模型,包括 ACL、RBAC 和 ABAC。新版本在性能上有了显著的提升。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 在最近的学习过程中,我对Vue.js中的Prop属性有了更深入的理解,并认为这一知识点至关重要,因此在此记录一些心得体会。Prop属性用于在组件之间传递数据。由于每个组件实例的作用域都是独立的,无法直接引用父组件的数据。通过使用Prop,可以将数据从父组件安全地传递到子组件,确保数据的隔离性和可维护性。 ... [详细]
  • `chkconfig` 命令主要用于管理和查询系统服务在不同运行级别中的启动状态。该命令不仅能够更新服务的启动配置,还能检查特定服务的当前状态。通过 `chkconfig`,管理员可以轻松地控制服务在系统启动时的行为,确保关键服务正常运行,同时禁用不必要的服务以提高系统性能和安全性。本文将详细介绍 `chkconfig` 的各项参数及其使用方法,帮助读者更好地理解和应用这一强大的系统管理工具。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
author-avatar
叫我小小小火枪的天空_603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有