Inject memoryCache into Autoloader. Remove recursion-prevention hack.
This commit is contained in:
parent
cadd71ec8a
commit
eb6637682e
|
@ -15,6 +15,12 @@ class Autoloader {
|
||||||
|
|
||||||
private $classPaths = array();
|
private $classPaths = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Optional low-latency memory cache for class to path mapping.
|
||||||
|
* @var \OC\Memcache\Cache
|
||||||
|
*/
|
||||||
|
protected $memoryCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a custom prefix to the autoloader
|
* Add a custom prefix to the autoloader
|
||||||
*
|
*
|
||||||
|
@ -112,44 +118,39 @@ class Autoloader {
|
||||||
* @param string $class
|
* @param string $class
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected $memoryCache = null;
|
|
||||||
protected $constructingMemoryCache = true; // hack to prevent recursion
|
|
||||||
public function load($class) {
|
public function load($class) {
|
||||||
// Does this PHP have an in-memory cache? We cache the paths there
|
$pathsToRequire = null;
|
||||||
if ($this->constructingMemoryCache && !$this->memoryCache) {
|
|
||||||
$this->constructingMemoryCache = false;
|
|
||||||
try {
|
|
||||||
$this->memoryCache = \OC\Memcache\Factory::createLowLatency('Autoloader');
|
|
||||||
} catch(\Exception $ex) {
|
|
||||||
// no caching then - fine with me
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($this->memoryCache) {
|
if ($this->memoryCache) {
|
||||||
$pathsToRequire = $this->memoryCache->get($class);
|
$pathsToRequire = $this->memoryCache->get($class);
|
||||||
if (is_array($pathsToRequire)) {
|
|
||||||
foreach ($pathsToRequire as $path) {
|
|
||||||
require_once $path;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use the normal class loading path
|
if (!is_array($pathsToRequire)) {
|
||||||
$paths = $this->findClass($class);
|
// No cache or cache miss
|
||||||
if (is_array($paths)) {
|
|
||||||
$pathsToRequire = array();
|
$pathsToRequire = array();
|
||||||
foreach ($paths as $path) {
|
foreach ($this->findClass($class) as $path) {
|
||||||
if ($fullPath = stream_resolve_include_path($path)) {
|
$fullPath = stream_resolve_include_path($path);
|
||||||
require_once $fullPath;
|
if ($fullPath) {
|
||||||
$pathsToRequire[] = $fullPath;
|
$pathsToRequire[] = $fullPath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save in our memory cache
|
|
||||||
if ($this->memoryCache) {
|
|
||||||
$this->memoryCache->set($class, $pathsToRequire, 60); // cache 60 sec
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->memoryCache) {
|
||||||
|
$this->memoryCache->set($class, $pathsToRequire, 60); // cache 60 sec
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($pathsToRequire as $fullPath) {
|
||||||
|
require_once $fullPath;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets the optional low-latency cache for class to path mapping.
|
||||||
|
* @param \OC\Memcache\Cache $memoryCache Instance of memory cache.
|
||||||
|
*/
|
||||||
|
public function setMemoryCache(\OC\Memcache\Cache $memoryCache) {
|
||||||
|
$this->memoryCache = $memoryCache;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -371,6 +371,11 @@ class OC {
|
||||||
// register autoloader
|
// register autoloader
|
||||||
require_once __DIR__ . '/autoloader.php';
|
require_once __DIR__ . '/autoloader.php';
|
||||||
self::$loader = new \OC\Autoloader();
|
self::$loader = new \OC\Autoloader();
|
||||||
|
spl_autoload_register(array(self::$loader, 'load'));
|
||||||
|
try {
|
||||||
|
self::$loader->setMemoryCache(\OC\Memcache\Factory::createLowLatency('Autoloader'));
|
||||||
|
} catch(\Exception $ex) {
|
||||||
|
}
|
||||||
self::$loader->registerPrefix('Doctrine\\Common', 'doctrine/common/lib');
|
self::$loader->registerPrefix('Doctrine\\Common', 'doctrine/common/lib');
|
||||||
self::$loader->registerPrefix('Doctrine\\DBAL', 'doctrine/dbal/lib');
|
self::$loader->registerPrefix('Doctrine\\DBAL', 'doctrine/dbal/lib');
|
||||||
self::$loader->registerPrefix('Symfony\\Component\\Routing', 'symfony/routing');
|
self::$loader->registerPrefix('Symfony\\Component\\Routing', 'symfony/routing');
|
||||||
|
@ -378,7 +383,6 @@ class OC {
|
||||||
self::$loader->registerPrefix('Sabre\\VObject', '3rdparty');
|
self::$loader->registerPrefix('Sabre\\VObject', '3rdparty');
|
||||||
self::$loader->registerPrefix('Sabre_', '3rdparty');
|
self::$loader->registerPrefix('Sabre_', '3rdparty');
|
||||||
self::$loader->registerPrefix('Patchwork', '3rdparty');
|
self::$loader->registerPrefix('Patchwork', '3rdparty');
|
||||||
spl_autoload_register(array(self::$loader, 'load'));
|
|
||||||
|
|
||||||
// set some stuff
|
// set some stuff
|
||||||
//ob_start();
|
//ob_start();
|
||||||
|
|
Loading…
Reference in New Issue