热门标签 | 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.

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


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
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社区 版权所有