Кэширование PHP и Javascript / Ajax для скорости загрузки - JSON и SimpleXML - PullRequest
1 голос
/ 05 июля 2011

У меня есть сайт, который получает контент с других сайтов с некоторыми JSON и XML API.Чтобы предотвратить проблемы с загрузкой и проблемы с ограничениями, я делаю следующее:

  1. PHP - Показать кэшированное содержимое с помощью PHP, если оно есть.
  2. PHP - Если никогда не кэшированное содержимое, показать пустойстраница ошибки и возврат 404. (При второй загрузке страницы все будет в порядке "success 200")
  3. Ajax - если поле даты не существует в базе данных или текущая дата раньше, чем сохраненная датазагрузить / добавить контент из API.Добавить будущую дату в базу данных.(Это ускоряет загрузку страницы, и Ajax кэширует содержимое ПОСЛЕ загрузки страницы).

Я использую Ajax только для запуска PHP-файла.Я получаю контент с помощью PHP.

Вопросы

  1. Поскольку я кеширую контент ПОСЛЕ его загрузки, пользователь увидит старый контент.Какой лучший способ показать новый контент пользователю.Я думаю, что автоматически с помощью Javascript перезагрузите страницу или сообщение.Другие предпочтительные способы?
  2. Если я использую очень много API: s время загрузки Ajax будет долгим, и это увеличит риск возникновения некоторой ошибки.Есть ли умный способ разделения нагрузки?

Второй вопрос - важный.

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Почему бы не использовать следующую структуру:

AJAX load content.php

И в content.php

  • проверить, загружен ли контент. да> проверить, если дата новая. да> вернуть контент
  • есть контент, но он старше> перезагрузить контент из внешнего> вернуть контент
  • нет содержимого> перезагрузить содержимое из внешнего> вернуть содержимое.

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

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

1 голос
/ 05 июля 2011

Поскольку я кеширую контент ПОСЛЕ того, как он был загружен, пользователь увидит старый контент.Какой лучший способ показать новый контент пользователю.Я думаю, что автоматически с помощью Javascript перезагрузите страницу или сообщение.Другие предпочтительные способы?

Я не думаю, что вам следует перезагрузить страницу через javascript, а просто использовать .load () Jquery.Таким образом, новый контент вставляется в DOM без перезагрузки всей страницы.Возможно, вы выделите недавно вставленный контент, добавив немного CSS с помощью addClass () .

Если я использую очень много API: s время загрузки Ajax будет долгим, и это увеличит рискчто какая-то ошибка возникнет.Есть ли умный способ разделения нагрузки?

Вы не должны разбивать содержимое в первую очередь.Вы должны попытаться минимизировать количество HTTP-запросов .Если возможно, вы должны выполнять все вызовы API в автономном режиме, используя какую-то очередь сообщений, например, beanstalkd, redis.Также кешируйте данные в базе данных в памяти, как, например, Redis.Вы можете получить бесплатный экземпляр Redis благодаря http://redistogo.com.. Для подключения к Redistogo вам, вероятно, следует использовать predis

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