<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blackotine &#187; php</title>
	<atom:link href="http://www.blackotine.fr/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blackotine.fr</link>
	<description>Blog d&#039;un intégrateur et développeur Web</description>
	<lastBuildDate>Tue, 24 May 2011 22:50:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Compression, cache et optimisation des fichiers javascript et css</title>
		<link>http://www.blackotine.fr/javascript/compression-cache-et-optimisation-des-fichiers-javascript-et-css</link>
		<comments>http://www.blackotine.fr/javascript/compression-cache-et-optimisation-des-fichiers-javascript-et-css#comments</comments>
		<pubDate>Thu, 30 Oct 2008 17:38:25 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[http requests]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=66</guid>
		<description><![CDATA[Comment optimiser l&#8217;utilisation de JavaScript en termes de compression, cache, vitesse de chargement sans pour autant se retrouver avec des fichiers illisibles car, sans indentation, sans espaces voire obfusqués. (plusieurs méthodes existent) Garder un fichier lisible est, selon moi, indispensable pour maintenir son application à jour, la modifier, la corriger et cela d&#8217;autant plus lorsqu&#8217;on [...]]]></description>
			<content:encoded><![CDATA[<p>Comment optimiser l&#8217;utilisation de JavaScript en termes de compression, cache, vitesse de chargement sans pour autant se retrouver avec des fichiers illisibles car, sans indentation, sans espaces voire obfusqués. (<a href="http://www.webinventif.fr/jus-presse/">plusieurs méthodes existent</a>)</p>
<p>Garder un fichier lisible est, selon moi, indispensable pour maintenir son application à jour, la modifier, la corriger et cela d&#8217;autant plus lorsqu&#8217;on travaille en équipe.</p>
<p>Une des solutions est de garder une version non compressée mais cela sous-entend de jongler sans cesse entre plusieurs versions, ce qui n&#8217;est définitivement pas pratique.</p>
<h3>Combine</h3>
<p>La solution qui me semble la plus intéressante est la classe PHP <a href="http://rakaz.nl/extra/code/combine">Combine</a>, simple à utiliser, fiable, gérant la combinaison, la <strong>compression</strong>, la <strong>mise en cache</strong> et les <strong>dates d&#8217;expiration</strong>.<br />
<span id="more-66"></span><br />
Tout d&#8217;abord, Combine <strong>concatène</strong> tous vos fichiers javascript et/ou css et les sert comme un gros fichier. Cela dans le but de <strong>réduire le nombre de requêtes au serveur</strong>.</p>
<p>Il gère également <strong>la compression</strong> en détectant si votre navigateur supporte la compression gzip, si oui, il gzip les données et renvoie la version compressée.  En général, ceci permet de <strong>réduire considérablement la taille du fichier</strong>.</p>
<p>Si vous avez créé un répertoire cache, il va stocker la version gzip générée de vos données. Ainsi pour les futures demandes, il récupére simplement la version mise en cache zippé au lieu de générer le contenu de l&#8217;archive gzip à la volée. Ceci permet de <strong>réduire la charge du serveur</strong>.</p>
<p>Enfin, il vérifie les changements effectués. En effet, la date, l&#8217;heure et la taille du fichier mis en cache est rapidement vérifiée et, si il y a un changement, il sera automatiquement régénéré. Il gère donc parfaitement les en-têtes ce qui permet de mettre ces fichiers à jour et d&#8217;être certain que chacun des visiteurs du site se verra servir la même version du fichier.</p>
<h3>Mise en place</h3>
<p><strong>L&#8217;utilisation est très simple.</strong></p>
<p>Vous devez d&#8217;abord <a href="http://rakaz.nl/projects/combine/combine.phps">télécharger</a> et configurer le script combine.php.</p>
<p>Par défaut, ce script regarde dans les répertoires racines javascript et css de votre site Web, mais si vous utilisez des répertoires différents, vous pouvez changer ces valeurs en haut de combine.php.<br />
Transférer le fichier combine.php à la racine de votre site Web.</p>
<p>Deuxièmement, vous devez créer un répertoire &laquo;&nbsp;cache&nbsp;&raquo; accessible en écriture. Encore une fois, par défaut, ce script va chercher dans le répertoire racine du site Web, mais vous pouvez modifier cette valeur dans combine.php.</p>
<p>Enfin, il vous faut créer ou modifier un fichier .htaccess. Si vous n&#8217;avez pas de .htaccess vous pouvez le créer à la racine de votre site Web et ajouter les lignes suivantes.<br />
Si vous avez déjà un .htaccess vous pouvez simplement ajouter les lignes suivantes dans le fichier :</p>
<pre class="brush: sql">RewriteEngine On
RewriteBase /
RewriteRule ^css/(.*\.css) /combine.php?type=css&amp;amp;files=$1
RewriteRule ^js/(.*\.js) /combine.php?type=javascript&amp;amp;files=$1</pre>
<p>Pour finir, dans vos pages remplacez tous vos appels javascript de la forme :</p>
<pre class="brush: jscript">&lt;script src=&quot;js/mootools-1.2-core.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/mootools-1.2-more.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>par :</p>
<pre class="brush: jscript">&lt;script src=&quot;js/mootools-1.2-core.js,mootools-1.2-more.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Idem pour le css, remplacer :</p>
<pre class="brush: css">
&lt;link href=&quot;css/reset.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
&lt;link href=&quot;css/layout.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;</pre>
<p>par :</p>
<pre class="brush: css">
&lt;link href=&quot;css/reset.css,layout.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;</pre>
<p>Et voilà ! Plutôt simple et terriblement efficace.<br />
Par contre, un petit désavantage, si vous avez l&#8217;habitude d&#8217;utiliser <a href="http://getfirebug.com/">Firebug</a> pour débugger, forcement, le numéro de ligne indiqué pour les propriétés css, par exemple, ne correspond à rien dans votre fichier local, puisque tous les fichiers css sont combinés.<br />
Je pense que l&#8217;installation de cette solution doit donc intervenir en fin de production, juste avant livraison.</p>
<h3>Autres solutions</h3>
<p>Il existe une autre classe qui semble assez similaire, <a href="http://code.google.com/p/minify/">Minify!</a>, elle permet en plus de la gestion du cache et de la compression, de supprimer les espaces blancs et les commentaires.</p>
<p>Si vous avez plus d&#8217;infos sur Minify ou sur d&#8217;autres solutions, n&#8217;hésitez pas !</p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D66&count=horizontal&related=&text=Compression%2C%20cache%20et%20optimisation%20des%20fichiers%20javascript%20et%20css' class='twitter-share-button' data-text='Compression, cache et optimisation des fichiers javascript et css' data-url='http://www.blackotine.fr/?p=66' data-counturl='http://www.blackotine.fr/javascript/compression-cache-et-optimisation-des-fichiers-javascript-et-css' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/javascript/compression-cache-et-optimisation-des-fichiers-javascript-et-css/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

