Avoid SCSS compilation if not needed

Now we do on each template load a compile with the SCSS variables to see
if they changed or not. However there is no real reason for this if the
variables didn't change.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2020-11-06 11:26:53 +01:00
parent 2c6bbe783a
commit cd849db8be
No known key found for this signature in database
GPG Key ID: F941078878347C0C
1 changed files with 13 additions and 3 deletions

View File

@ -283,8 +283,9 @@ class SCSSCacher {
* @return bool
*/
private function variablesChanged(): bool {
$injectedVariables = $this->getInjectedVariables();
if ($this->config->getAppValue('core', 'theming.variables') !== md5($injectedVariables)) {
$cachedVariables = $this->config->getAppValue('core', 'theming.variables', '');
$injectedVariables = $this->getInjectedVariables($cachedVariables);
if ($cachedVariables !== md5($injectedVariables)) {
$this->logger->debug('SCSSCacher::variablesChanged storedVariables: ' . json_encode($this->config->getAppValue('core', 'theming.variables')) . ' currentInjectedVariables: ' . json_encode($injectedVariables), ['app' => 'scss_cacher']);
$this->config->setAppValue('core', 'theming.variables', md5($injectedVariables));
$this->resetCache();
@ -411,7 +412,7 @@ class SCSSCacher {
/**
* @return string SCSS code for variables from OC_Defaults
*/
private function getInjectedVariables(): string {
private function getInjectedVariables(string $cache = ''): string {
if ($this->injectedVariables !== null) {
return $this->injectedVariables;
}
@ -420,6 +421,15 @@ class SCSSCacher {
$variables .= '$' . $key . ': ' . $value . ' !default;';
}
/*
* If we are trying to return the same variables as that are cached
* Then there is no need to do the compile step
*/
if ($cache === md5($variables)) {
$this->injectedVariables = $variables;
return $variables;
}
// check for valid variables / otherwise fall back to defaults
try {
$scss = new Compiler();