? views_segmented_cache.patch
Index: views.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/views.module,v
retrieving revision 1.332.2.8
diff -u -p -r1.332.2.8 views.module
--- views.module	25 Jun 2009 22:01:23 -0000	1.332.2.8
+++ views.module	7 Sep 2009 12:38:29 -0000
@@ -694,8 +694,16 @@ function views_get_plugin($type, $plugin
  */
 function &views_get_default_view($view_name) {
   $null = NULL;
-  $cache = views_discover_default_views();
 
+  // Attempt to load individually cached view from cache.
+  views_include('cache');
+  $data = views_cache_get("views_default:{$view_name}", TRUE);
+  if (isset($data->data) && is_object($data->data)) {
+    return $data->data;
+  }
+
+  // Otherwise, allow entire cache to be rebuilt.
+  $cache = views_discover_default_views();
   if (isset($cache[$view_name])) {
     return $cache[$view_name];
   }
Index: includes/cache.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/includes/cache.inc,v
retrieving revision 1.24.2.1
diff -u -p -r1.24.2.1 cache.inc
--- includes/cache.inc	1 Jun 2009 23:33:39 -0000	1.24.2.1
+++ includes/cache.inc	7 Sep 2009 12:38:29 -0000
@@ -100,11 +100,19 @@ function _views_discover_default_views()
   static $cache = NULL;
 
   if (!isset($cache)) {
-    $data = views_cache_get('views_default_views', TRUE);
+    $index = views_cache_get('views_default_views_index');
 
-    if (isset($data->data) && is_array($data->data)) {
-      $cache = $data->data;
+    // Retrieve each cached default view
+    if (isset($index->data) && is_array($index->data)) {
+      $cache = array();
+      foreach ($index->data as $view_name) {
+        $data = views_cache_get('views_default:' . $view_name, TRUE);
+        if (isset($data->data) && is_object($data->data)) {
+          $cache[$view_name] = $data->data;
+        }
+      }
     }
+    // If missing index, rebuild the cache
     else {
       views_include_default_views();
       $defaults = module_invoke_all('views_default_views');
@@ -122,7 +130,14 @@ function _views_discover_default_views()
       // Allow modules to modify default views before they are cached.
       drupal_alter('views_default_views', $cache);
 
-      views_cache_set('views_default_views', $cache, TRUE);
+      // Cache the index
+      $index = array_keys($cache);
+      views_cache_set('views_default_views_index', $index);
+
+      // Cache each view
+      foreach ($cache as $name => $view) {
+        views_cache_set('views_default:' . $name, $view, TRUE);
+      }
     }
   }
 
