Drupal 6 模块创建页面缓存?

Drupal 6 模块创建页面缓存?,drupal-6,Drupal 6,这应该是一个非常简单的问题,但我发现很难找到答案 我正在使用hook_菜单创建自定义页面,该菜单具有静态内容和动态方面(主要来自sql查询和视图嵌入等)。我的问题是,drupal的缓存系统如何处理这些定制页面 我很担心,因为在某些情况下,随着流量的增加,我觉得我需要对这些页面的显示进行某种缓存控制,但在这一点上,我不知道它们是否自动被缓存,或者是否需要以某种方式向drupal指定我确实希望缓存它们 澄清一下,这些页面不是管理员页面,但任何人都可以访问。只有当菜单回调返回输出时,才会缓存菜单回调的

这应该是一个非常简单的问题,但我发现很难找到答案

我正在使用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创建的表单,那么它将被另一个缓存使用。信不信由你,即使你已经用了这么多的词向我解释了这一点,谢谢你。顺便说一句,我仍然不能完全确定我问的问题的答案是否是“是”。在我看来,答案越来越像是肯定的,但我真的希望你能直接出来说是或不是。再次感谢。它是缓存的,但只针对匿名用户。