Существует два основных способа кэширования в ColdFusion: в CFML и в настройках в Административной оболочке ColdFusion. В CFML вы можете производить кэширование на уровне запросов или на уровне страницы. На уровне запросов вы можете использовать атрибуты cachedwithin или cachedafter тега cfqeury. На уровне страницы следует использовать тег cfcache. В Административной оболочке ColdFusion есть 3 настройки, относящиеся к кэшированию. Все эти темы будут рассмотрены в этой статье.
Кэширование на уровне запроса
Наверняка большую часть времени обработки вашей страницы занимают запросы к базе данных, т.к. в это время задействованы дополнительные ресурсы для соединения с базой данных и работы с ее содержимым. Чтобы избежать постоянных запросов к базе данных, следует использовать кэшированные запросы, которые сохранены в памяти ColdFusion сервера.
Хорошие кандидаты для кэширования - это запросы, которые:преимущества | недостатки |
|
|
Использование атрибута cachedwithin
Атрибут cachedwithin указывает период времени, в течении которого запрос будет кэширован. Следующий запрос использует одни и те же данные в течении одного дня, пока эти данные не будут обновлены в базе данных:
Заметьте: Синтаксис функции CreateTimeSpan() такой: CreateTimeSpan(дни, часы, минуты, секунды).Когда вы кэшируете запрос, то затем можете обращаться к нему, используя тот же синтаксис запроса, соблюдая следующие правила:
SQL Queries qCountry (Datasource=devnet, Time=0ms, Records=9, Cached Query) in C:\CFusionMX\wwwroot\devnet_cache_development\cachedwithin.cfm @ 05:12:48.048 SELECT Country_ID, Country_Name FROM Country ORDER BY Country_Name ASCОбратите внимание, что время выполнения запроса изменилось с 110 миллисекунд до 0, а также было определено, что запрос кэширован. ColdFusion кэширует этот запрос на одни день (как указано в функции CreateTimeSpan()). После того, как время кэширования пройдет, пользователю снова придется немного подождать, пока запрос будет снова выполнен и кэширован.
Использование атрибута cachedafter
Используйте атрибут cachedafter тогда, когда вам нужно обновлять кэш каждый день в определенное время. Если большие объемы данных записываются в базу данных каждый день с 24 до 2 часов ночи, то вы можете обновлять кэш каждый день в 2 часа ночи и использовать его весь день до 24 часов.
С атрибутом cachedafter обычно используются следующие функции:Обновление кэша и показ новых данных
Вы можете в любой момент обновить кэшированный запрос, указав нули в функции CreateTimeSpan():
Ограничение количества кэшируемых запросов
В Административной оболочке ColdFusion вы можете управлять общим количеством кэшируемых запросов. Для этого вам нужно открыть раздел SETTINGS/Caching и вы увидите такое поле для ввода настроек:
Обратите внимание, что эта настройка не управляет размером памяти, выделяемой для кэшированных запросов. Если ColdFusion достигнет максимального количества кэшируемых запросов, то он удалит самый старый запрос, тем самым, освобождая место для нового запроса.Кэширование отображаемых данных
Еще одна стратегия кэширования в ColdFusion - избегать того, чтобы ColdFusion много раз делал одну и ту же работу. В ColdFusion есть механизм, который позволяет кэшировать страницы, вместо того, чтобы каждый раз динамически их обрабатывать. После того, как ColdFusion создаст для CFML страницы правильный HTML, вы можете сохранить эту HTML страницу и возвращать ее браузеру вместо того, чтобы обрабатывать CFML страницу.
Использование тега cfcache
Если вам нужно кэшировать определенную страницу, используйте тег cfcache. Когда вы используете этот тег для кэширования на стороне сервера, то ColdFusion сохраняет полученный HTML код и использует его при последующих запросах к той же странице. Например, посмотрите на следующий CFML код:
Он создает кешированный файл, который выглядит так: Как видите, кэшированная страница содержит комментарий, который указывает, что эта страница кэширована, а также содержит HTML код, сгенерированный ColdFusion. Теперь ColdFusion может возвращать уже созданную HTML страниц вместо того, чтобы динамически создавать ее снова и снова.Рассмотрим тег cfcache подробнее
Тег cfcache имеет несколько атрибутов. Два из них вы уже заметили в приведенном выше примере - это action и timespan. Атрибут action может иметь следующие значения:
Кэширование на стороне сервера
Когда ColdFusion обрабатывает тег cfcache с атрибутом action="servercache", то происходят следующие действия:
Кэширование на стороне клиента
Более эффективным будет использование уже запрашиваемой страницы на стороне клиента, а не на стороне сервера, т.к. это снимает нагрузку с ColdFusion сервера. Чтобы включить кэширование на стороне клиента, следует в теге cfcache указать атрибут со значением cache (кэширование на стороне сервера и клиента) или optimal (то же, что и cache) или clientcache, т.к. любое из этих значений подразумевают кэширование на стороне клиента.
Кэширование на стороне сервера осуществляется с помощью стандартного механизма HTTP кэширования, поддерживаемого веб серверами и браузерами. Большинство браузеров хранят кэш недавно посещенных страниц и HTTP протокол дает знать, когда следует использовать кэшированные данные вместо того, чтобы еще раз запрашивать их с сервера. Веб сервера обычно автоматически кэшируют статические файлы типа HTML, JPEG и т.д., просматривая дату их последнего изменения. Тег cfcache делает возможным кэшировать динамические CFML файлы. Когда кэширование на стороне клиента включено, ColdFusion добавляет к HTTP ответу заголовок "Last-Modified". Браузер отмечает свой кэш этого файла датой, указанной в заголовке "Last-Modified". Затем, когда он в следующий раз запросит этот адрес, он добавит к HTTP запросу заголовок "If-Modified-Since" с указанной ранее датой.Тег cfcache проверяет 3 следующих условия:
Указываем продолжительность кэширования файла
Продолжительность кэширования файла можно указать в атрибуте timespan. В этом атрибуте следует использовать функцию CreateTimeSpan(), синтаксис которой такой: CreateTimeSpan(дни, часы, минуты, секунды).
Обновляем кэшированные страницы
Если вы хотите вручную обновить кэшированные страницы, то это возможно, выполнив следующий код:
Такое действие удалит все файлы вида cfcache_HASH.tmp. Если вы не используете атрибут directory, то будут удалены файлы в каталоге C:\CFusionMX\cache. Если же вы укажите определенную директорию, то файлы будут удалены именно в ней.Если вы хотите обновить определенный файл, используйте атрибут action="flush" в сочетании с атрибутом expireurl. Таким образом, если вы хотите очистить кэш ассоциированный с файлом cfcache1_example.cfm, то следует выполнить следующий код:
Данный пример использует полный путь к файлу, который был кэширован. Если при кэшировании вы указывали свой каталог для кэшированных файлов, то при обновлении кэша, также нужно указывать свой каталог.Ранее было показано, что тег cfcache для одной и то же страницы создает несколько файлов, если в эту страницу через адресную строку передаются разные параметры. Чтобы обновить весь кэш, ассоциированные с одной страницей, нужно выполнить следующий код:
Это действие удалит все файлы cfcache_test.cfm, в которые был передан параметр x, равный любому значению.Кэширование страниц ColdFusion
Перед первым просмотров ColdFusion страницы, CFML файл компилируется в Java класс и сохраняется на диск. Затем, этот файл компилируется только тогда, когда в нем будут сделаны изменения. Данный компилированный класс используется для создания HTML файла, который отправляется обратно пользователю. Вместо того, чтобы при каждом запросы страницы обращаться к компилированному Java классу, ColdFusion кэширует некоторые или все Java классы.
Есть две настройки, которые регулируют этот вид кэширования:Устанавливаем максимальное количество кэшированных Java классов
Чтобы убедиться в правильности настроек кэширования, сначала нужно посмотреть опцию "Template cache size (number of templates)", которая находится в Административной оболочке ColdFusion в разделе SETTINGS/Caching:
Эта опция указывает максимальное количество кэшированных Java классов. Если у вас достаточно памяти, то вы можете указать количество всех CFM файлов на сервере. Даже если число слишком большое, файлы не являются кэшированными до тех пор, пока сервер не запросит их.Включаем доверительное кэширование
По-умолчанию, перед тем как ColdFusion использует Java класс, потребуется немного времени, чтобы проверить, не был ли изменен оригинальный CFM файл с тех пор как был кэширован. Если у вас хорошо зарекомендованный сайт, который не подвергается изменениям, то нет смысла тратить время на эту проверку. Чтобы отключить эту проверку, вам нужно в Административной оболочке в разделе SETTINGS/Caching включить опцию "Trusted cache" - доверительное кэширование. Опция выглядит так:
Разумеется, если вы включите доверительное кэширование и сделаете обновление каких-то файлов, то вы не увидите новые файлы. Если вы хотите, чтобы обновленные файл снова были кэшированы, то проделайте следующее:Заключение
Кэширование напрямую влияет на производительность. Вы можете использовать кэширование запросов, чтобы повысить производительность в работе с базой данных, или с помощью тега cfcache, вы можете кэшировать обработанные CFML страницы и использовать кэш вместо того, чтобы снова и снова обрабатывать эти CFML страницы. В Административной оболочке ColdFusion вы можете регулировать настройки, которые относятся в целом ко всем компилированным файлам ColdFusion и запросам.
© 2002-2005 г. Вадим Пушкарев