Ускорение загрузки страниц при использовании внешних API - PullRequest
0 голосов
/ 19 мая 2009

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

например: пользователь подключает Picasa, Flickr, Photobucket и Facebook к своей учетной записи. Теперь нам нужно вытащить контент из 4 различных API-интерфейсов, чтобы поддерживать актуальность данных пользователей.

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

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

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

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

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

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

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

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

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

    льготы :

    • мы экономим кучу пропускной способности и меньше рискуем разозлить провайдеров API
    • не требует НЕКОТОРОГО количества ресурсов на наших серверах

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

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

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

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

1 Ответ

2 голосов
/ 19 мая 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...