2009-05-19 3 views
0

Я создаю сайт с django, который позволяет пользователям перемещать контент между кучей фотоуслуг. Как вы можете себе представить, приложение делает много апи-хитов.Ускорение загрузки страниц при использовании внешних API

например: пользователь подключает picasa, flickr, photobucket и facebook к своей учетной записи. Теперь нам нужно вывести контент из 4-х разных apis, чтобы обновлять данные этих пользователей.

сейчас у меня есть функция, которая обновляет каждый api, и я запускаю их все одновременно с помощью потоковой передачи. (все api, которые не включены, возвращают false во второй строке, нет, это не так много накладных расходов, чтобы запускать их все).

Вот мой вопрос:

Что является лучшей стратегией для поддержания контента в актуальном состоянии с использованием этих интерфейсов API?

У меня есть две идеи, которые могли бы работать:

  1. Update API-интерфейсы периодически (например, хрон) и все, что мы имеем в то время, является то, что получает пользователь.

    преимущества:

    • Это легко и просто осуществить.
    • У нас всегда будут хорошие данные, когда пользователь загружает свою первую страницу.

    подводные камни:

    • мы должны сделать апи хиты все время для пользователей, которые не являются активными, что тратит много трафика
    • Это, вероятно, сделать поставщиков API несчастными
  2. Trigger обновления при входе пользователя в систему (на вол eload)

    преимущество:

    • мы экономим кучу пропускной способности и работать с меньшим риском пишут поставщик API
    • не требует почти количества ресурсов на наших серверах

    подводные камни:

    • мы либо должны сделать обновление асинхронно (и не будем иметь ничего на первом входе) или ...
    • первая страница будет занимать очень много времени, чтобы загрузить, потому что мы получать все данные API (Я измерил 26 секунд таким образом)

редактировать: дизайн очень легкий, дизайн имеет только два изображения, внешний файл css и два внешних файла javascript.

Кроме того, число 26 секунд происходит от поджигатель сетевого монитора, работающего на машине, которая находилась на той же локальной сети, что и сервер

ответ

2

Лично я выбрал бы второй метод вы упоминаете. При первом входе в систему вы можете запросить каждую из служб асинхронно, показывая пользователю какую-либо панель активности/состояния во время работы процессов. Затем вы можете заполнить страницу, когда получаете результаты от каждой из служб.

После этого вы можете кэшировать результаты этих вызовов для каждого пользователя, чтобы вам не приходилось каждый раз называть apis.

Это облегчает нагрузку на ваши серверы, быстро загружает вашу страницу и предоставляет пользователю некоторые указания на активность (наряду с вредоносными обновлениями страницы при загрузке их содержимого). Я думаю, что они соответствуют лучшему пользовательскому опыту, который вы можете предоставить.

Смежные вопросы