]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add cache for getStorage and getInternalPath functions.
authorBart Visscher <bartv@thisnet.nl>
Fri, 8 Jun 2012 18:47:11 +0000 (20:47 +0200)
committerBart Visscher <bartv@thisnet.nl>
Tue, 19 Jun 2012 21:13:24 +0000 (23:13 +0200)
These are called for almost every file operation.

lib/filesystemview.php

index b62bb82c699a5907f19e500e66e114042687d891..93fce38af41d66269fcd5d8df1c7c5946cdf1fa3 100644 (file)
@@ -23,6 +23,8 @@
 
 class OC_FilesystemView {
        private $fakeRoot='';
+       private $internal_path_cache=array();
+       private $storage_cache=array();
 
        public function __construct($root){
                $this->fakeRoot=$root;
@@ -67,7 +69,10 @@ class OC_FilesystemView {
        * @return bool
        */
        public function getInternalPath($path){
-               return OC_Filesystem::getInternalPath($this->getAbsolutePath($path));
+               if (!isset($this->internal_path_cache[$path])) {
+                       $this->internal_path_cache[$path] = OC_Filesystem::getInternalPath($this->getAbsolutePath($path));
+               }
+               return $this->internal_path_cache[$path];
        }
        /**
        * get the storage object for a path
@@ -75,7 +80,10 @@ class OC_FilesystemView {
        * @return OC_Filestorage
        */
        public function getStorage($path){
-               return OC_Filesystem::getStorage($this->getAbsolutePath($path));
+               if (!isset($this->storage_cache[$path])) {
+                       $this->storage_cache[$path] = OC_Filesystem::getStorage($this->getAbsolutePath($path));
+               }
+               return $this->storage_cache[$path];
        }
 
        /**