Hallo zusammen,
ich versuche seit einiger Zeit Javascript-Dateien zwechs Minimierung der HTTP-Requests mit einem PHP Script zusammenzufassen (PHP-Code-Quelle: http://gfx-stylez.com/2015/02/19/css…nd-komprimieren) was auch wunderbar funktioniert.
Ziel ist es für jede HTML-Seite eine:
js-main.php und eine js-page.php vor dem </body> zu verlinken (die js-main.php für die globalen Scripts und die js-page.php nur für die jeweilige Seite benötigten Scripts). Probleme hab ich nur mit einem Script (app.js) welche per Inline-Befehlsaufruf nur einzelne Scriptabschnitte aus der app.js aufruft. Da die app.js auf allen Seiten verwendet wird, möchte ich sie gerne in die js-main.php mit einbinden, was aber leider nicht funktioniert (das Script vom Revolution-Slider wird abgebrochen und die app.js wird nicht angesprochen) und ich keinen Fehler ausfindig machen kann - verlinke ich sie separat funktioniert das Ganze. Die Reihenfolge und Pfade sollten stimmen.
Zum Vergleich:
DEMO funktioniert (app.js separat): http://www.heide-flaechenfertiger.de/demo/tester2.html
DEMO ohne Funktion (app.js im PHP-Script): http://www.heide-flaechenfertiger.de/demo/tester1.html
das js-main.php Script:
<?php
/**
* On-the-fly CSS Compression
* Copyright (c) 2009 and onwards, Manas Tungare.
* Fork/Remix: Copyright (c) 2015 GFX-Stylez.blog
* Creative Commons Attribution, Share-Alike.
*
*/
/* Add your CSS files to this array (THESE ARE ONLY EXAMPLES) */
$jsFiles = array(
"../plugins/jquery/jquery.min.js",
"../plugins/jquery/jquery-migrate.min.js",
"../plugins/bootstrap/js/bootstrap.min.js",
"../plugins/jquery.parallax.js",
"../plugins/back-to-top.js",
"../plugins/smoothScroll.js",
"app.js",
);
/**
* Ideally, you wouldn't need to change any code beyond this point.
*/
$buffer = "";
foreach ($jsFiles as $jsFile) {
$buffer .= file_get_contents($jsFile);
}
// Enable GZip encoding
ob_start("ob_gzhandler");
/**
* Set HTTP/1.0 304 Not Modified
* Source: http://castlesblog.com/2010/august/14/php-javascript-css-minification
*/
$modified = 0;
foreach($jsFiles as $jsFile) {
$age = filemtime($jsFile);
if($age > $modified) {
$modified = $age;
}
}
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $modified) {
header("HTTP/1.0 304 Not Modified");
} else {
header ("Last-Modified: ".gmdate("D, d M Y H:i:s", $modified )." GMT");}
// Cache for 1 day
$offset = 60 * 60 * 24 * 365;
// Enable caching
header('Cache-Control: max-age='.$offset.'');
// Set expire
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $offset) . ' GMT');
// Set the correct MIME type, because Apache won't set it for us
header("Content-type: text/javascript");
// Write everything out
echo($buffer);
?>
Alles anzeigen
Vollständigkeitshalber sei erwähnt, das die Seite ist ein erworbenes HTML-Template ist (Quelle: https://wrapbootstrap.com/theme/unify-re…plate-WB0412697), die benötigten JS-Scripte/Plugins ebenfalls.
Die Reihenfolge der Scriptaufrufen hab ich schon geändert, ich vermute ein fehlendes ";" oder ähnliches - werde aber nicht ganz schlau daraus - eventuell hat jemand von Euch einen Tipp/Hinweis, der mir auf die Sprünge hilft
bin für jeden Hinweis dankbar