Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/08/2011, 16h00   #1
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
Par défaut combiner des fichier jscript sans mode "inline"

Bonjour

J'ai un vieux projet dans ya plusieurs chargements de ficheir Javascript.
Pour optimiser un minimum le temps de chargement il faudrait combiner tous les Js en un seul fichier et compresser le code.
Il faudrait que ca se fasse a la volée et/ou avec du cache.

Plutôt que de repasser dans touts les pages du site (c'est pas du tout MVC bien sur) je pensais faire la chose suivante :

- rediriger avec Apache /htaccess les URL <script src="...."> vers un script PHP qui tamporise, combine, compresse, etc...

- chacune de ces URL renvoit vide.

- dans le footer.php, seul ficheir inclus dans toutes les page je met un <script src="js-common.min.js"> qui lui fait un echo de tout le Javascript combiné et compressé précédemment.

A la question "est ce que c'est propre" : je repond que je sais pertinement que non mais faut que je le fasse quand meme...

J'ai fait le code suivant mais ya plein de bugs :
- tous les JS ne sont pas combinés
- l'ordre de chargement des contenus ne respecte pas du tout celui de la page web, donc ca coince sur les dépendance.

En gros ca donne ca côté code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
session_start();
$basedir    = dirname(__FILE__).'/../../';
 
if (!isset($_SESSION['jsfiles']))
	$_SESSION['jsfiles'] = '';
 
if (basename($_GET['file']) != 'js-common.min.js')
{
	$filepath = realpath($basedir.dirname($_GET['file']).'/'. basename($_GET['file']));
	if (is_file($filepath))
	{
		ob_start();
		require_once $filepath;
		$_SESSION['jsfiles'].= "\n // [INCLUDED FILE : $filepath ] \n".ob_get_clean()."\n";
	}
}
else 
{
	echo $_SESSION['jsfiles'];
	unset($_SESSION['jsfiles']);
}
une idée ?
merci
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 18h19   #2
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Salut,

tu peux utiliser JS-min pour ta compression.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 23h06   #3
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
merci mais j'utilise deja la classe PHP JavascriptPacker.
Mon probleme concerne l'agrégation des fichiers.
Il faudrait que j'agrège a la volée tous les fichiers JS appellés en 1 seul flux.
Une fois que c'est fait, la compression est pas un probleme.

J'ai testé :
- l'ordre d'agrégation ne correspond a l'ordre des <script> du fichier HTML
donc si ya des dépendances a respecter entre JS c'est mort.
- certains JS sont agrégés, d'autres pas.

Donc j'ai laissé tomber faute de temps a y consacrer.
Dorénavant je fais la chose suivante :
une regle de réécriture dans le htaccess qui redirige les JS vers un script de compression PHP
qui gère le cache : soit il renvoit la version en cache soit il régénère le fichier.
Le contenu JS quant a lui est toujours packé.

Mais si ya une solution d'agrégation ca m'intéresse
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h45.


 
 
 
 
Partenaires

Hébergement Web