Browse Source

Cache SCSS dependency file in memcache

Since reading a file from disks can be costly. Lets store the dependency
json also in memcache.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
tags/v12.0.0beta1
Roeland Jago Douma 7 years ago
parent
commit
e3925ba2a1
No account linked to committer's email address

+ 20
- 8
lib/private/Template/SCSSCacher.php View File

@@ -30,6 +30,7 @@ use OCP\Files\IAppData;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OCP\Files\SimpleFS\ISimpleFolder;
use OCP\ICache;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IURLGenerator;
@@ -51,23 +52,29 @@ class SCSSCacher {
/** @var string */
protected $serverRoot;

/** @var ICache */
protected $depsCache;

/**
* @param ILogger $logger
* @param IAppData $appData
* @param IURLGenerator $urlGenerator
* @param SystemConfig $systemConfig
* @param IConfig $config
* @param string $serverRoot
* @param ICache $depsCache
*/
public function __construct(ILogger $logger,
IAppData $appData,
IURLGenerator $urlGenerator,
IConfig $config,
$serverRoot) {
$serverRoot,
ICache $depsCache) {
$this->logger = $logger;
$this->appData = $appData;
$this->urlGenerator = $urlGenerator;
$this->config = $config;
$this->serverRoot = $serverRoot;
$this->depsCache = $depsCache;
}

/**
@@ -94,7 +101,7 @@ class SCSSCacher {
$folder = $this->appData->newFolder($app);
}

if($this->isCached($fileNameCSS, $fileNameSCSS, $folder, $path)) {
if($this->isCached($fileNameCSS, $folder)) {
return true;
}
return $this->cache($path, $fileNameCSS, $fileNameSCSS, $folder, $webDir);
@@ -103,17 +110,22 @@ class SCSSCacher {
/**
* Check if the file is cached or not
* @param string $fileNameCSS
* @param string $fileNameSCSS
* @param ISimpleFolder $folder
* @param string $path
* @return boolean
*/
private function isCached($fileNameCSS, $fileNameSCSS, ISimpleFolder $folder, $path) {
private function isCached($fileNameCSS, ISimpleFolder $folder) {
try {
$cachedFile = $folder->getFile($fileNameCSS);
if ($cachedFile->getSize() > 0) {
$depFile = $folder->getFile($fileNameCSS . '.deps');
$deps = json_decode($depFile->getContent(), true);
$depFileName = $fileNameCSS . '.deps';
$deps = $this->depsCache->get($folder->getName() . '-' . $depFileName);
if ($deps === null) {
$depFile = $folder->getFile($depFileName);
$deps = $depFile->getContent();
//Set to memcache for next run
$this->depsCache->set($folder->getName() . '-' . $depFileName, $deps);
}
$deps = json_decode($deps, true);

foreach ($deps as $file=>$mtime) {
if (!file_exists($file) || filemtime($file) > $mtime) {

+ 4
- 1
lib/private/TemplateLayout.php View File

@@ -213,12 +213,15 @@ class TemplateLayout extends \OC_Template {
$theme = \OC_Util::getTheme();

if($compileScss) {
/** @var \OC\Memcache\Factory $cache */
$cache = \OC::$server->query('MemCacheFactory');
$SCSSCacher = new SCSSCacher(
\OC::$server->getLogger(),
\OC::$server->getAppDataDir('css'),
\OC::$server->getURLGenerator(),
\OC::$server->getConfig(),
\OC::$SERVERROOT
\OC::$SERVERROOT,
$cache->createLocal('SCSS')
);
} else {
$SCSSCacher = null;

+ 4
- 2
tests/lib/Template/SCSSCacherTest.php View File

@@ -28,6 +28,7 @@ use OCP\Files\IAppData;
use OCP\Files\NotFoundException;
use OCP\Files\SimpleFS\ISimpleFile;
use OCP\Files\SimpleFS\ISimpleFolder;
use OCP\ICache;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IURLGenerator;
@@ -57,7 +58,8 @@ class SCSSCacherTest extends \Test\TestCase {
$this->appData,
$this->urlGenerator,
$this->config,
\OC::$SERVERROOT
\OC::$SERVERROOT,
$this->createMock(ICache::class)
);
}

@@ -275,4 +277,4 @@ class SCSSCacherTest extends \Test\TestCase {
}


}
}

Loading…
Cancel
Save