В друпале есть два типа кэширования страниц:
1. страницы кэшируются на определённое время
2. страницы кэшируются до первой очистки кэша
На большинстве не очень посещаемых сайтах есть смысл использовать только второй тип кэширования (про boost пока не говорим). Т.е. анонимные посетители будут видеть всегда актуальную информацию взятую из кэша. Кэш же будет сбрасываться при первой активности авторизованного пользователя (например при создании/обновлении ноды) или при очистке.
Всё бы хорошо, но единственная неприятность, что при запуске крона вызывается та самая очистка кэша. И если крон запускается раз в день, то страницы будут храниться в кэше максимум день, что в общем то не совсем рационально.
Вот такой хитрый ход позволяет запретить удаление закэшированных страниц при автоматическом запуске крона:
/**
* Implements of hook_cron().
*/
function mymodule_cron() {
if (strpos(request_uri(), 'cron.php')) {
if (!db_table_exists('cache_page_temp')) {
$schema = drupal_get_schema('cache_page');
db_rename_table('cache_page', 'cache_page_temp');
db_create_table('cache_page', $schema);
}
drupal_register_shutdown_function('mymodule_restore_cache_page');
}
}
/**
* Shutdown function for cron cleanup.
*/
function mymodule_restore_cache_page() {
db_drop_table('cache_page');
db_rename_table('cache_page_temp', 'cache_page');
}
Плюс нужно отключить запуск крона средствами друпала (admin/config/system/cron) и возложить эту обязанность на кронтаб.
Теперь если на сайте не было никаких изменений, то страницы могут жить в кэше вечно :)
Написанное актуально для
Drupal 7