Schönes Wochenende allen.
Ich liefere CSS-, JS- und image-files über php-Scripte aus.
<link type="text/css" rel="stylesheet" href="/css/route.php/action/index.css">
<script type="text/javascript" src="/js/route.php/action/index.js"></script>
Die Images werden über mod-rewrite umgeschrieben:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)\.(gif|jpg|png|ico)$ /pic/route.php [NC,L]
Ich empfand den Seitenaufbau als langsam, weswegen ich mit Firebug auf Problemsuche ging. Ich sah, dass die routing-Scripte vergleichsweise lange brauchen.
Hinter der Zeilte index.css verbirgt sich /css/route.php/action/index.css
Hinter der Zeilte index.js verbirgt sich /js/route.php/action/index.css
Hinter icon.png und flyerbooker-back.png verbergen sich geroutete Bilder.
Die grünen Kästen zeigen native Ressourcen.
Es fällt auf: die css/route.php braucht viel länger als ein normales css file. Gleiches gilt für die js/route.php und die pic/route.php.
Ebenfalls fällt auf das die route.php länger braucht, als die normale index.php!!!, die definitiv eine Menge mehr macht. Das kann ja nicht sein. Diese Zeit kann ich halbieren, wenn ich die /css/route.php direkt aufrufe im Browser. Sie liegt dann bei 650ms. BTW: wenn ich ein leeres php-file aufrufe benötigt dies immer noch 600ms. Das ist also bei meinem Provider sozusagen der overhead.
Warum nun benötigen die route.php soviel länger? Da der php-Parser "angeworfen" werden muss? Das würde dann aber auch gelten, wenn ich die /css/route.php direkt aufrufe, was nicht der Fall ist. Ist es also problematisch, dass der Abstand der Requests auf die php-Ressourcen so gering ist? Beeinflusst sich da irgendetwas? Habe schon an session gedacht, die sich irgendwie stören, weiß aber nicht wie...
Was muss ich noch beachten, wenn ich css/js über php ausliefern möchte? Momentan setze ich folgende Header (für die js z.B):
$Modified = date("D, d M Y H:i:s", $Modified - date("Z"))." GMT";
$Expires = date("D, d M Y H:i:s", (time() + 86400))." GMT";
$Etag = md5_file($Content);
header("Content-Type: text/javascript");
header("Last-Modified: $Modified");
header("Expires: $Expires");
header("Cache-Control: public, max-age=86400, s-maxage=86400");
header("Etag: $Etag");
Wobei $Modified zunächst die filemtime() der aktuellsten aller konsolidierten files ist und $Content der Inhalt,der dann ausgegeben wird mit echo $Content.
Noch eine Frage:
wenn ich die dd.css nehme (eine native Ressource). Diese verschwindet aus Firebug, wenn ich die Seite neulade (durch erneutes Klicken des Links zur Seite) und erscheint erst wieder, wenn ich einen vollen Reload erzeuge (F5). Kann man solches Verhalten auch in den routing scripts erzeugen? Es scheint, als würde die dd.css irgendwie "besser" gecached werden.
Ich wäre sehr dankbar für Antworten (ausser: route die Ressourcen lieber nicht). Ich werde das System irgendwann umbauen, dass die Konsolidierten files im öffentlichen Verzeichnis irgendwie temporär gespeichert werden. Es interessiert mich einfach, woran es liegt, dass es zu Verzögerungen kommt.
Vielen Dank im Voraus.
Cheers,
Baba