From fdbc551f09a5b22284a058551094c1e80905e382 Mon Sep 17 00:00:00 2001 From: Benni Mack <benni@typo3.org> Date: Wed, 4 Aug 2021 21:25:32 +0200 Subject: [PATCH] [BUGFIX] Only minifyJS once in Frontend If you have inline JS (or inlineFooterJS) code the method "GeneralUtility::minifyJavaScript()" is called twice for the same code to actually minify the code, because PageRenderer takes care of minification, so FE process does not explicitly have to do that. This does no harm, only if there is a hook within minifyJavaScript(), the processing is triggered twice. This also only happens if config.compressJs = 1 is called. Resolves: #94716 Releases: master Change-Id: I77af009bf252b9f249794ed5b8db1dd0ae26b769 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/70207 Tested-by: Oliver Bartsch <bo@cedev.de> Tested-by: core-ci <typo3@b13.com> Tested-by: Jochen <rothjochen@gmail.com> Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Jochen <rothjochen@gmail.com> Reviewed-by: Benni Mack <benni@typo3.org> --- .../frontend/Classes/Http/RequestHandler.php | 54 +++++-------------- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/typo3/sysext/frontend/Classes/Http/RequestHandler.php b/typo3/sysext/frontend/Classes/Http/RequestHandler.php index 5698c28fa111..5fd87ea58cd7 100644 --- a/typo3/sysext/frontend/Classes/Http/RequestHandler.php +++ b/typo3/sysext/frontend/Classes/Http/RequestHandler.php @@ -21,7 +21,6 @@ use Psr\EventDispatcher\EventDispatcherInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; -use Psr\Log\LogLevel; use TYPO3\CMS\Core\Core\Environment; use TYPO3\CMS\Core\Http\Response; use TYPO3\CMS\Core\Information\Typo3Information; @@ -739,39 +738,8 @@ class RequestHandler implements RequestHandlerInterface $inlineJS = $controller->cObj->cObjGet($controller->pSetup['jsInline.'] ?? null, 'jsInline.'); // Javascript inline code for Footer $inlineFooterJs = $controller->cObj->cObjGet($controller->pSetup['jsFooterInline.'] ?? null, 'jsFooterInline.'); - // Should minify? - if ($controller->config['config']['compressJs'] ?? false) { - $pageRenderer->enableCompressJavascript(); - $minifyErrorScript = ($minifyErrorInline = ''); - $scriptJsCode = GeneralUtility::minifyJavaScript($scriptJsCode, $minifyErrorScript); - if ($minifyErrorScript) { - $this->timeTracker->setTSlogMessage($minifyErrorScript, LogLevel::ERROR); - } - if ($inlineJS) { - $inlineJS = GeneralUtility::minifyJavaScript($inlineJS, $minifyErrorInline); - if ($minifyErrorInline) { - $this->timeTracker->setTSlogMessage($minifyErrorInline, LogLevel::ERROR); - } - } - if ($inlineFooterJs) { - $inlineFooterJs = GeneralUtility::minifyJavaScript($inlineFooterJs, $minifyErrorInline); - if ($minifyErrorInline) { - $this->timeTracker->setTSlogMessage($minifyErrorInline, LogLevel::ERROR); - } - } - } - if (!isset($controller->config['config']['removeDefaultJS']) || !$controller->config['config']['removeDefaultJS']) { - // include default and inlineJS - if ($scriptJsCode) { - $pageRenderer->addJsInlineCode('_scriptCode', $scriptJsCode, $controller->config['config']['compressJs']); - } - if ($inlineJS) { - $pageRenderer->addJsInlineCode('TS_inlineJS', $inlineJS, $controller->config['config']['compressJs']); - } - if ($inlineFooterJs) { - $pageRenderer->addJsFooterInlineCode('TS_inlineFooter', $inlineFooterJs, $controller->config['config']['compressJs']); - } - } elseif ($controller->config['config']['removeDefaultJS'] === 'external') { + $compressJs = (bool)($controller->config['config']['compressJs'] ?? false); + if (($controller->config['config']['removeDefaultJS'] ?? '') === 'external') { /* * This keeps inlineJS from *_INT Objects from being moved to external files. * At this point in frontend rendering *_INT Objects only have placeholders instead @@ -784,26 +752,30 @@ class RequestHandler implements RequestHandlerInterface $inlineJSint = ''; $this->stripIntObjectPlaceholder($inlineJS, $inlineJSint); if ($inlineJSint) { - $pageRenderer->addJsInlineCode('TS_inlineJSint', $inlineJSint, $controller->config['config']['compressJs']); + $pageRenderer->addJsInlineCode('TS_inlineJSint', $inlineJSint, $compressJs); } if (trim($scriptJsCode . $inlineJS)) { - $pageRenderer->addJsFile(GeneralUtility::writeJavaScriptContentToTemporaryFile($scriptJsCode . $inlineJS), $defaultTypeAttributeForJavaScript, $controller->config['config']['compressJs']); + $pageRenderer->addJsFile(GeneralUtility::writeJavaScriptContentToTemporaryFile($scriptJsCode . $inlineJS), $defaultTypeAttributeForJavaScript, $compressJs); } if ($inlineFooterJs) { $inlineFooterJSint = ''; $this->stripIntObjectPlaceholder($inlineFooterJs, $inlineFooterJSint); if ($inlineFooterJSint) { - $pageRenderer->addJsFooterInlineCode('TS_inlineFooterJSint', $inlineFooterJSint, $controller->config['config']['compressJs']); + $pageRenderer->addJsFooterInlineCode('TS_inlineFooterJSint', $inlineFooterJSint, $compressJs); } - $pageRenderer->addJsFooterFile(GeneralUtility::writeJavaScriptContentToTemporaryFile($inlineFooterJs), $defaultTypeAttributeForJavaScript, $controller->config['config']['compressJs']); + $pageRenderer->addJsFooterFile(GeneralUtility::writeJavaScriptContentToTemporaryFile($inlineFooterJs), $defaultTypeAttributeForJavaScript, $compressJs); } } else { + // include default and inlineJS + if ($scriptJsCode && (!isset($controller->config['config']['removeDefaultJS']) || !$controller->config['config']['removeDefaultJS'])) { + $pageRenderer->addJsInlineCode('_scriptCode', $scriptJsCode, $compressJs); + } // Include only inlineJS if ($inlineJS) { - $pageRenderer->addJsInlineCode('TS_inlineJS', $inlineJS, $controller->config['config']['compressJs']); + $pageRenderer->addJsInlineCode('TS_inlineJS', $inlineJS, $compressJs); } if ($inlineFooterJs) { - $pageRenderer->addJsFooterInlineCode('TS_inlineFooter', $inlineFooterJs, $controller->config['config']['compressJs']); + $pageRenderer->addJsFooterInlineCode('TS_inlineFooter', $inlineFooterJs, $compressJs); } } if (isset($controller->pSetup['inlineLanguageLabelFiles.']) && is_array($controller->pSetup['inlineLanguageLabelFiles.'])) { @@ -829,7 +801,7 @@ class RequestHandler implements RequestHandlerInterface if ($controller->config['config']['compressCss'] ?? false) { $pageRenderer->enableCompressCss(); } - if ($controller->config['config']['compressJs'] ?? false) { + if ($compressJs ?? false) { $pageRenderer->enableCompressJavascript(); } if ($controller->config['config']['concatenateCss'] ?? false) { -- GitLab