diff options
author | Robin Appelman <robin@icewind.nl> | 2018-07-24 17:30:39 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2018-07-24 17:30:39 +0200 |
commit | 6686ca9b2a222bc972252d86e39c7a0ced62f158 (patch) | |
tree | 8d90a043473b68b03e7aa3ab7a40238127a05544 /lib | |
parent | 7da815bb0403ebb072866b61779a84835b9a74b8 (diff) | |
download | nextcloud-server-6686ca9b2a222bc972252d86e39c7a0ced62f158.tar.gz nextcloud-server-6686ca9b2a222bc972252d86e39c7a0ced62f158.zip |
cache isCached state for scss resources
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Server.php | 3 | ||||
-rw-r--r-- | lib/private/Template/SCSSCacher.php | 48 |
2 files changed, 39 insertions, 12 deletions
diff --git a/lib/private/Server.php b/lib/private/Server.php index 0f406ebe9b7..5962012604a 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -965,7 +965,8 @@ class Server extends ServerContainer implements IServerContainer { $c->getThemingDefaults(), \OC::$SERVERROOT, $this->getMemCacheFactory(), - $c->query(IconsCacher::class) + $c->query(IconsCacher::class), + new TimeFactory() ); }); $this->registerService(JSCombiner::class, function (Server $c) { diff --git a/lib/private/Template/SCSSCacher.php b/lib/private/Template/SCSSCacher.php index 9dcedb94daf..6a41c4db8b9 100644 --- a/lib/private/Template/SCSSCacher.php +++ b/lib/private/Template/SCSSCacher.php @@ -32,6 +32,7 @@ use Leafo\ScssPhp\Compiler; use Leafo\ScssPhp\Exception\ParserException; use Leafo\ScssPhp\Formatter\Crunched; use Leafo\ScssPhp\Formatter\Expanded; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\Files\IAppData; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; @@ -77,6 +78,12 @@ class SCSSCacher { /** @var IconsCacher */ private $iconsCacher; + /** @var ICache */ + private $isCachedCache; + + /** @var ITimeFactory */ + private $timeFactory; + /** * @param ILogger $logger * @param Factory $appDataFactory @@ -86,6 +93,7 @@ class SCSSCacher { * @param string $serverRoot * @param ICacheFactory $cacheFactory * @param IconsCacher $iconsCacher + * @param ITimeFactory $timeFactory */ public function __construct(ILogger $logger, Factory $appDataFactory, @@ -94,7 +102,8 @@ class SCSSCacher { \OC_Defaults $defaults, $serverRoot, ICacheFactory $cacheFactory, - IconsCacher $iconsCacher) { + IconsCacher $iconsCacher, + ITimeFactory $timeFactory) { $this->logger = $logger; $this->appData = $appDataFactory->get('css'); $this->urlGenerator = $urlGenerator; @@ -103,7 +112,9 @@ class SCSSCacher { $this->serverRoot = $serverRoot; $this->cacheFactory = $cacheFactory; $this->depsCache = $cacheFactory->createDistributed('SCSS-' . md5($this->urlGenerator->getBaseUrl())); + $this->isCachedCache = $cacheFactory->createLocal('SCSS-cached-' . md5($this->urlGenerator->getBaseUrl())); $this->iconsCacher = $iconsCacher; + $this->timeFactory = $timeFactory; } /** @@ -124,14 +135,7 @@ class SCSSCacher { $path = implode('/', $path); $webDir = $this->getWebDir($path, $app, $this->serverRoot, \OC::$WEBROOT); - try { - $folder = $this->appData->getFolder($app); - } catch (NotFoundException $e) { - // creating css appdata folder - $folder = $this->appData->newFolder($app); - } - - if (!$this->variablesChanged() && $this->isCached($fileNameCSS, $folder)) { + if (!$this->variablesChanged() && $this->isCached($fileNameCSS, $app)) { // Inject icons vars css if any if ($this->iconsCacher->getCachedCSS() && $this->iconsCacher->getCachedCSS()->getSize() > 0) { $this->iconsCacher->injectCss(); @@ -139,6 +143,13 @@ class SCSSCacher { return true; } + try { + $folder = $this->appData->getFolder($app); + } catch (NotFoundException $e) { + // creating css appdata folder + $folder = $this->appData->newFolder($app); + } + $cached = $this->cache($path, $fileNameCSS, $fileNameSCSS, $folder, $webDir); // Inject icons vars css if any @@ -164,10 +175,24 @@ class SCSSCacher { /** * Check if the file is cached or not * @param string $fileNameCSS - * @param ISimpleFolder $folder + * @param string $app * @return boolean */ - private function isCached(string $fileNameCSS, ISimpleFolder $folder) { + private function isCached(string $fileNameCSS, string $app) { + $key = $this->config->getSystemValue('version') . '/' . $app . '/' . $fileNameCSS; + if (!$this->config->getSystemValue('debug') && $cacheValue = $this->isCachedCache->get($key)) { + if ($cacheValue > $this->timeFactory->getTime()) { + return true; + } + } + + try { + $folder = $this->appData->getFolder($app); + } catch (NotFoundException $e) { + // creating css appdata folder + $folder = $this->appData->newFolder($app); + } + try { $cachedFile = $folder->getFile($fileNameCSS); if ($cachedFile->getSize() > 0) { @@ -187,6 +212,7 @@ class SCSSCacher { } } + $this->isCachedCache->set($key, $this->timeFactory->getTime() + 5 * 60); return true; } |