2009-05-19 5 views
0

Je construis un site avec django qui permet aux utilisateurs de déplacer du contenu entre plusieurs services photo. Comme vous pouvez l'imaginer, l'application fait beaucoup de succès. Par exemple: l'utilisateur connecte picasa, flickr, photobucket et facebook à son compte.Accélérer les chargements de pages en utilisant des API externes

Maintenant, nous devons extraire le contenu de 4 API différentes pour garder les données de ces utilisateurs à jour.

maintenant j'ai une fonction qui met à jour chaque API et je les exécute tous simultanément via le filetage. (tous les api qui ne sont pas activés retournent faux sur la deuxième ligne, non ce n'est pas trop frais pour les exécuter tous).

Voici ma question:

Quelle est la meilleure stratégie pour contenu maintenir à jour l'utilisation de ces API?

J'ai deux idées qui pourraient fonctionner:

  1. Mettez à jour les apis périodiquement (comme une tâche cron) et tout ce que nous avons à ce moment est ce que l'utilisateur obtient.

    avantages:

    • Il est facile et simple à mettre en œuvre.
    • Nous aurons toujours de très bonnes données lorsqu'un utilisateur charge sa première page.

    pièges:

    • nous devons faire api frappe tout le temps pour les utilisateurs qui ne sont pas actifs, ce qui gaspille de la bande passante
    • Il fera probablement les fournisseurs de api malheureux
  2. Trigger les mises à jour lorsque l'utilisateur se connecte à (sur un pag eload)

    bénéficie:

    • nous économisons un tas de bande passante et courir moins de risques d'énerver les fournisseurs de api
    • ne nécessite pas PRESQUE la quantité de ressources sur nos serveurs

    pièges:

    • nous devons soit faire la mise à jour de manière asynchrone (et ne pas avoir rien sur la première connexion) ou ...
    • la première page prendra beaucoup de temps à charger parce que nous sommes obtenir toutes les données IPV (je l'ai mesuré 26 secondes de cette façon)

modifier: la le design est très léger, le design n'a que deux images, un fichier css externe, et deux fichiers javascript externes.

En outre, le numéro 26 secondes vient du moniteur réseau Firebug en cours d'exécution sur une machine qui était sur le même réseau local que le serveur

Répondre

2

Personnellement, j'opter pour la deuxième méthode que vous mentionnez. La première fois que vous vous connectez, vous pouvez interroger chacun des services de manière asynchrone, en montrant à l'utilisateur une sorte d'activité/barre d'état pendant que les processus sont en cours d'exécution. Vous pouvez ensuite remplir la page lorsque vous obtenez les résultats de chacun des services.

Vous pouvez ensuite mettre en cache les résultats de ces appels par utilisateur de sorte que vous n'ayez pas besoin d'appeler les API à chaque fois. Cela allège la charge de vos serveurs, charge votre page rapidement et fournit à l'utilisateur des indications sur son activité (ainsi que des mises à jour incrémentielles de la page au fur et à mesure du chargement de son contenu). Je pense que ceux-ci s'ajoutent à la meilleure expérience utilisateur que vous pouvez fournir.

Questions connexes