? custom_breadcrumbs-cache.patch
Index: custom_breadcrumbs.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/custom_breadcrumbs/custom_breadcrumbs.module,v
retrieving revision 1.6.2.5.2.38
diff -u -p -r1.6.2.5.2.38 custom_breadcrumbs.module
--- custom_breadcrumbs.module	22 May 2010 20:54:21 -0000	1.6.2.5.2.38
+++ custom_breadcrumbs.module	25 May 2010 17:53:15 -0000
@@ -611,6 +611,7 @@ function theme_custom_breadcrumbs_help_i
  *    otherwise a single breadcrumb object is be returned.
  */
 function custom_breadcrumbs_load_breadcrumbs($module, $table = NULL, $param = array(), $languages = array()) {
+  static $breadcrumbs_cache = array();
   $breadcrumbs = array();
   $bc_info = module_invoke($module, 'cb_breadcrumb_info');
   foreach ($bc_info as $info) {
@@ -634,13 +635,20 @@ function custom_breadcrumbs_load_breadcr
         $sql .= "language IN (".  db_placeholders($languages, 'text') .") ORDER BY language ASC";
         $args = array_merge($args, $languages);
       }
-      $result = db_query($sql, $args);
-      while ($breadcrumb = db_fetch_object($result)) {
-        if (!isset($breadcrumb->name)) {
-          $breadcrumb->name = (isset($info['name_constructor'])) ? $info['name_constructor']($breadcrumb) : $breadcrumb->$info['field'];
+
+      $ckey = "{$info['table']}-{$cond}-".implode('_', $languages);
+      if (isset($breadcrumbs_cache[$ckey])) {
+        $breadcrumbs = $breadcrumbs_cache[$ckey];
+      } else {
+        $result = db_query($sql, $args);
+        while ($breadcrumb = db_fetch_object($result)) {
+          if (!isset($breadcrumb->name)) {
+            $breadcrumb->name = (isset($info['name_constructor'])) ? $info['name_constructor']($breadcrumb) : $breadcrumb->$info['field'];
+          }
+          $breadcrumb->breadcrumb_type = $info['type'];
+          $breadcrumbs[] = $breadcrumb;
         }
-        $breadcrumb->breadcrumb_type = $info['type'];
-        $breadcrumbs[] = $breadcrumb;
+        $breadcrumbs_cache[$ckey] = $breadcrumbs;
       }
     }
   }
@@ -706,8 +714,13 @@ function _custom_breadcrumbs_load_all_br
  * This function uses the same approach as in the menu_breadcrumb module.
  */
 function custom_breadcrumbs_set_menu_breadcrumb() {
+  static $menu_id_cache = array();
   $menu_item = menu_get_item();
-  $menu_link = menu_link_load(db_result(db_query("SELECT mlid FROM {menu_links} WHERE link_path = '%s'", $menu_item['href'])));
+  $ckey = $menu_item['href'];
+  if (!isset($menu_id_cache[$ckey])) {
+    $menu_id_cache[$ckey] = db_result(db_query("SELECT mlid FROM {menu_links} WHERE link_path = '%s'", $menu_item['href']));
+  }
+  $menu_link = menu_link_load($menu_id_cache[$ckey]);
   $use_menu = $menu_link['menu_name'];
   $menus =  variable_get('custom_breadcrumbs_menu_list', array() );
   if (in_array($use_menu, $menus)) {
