#338184 by Damien Tournoud: don't avoid calling serialize(), because it is more efficient.

From: Damien Tournoud <damien@tournoud.net>


---

 includes/bootstrap.inc |   26 ++++++--------------------
 includes/registry.inc  |    8 ++++++--
 2 files changed, 12 insertions(+), 22 deletions(-)


diff --git includes/bootstrap.inc includes/bootstrap.inc
index 027b392..c0f86ba 100644
--- includes/bootstrap.inc
+++ includes/bootstrap.inc
@@ -1496,7 +1496,10 @@ function _registry_check_code($type, $name = NULL) {
   static $lookup_cache, $cache_update_needed;
 
   if (!isset($lookup_cache)) {
-    $lookup_cache = _registry_get_lookup_cache();
+    $lookup_cache = array();
+    if ($cache = cache_get('lookup_cache', 'cache_registry')) {
+      $lookup_cache = $cache->data;
+    }
   }
 
   // When we rebuild the registry, we need to reset this cache so
@@ -1511,7 +1514,7 @@ function _registry_check_code($type, $name = NULL) {
   // changes to the lookup cache for this request.
   if ($type == REGISTRY_WRITE_LOOKUP_CACHE) {
     if ($cache_update_needed) {
-      _registry_set_lookup_cache($lookup_cache);
+      cache_set('lookup_cache', $lookup_cache, 'cache_registry');
     }
     return;
   }
@@ -1575,24 +1578,7 @@ function _registry_set_lookup_cache(array $lookup_cache) {
   return cache_set('lookup_cache', implode(';', $key_value_pairs), 'cache_registry');
 }
 
-/**
- * Wrapper function to perform string to array conversion of lookup cache.
- */
-function _registry_get_lookup_cache() {
-  // In _registry_set_lookup_cache, we cache a string, not an array, to avoid
-  // serialize() in the cache system. serialize() makes a copy, and thus uses
-  // extra memory, which we are trying to avoid.
-  $lookup_cache = array();
-  if ($cache = cache_get('lookup_cache', 'cache_registry')) {
-    // Each item is separated by ';'.
-    foreach (explode(';', $cache->data) as $lookup) {
-      // Key value pairs are separated by '|'.
-      list($resource, $result) = explode('|', $lookup);
-      $lookup_cache[$resource] = $result;
-    }
-  }
-  return $lookup_cache;
-}
+
 
 /**
  * @} End of "ingroup registry".
diff --git includes/registry.inc includes/registry.inc
index 34c21de..958cdf6 100644
--- includes/registry.inc
+++ includes/registry.inc
@@ -72,7 +72,11 @@ function _registry_rebuild() {
   $parsed_files = _registry_parse_files($files);
 
   $unchanged_resources = array();
-  foreach (_registry_get_lookup_cache() as $key => $file) {
+  $lookup_cache = array();
+  if ($cache = cache_get('lookup_cache', 'cache_registry')) {
+    $lookup_cache = $cache->data;
+  }
+  foreach ($lookup_cache as $key => $file) {
     // If the file for this cached resource is carried over unchanged from
     // the last registry build, then we can safely re-cache it.
     if ($file && in_array($file, array_keys($files)) && !in_array($file, $parsed_files)) {
@@ -87,7 +91,7 @@ function _registry_rebuild() {
   // We have some unchanged resources, warm up the cache - no need to pay
   // for looking them up again.
   if (count($unchanged_resources) > 0) {
-    _registry_set_lookup_cache($unchanged_resources);
+    cache_set('lookup_cache', $unchanged_resources, 'cache_registry');
   }
 }
 
