Drupal 6 模块创建页面缓存?
这应该是一个非常简单的问题,但我发现很难找到答案 我正在使用hook_菜单创建自定义页面,该菜单具有静态内容和动态方面(主要来自sql查询和视图嵌入等)。我的问题是,drupal的缓存系统如何处理这些定制页面 我很担心,因为在某些情况下,随着流量的增加,我觉得我需要对这些页面的显示进行某种缓存控制,但在这一点上,我不知道它们是否自动被缓存,或者是否需要以某种方式向drupal指定我确实希望缓存它们Drupal 6 模块创建页面缓存?,drupal-6,Drupal 6,这应该是一个非常简单的问题,但我发现很难找到答案 我正在使用hook_菜单创建自定义页面,该菜单具有静态内容和动态方面(主要来自sql查询和视图嵌入等)。我的问题是,drupal的缓存系统如何处理这些定制页面 我很担心,因为在某些情况下,随着流量的增加,我觉得我需要对这些页面的显示进行某种缓存控制,但在这一点上,我不知道它们是否自动被缓存,或者是否需要以某种方式向drupal指定我确实希望缓存它们 澄清一下,这些页面不是管理员页面,但任何人都可以访问。只有当菜单回调返回输出时,才会缓存菜单回调的
澄清一下,这些页面不是管理员页面,但任何人都可以访问。只有当菜单回调返回输出时,才会缓存菜单回调的结果;当菜单回调打印输出时,它不会被缓存 请求页面时引导Drupal执行的代码如下:
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$return = menu_execute_active_handler();
// Menu status constants are integers; page content is a string.
if (is_int($return)) {
switch ($return) {
case MENU_NOT_FOUND:
drupal_not_found();
break;
case MENU_ACCESS_DENIED:
drupal_access_denied();
break;
case MENU_SITE_OFFLINE:
drupal_site_offline();
break;
}
}
elseif (isset($return)) {
// Print any value (including an empty string) except NULL or undefined:
print theme('page', $return);
}
drupal_page_footer();
drupal\u page\u footer()
是缓存结果的函数
function drupal_page_footer() {
if (variable_get('cache', CACHE_DISABLED) != CACHE_DISABLED) {
page_set_cache();
}
module_invoke_all('exit');
}
page\u set\u cache()
是执行实际工作的函数
function page_set_cache() {
global $user, $base_root;
if (!$user->uid && $_SERVER['REQUEST_METHOD'] == 'GET' && page_get_cache(TRUE)) {
// This will fail in some cases, see page_get_cache() for the explanation.
if ($data = ob_get_contents()) {
if (variable_get('page_compression', TRUE) && extension_loaded('zlib')) {
$data = gzencode($data, 9, FORCE_GZIP);
}
ob_end_flush();
cache_set($base_root . request_uri(), $data, 'cache_page', CACHE_TEMPORARY, drupal_get_headers());
}
}
}
压缩内容(如果启用了zlib
),并将其保存在缓存中
如果希望缓存自定义菜单回调的输出,则只需返回输出,而不是直接打印输出
function mymodule_callback() {
// …
return $output;
}
您可以缓存模块用于构建其输出的数据,而不是缓存页面的输出。例如,如果输出数据是通过SQL查询获得的,则可以缓存查询结果。感谢Kiamaluno提供的所有信息。我返回的是输出,而不是直接打印,所以如果我理解正确,这意味着我的页面输出正在被缓存——当然,一旦我打开缓存。对吗?页面缓存仅用于匿名用户(这就是为什么
page\u set\u cache()
检查$user->uid
),用于使用GET请求的页面,并且如果没有使用drupal\u set\u message()
设置消息。如果页面包含一个使用表单API创建的表单,那么它将被另一个缓存使用。信不信由你,即使你已经用了这么多的词向我解释了这一点,谢谢你。顺便说一句,我仍然不能完全确定我问的问题的答案是否是“是”。在我看来,答案越来越像是肯定的,但我真的希望你能直接出来说是或不是。再次感谢。它是缓存的,但只针对匿名用户。