PHP: мощь, стоящая за Web 2.0. Часть 2

Продолжение. Начало здесь.

В сегодняшней статье коснемся вопросов кэширования. Если вы хотите начать изучать php более углубленно, обратите внимание на бесплатный курс по PHP от автора проекта WebShake.RU, в котором в подробно разжеваны основы данного языка программирования.

Кэширование

Что касается кэширования, то первое, что мы делаем, это выясняем, получили ли мы последний кэш этого канала (см. текст feed.php, доступный онлайн там же). Так что мы не обременяем чрезмерно поставщиков услуг Интернета, мы кэшируем все, что поступает от них. Благодаря Zend_Cache кэширование выполняется просто.

Хотя не все кэши создаются одинаковыми. Поскольку наш канал может изменяться часто, мы выполняем кэширование на 15 минут. Как только мы выбрали ключевые слова для заданной статьи, есть вероятность того, что Yahoo не собирается изменять свое мнение о них, поэтому мы кэшируем их на 24 часа. Flickr, однако, может иметь новые загруженные картинки, которые более релевантны, чем те, что мы в настоящее время используем, так что мы кэшируем ответы Flickr на два часа.

Кэширование выполняет две важные вещи для нашего сервиса:

• Оно ускоряет приложение, поскольку обращения к другим сервисам дорогостоящие, требуют времени.

• Путем кэширования ответов на разумное время мы защищаем себя от отказов, возможных у партнеров. Поскольку мы выполняем чтение из кэша большую часть времени, если веб-узел партнера перестает отвечать на запросы или становится недоступным, наше приложение продолжает работать нормально. Если там была серьезная проблема, мы могли бы отключить автоматическую очистку Zend_Cache и удалять только старые элементы кэша один раз, когда истек срок его действия или когда мы знаем, что у нас есть новый элемент для замены старого. Это добавляет немного больше строк кода нашим классам Proxy, но в этом нет ничего ужасно сложного и того, что могло бы составить разницу между демонстрацией пользователям результатов и пустой страницей.

Если у нас нет адекватного кэша, код внутри оператора IF срабатывает, и мы выбираем текущий канал. Применяя класс Zend_Feed_RSS, мы приписываем ему значение с помощью унифицированного идентификатора ресурса URI данного канала. Так как нам не нужно все подряд в этом канале, мы создаем массив релевантных кусков его. Мы выбираем канал, поскольку у нас нет адекватного кэша, поэтому перед тем, как мы закончим, мы сохраняем этот массив в кэше для следующего запроса.

Во всех основанных на Proxy классах для этого проекта мы применяем хеш md5() в качестве идентификатора кэша (cache identifier). В случае кэша Feed мы применяем md5() от URL. Для ключевых слов мы хэшируем содержимое, используемое для генерации ключевых слов; для фотографий мы используем хэш ключевого слова, для которого мы запрашиваем фото. Класс ZendjCache требует, чтобы идентификатор кэша был только буквенно-цифровым. Применение md5() является быстрым способом обеспечить, что это правило соблюдается и что у нас есть уникальный и восстанавливаемый идентификатор.

Наконец, мы загружаем свойство response нашего класса Proxy вместе с массивом и передаем управление в точку вызова, так что данный сервис может возвращать его назад, в наш JavaScript.

Продолжение следует…

Энди Гатменс и Кэл Эванз

Похожее

Оставить комментарий

Поиск

Новости в картинках