mirror of
https://github.com/roundcube/roundcubemail.git
synced 2026-03-20 06:46:58 +01:00
- Added general rcube_cache class with memcache support
- Improved caching performance by skipping writes of unchanged data - Option enable_caching replaced by imap_cache and messages_cache options
This commit is contained in:
@@ -122,6 +122,7 @@ class rcmail
|
||||
|
||||
private $texts;
|
||||
private $address_books = array();
|
||||
private $caches = array();
|
||||
private $action_map = array();
|
||||
|
||||
|
||||
@@ -351,6 +352,24 @@ class rcmail
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize and get cache object
|
||||
*
|
||||
* @param string $name Cache identifier
|
||||
* @param string $type Cache type ('db' or 'memcache')
|
||||
*
|
||||
* @return rcube_cache Cache object
|
||||
*/
|
||||
public function get_cache($name, $type)
|
||||
{
|
||||
if (!isset($this->caches[$name])) {
|
||||
$this->caches[$name] = new rcube_cache($type, $_SESSION['user_id'], $name.'.');
|
||||
}
|
||||
|
||||
return $this->caches[$name];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return instance of the internal address book class
|
||||
*
|
||||
@@ -531,14 +550,22 @@ class rcmail
|
||||
if (is_object($this->imap))
|
||||
return;
|
||||
|
||||
$this->imap = new rcube_imap($this->db);
|
||||
$this->imap = new rcube_imap();
|
||||
$this->imap->debug_level = $this->config->get('debug_level');
|
||||
$this->imap->skip_deleted = $this->config->get('skip_deleted');
|
||||
|
||||
// enable caching of imap data
|
||||
if ($this->config->get('enable_caching')) {
|
||||
$this->imap->set_caching(true);
|
||||
$imap_cache = $this->config->get('imap_cache');
|
||||
$messages_cache = $this->config->get('messages_cache');
|
||||
// for backward compatybility
|
||||
if ($imap_cache === null && $messages_cache === null && $this->config->get('enable_caching')) {
|
||||
$imap_cache = 'db';
|
||||
$messages_cache = true;
|
||||
}
|
||||
if ($imap_cache)
|
||||
$this->imap->set_caching($imap_cache);
|
||||
if ($messages_cache)
|
||||
$this->imap->set_messages_caching(true);
|
||||
|
||||
// set pagesize from config
|
||||
$this->imap->set_pagesize($this->config->get('pagesize', 50));
|
||||
@@ -1116,6 +1143,11 @@ class rcmail
|
||||
$book->close();
|
||||
}
|
||||
|
||||
foreach ($this->caches as $cache) {
|
||||
if (is_object($cache))
|
||||
$cache->close();
|
||||
}
|
||||
|
||||
if (is_object($this->imap))
|
||||
$this->imap->close();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user