Npr..
Zamislimo da je url request zapravo ->
http://site.com/javaScript.js
A pre toga u .htaccess-u
Code:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /$1.php [L,QSA]
RewriteCond %{REQUEST_FILENAME}.css -f
RewriteRule ^(.+)$ /$1.css [L,QSA]
RewriteCond %{REQUEST_FILENAME}.js -f
RewriteRule ^(.+)$ /$1.js [L,QSA]
</IfModule>
# Naravno, kasnije ide expires, deflate etc ...
--------
Pozivaš ručno pisane ili generisane delove <head> request-a, nebitno je.
Code (html):
<script type="text/javascript" src="http://site.com/assets/javaScript.js"><!-- .php --></script>
Na prvi http request negde u toku obrade tog zahteva smestio si u neku sesiju ili gde ti je zgodno, nebitno,
ajde nek' bude sesija
$_SESSION['files'] = 'jquery.main.util';
I tu će sesiju da vidi i "maskirani .js" fajl,
koji treba da izgleda otprilike ovako..
javaScript.js.php
Code (php):
<?php namespace
{
if(!isset($_SERVER['HTTP_REFERER'])):
header('Content-Type:text/javascript; charset=utf-8');
exit('/* Mices are sleeping now ..*/');
else: define('positive', TRUE); endif;
if(!defined('positive'))
{
die('/* There is no content here. */');
}
else
{
if(!isset($_SESSION)) session_start();
$timeH = (60 * 60 * 24 * 7);
function fileSpit
()
{
$fileSpit=null;
$preg1=array('!/\*.*?\*/!s','/\s+/');
$preg2=array(' ',' ');
$whatever = $_SESSION['files'];
$whatever = explode('.', $whatever);
foreach($whatever as $n=>$v)
{
$needThis = __DIR__
."/$v.js";
if(file_exists($needThis))
{
$fileSpit.=preg_replace( $preg1, $preg2, file_get_contents($needThis) )."\n\n";
}
else
{
$_halT__ = TRUE;
break;
}
}
# $_halT__ je možda totalno nepotreban deo.. nebitno..
if(isset($_halT__) && $_halT__ )
{
print('Content file is missing...');
}
else
{
return $fileSpit;
}
}
ob_start();
echo fileSpit
();
$fileSpit=
ob_get_clean(); # <-- komplet svi .js fajlovi u jednom stringu.
session_write_close();
ob_start('ob_gzhandler');
header_remove
('ETag');
header('Pragma: public');
header('Cache-Control: maxage='.$timeH);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$timeH) . ' GMT');
header('Content-type:text/javascript; charset=utf-8');
header_remove
('X-Powered-By');
echo $fileSpit;
ob_end_flush();
exit;
}
}
Dakle, princip je isti i za css, s' tim što treba izmenjati Content-type header-e ... i tu gde piše .js promeniti u .css ( $needThis = __DIR__ ."/.$v.
js" )
I baš tako kako si i zamislio (kroz url parametar, umesto $_SESSION['files'], $_GET['files']) i možeš da dobiješ keširanu, dinamičnu kaskadu, da zaobiđeš ponavljanje istog request-a (ostaje samo negotiation) i da se ono što je jednom učitano, do daljnjeg čita 100% sa klijenta, gZipovano.
Url bi onda izgledao ovako. ..
http://site.com/assets/style.css?files=file1.file2.file3.file4
... ili ako ti volja (možda još lepše), stanradrni index.php fajl zadužen za kaskade u određenom slobodno vidljivom direktorijumu, bez .css.php, sa css 'Content-type'.
http://site.com/assets/?files=file1.file2.file3.file4
Međutim, kada se radi o 30 kila javaskripte, pa onda još 15 kila javaskripte.. pa onda još 100 kila javaskripte.. (pa tako po još 10 puta, klasičan "džumla/WP" pristup),
ako su skripte kompatibline.. (nisu sve pisane rukama, nego neke i nogama i uz pomoć "clipboardCopyPaste" tool-ova, itd.. ) i u njima se bukvalno ništa ne pipa, nikad..
onda ovaj primer php skripte gore jeste izvanredno rešenje.
ps: nisam testirao kako konkretno taj šablon gore, radi.
[Ovu poruku je menjao plus_minus dana 16.07.2014. u 04:41 GMT+1]
about:networking