Certains des exemples que nous fournissons ci-dessous ne sont pas complets. D'emblée, nous nous en excusons, bien sûr. Mais pourquoi diable sont-ils incomplets ?
Ils sont incomplets parce que nous y travaillons en ce moment et que plutôt que de vous faire patienter jusqu'à ce qu'ils soient tous terminés, nous avons préféré vous les livrer dans l'état où ils se trouvent pour que vous puissiez vous faire une idée de ce qu'ils illustrent.
Au fur et à mesure de notre avancement, nous ferons les mises à jour idoines. Nous espérons résorber notre retard au plus vite.
title
, le paramètre heading
, le paramètre text
, le paramètre xsl
, LSRegionSubtag, Language Switchers, LSFormEnroll, LSContentsLegal, sitemap, substitution de propriétés, LSSourceFile et LSContentsSourceFile, LSContentsComments, LSContentsCharter, ... (05/11/2013)onload
et onunload
d'une page, Page settings, ... (22/09/2013)Depuis l'opus "5.0.0007"
Encore un nouveau type de filtre : le filtre occurrences
. C'est
toujours l'opus 5.0.0007
de Vae Soli! qui offre cette
fonctionnalité !
Ce filtre permet de n'afficher un contenu qu'un certain nombre de fois au visiteur courant. Pour sa prise en compte, le contenu doit être identifié par un guid (sinon, cela ne fonctionne tout simplement pas).
Les visites de l'utilisateur sont enregistrées dans sa session. Pour chaque contenu visé par le filtre occurrences, un compteur de visualisation est incrémenté. Le filtre occurrences est donc comparé au compteur. Par exemple :
<Island id="warning" guid="samples-warning" html5="yes" occurrences="15"><![CDATA[ <div style="border:3px solid silver;margin:15px auto;padding:10px;font-size:1.5em;font-weight:bold;"> <h2 style="color:#600;">Attention</h2> <p style="color:#900;"> Certains des exemples que nous fournissons ci-dessous ne sont pas complets. D'emblée, nous nous en excusons. </p> </div>]]> </Island>
Nous avons déjà décrit comment un peu de configuration Apache pouvait aider
à dynamiser votre site web (voir
article paru sur le site de Lato Sensu Management). En l'occurrence il s'agit de jouer
sur la la compression des ressources renvoyées depuis le serveur web (mode
GZIP
ou DEFLATE
) et de jouer sur les headers
d'expiration (Expires
, cache-Control
,
Pragma
et Etag
).
Il existe aussi d'autres actions possibles qui sont liées à la configuration de votre site web mais aussi à votre contenu. Pour mettre cette stratégie en place, vous pouvez compter sur les substitutions de Vae Soli!. Voici comment…
À chaque ressource statique (un fichier .css, un fichier .js, une image, …) votre navigateur compose la requête en incluant tous les cookies positionnés sur le domaine courant. C'est normal, c'est ainsi que fonctionnent les navigateurs. Cependant, votre serveur web ne fait rien des cookies en question, du moins la plupart du temps [1] . Voici un exemple de ce genre de requête, grâce à un extrait de DragonFly - Opera :
GET /images/uikey/close.png HTTP/1.1 User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; fr) Presto/2.10.289 Version/12.02 Host: www.ls.poc Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: fr-BE,fr;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate Referer: http://www.ls.poc/articles/core/web-site-speed-apache/web-site-speed-apache.php If-Modified-Since: Thu, 27 May 2010 10:09:15 GMT If-None-Match: "1000000065463-d2-4879095374d74" Cookie: q-invoices-sort=ino; PHPSESSID=u4ogcqrbggk9g32iv8dieds910; template=.php%3D+return+WhichTemplate%28%29%3B; theme=core; cargo=ls; lang=fr; __utma=233550339.707241759.1338303878.1347630753.1347634548.36; __utmz=233550339.1338303878.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); template=.php%3D+return+WhichTemplate%28%29%3B; theme=core; cargo=ls; lang=fr Connection: Keep-Alive
Dans la composition de cette requête vous voyez clairement que la ressource
demandée concerne une image (/images/uikey/close.png
).
Vous voyez aussi que se touvent renseignés une série de cookies :
q-invoices-sort=ino; PHPSESSID=u4ogcqrbggk9g32iv8dieds910;
….
Au passage veuillez noter que les appels sont ici faits sur un PC de développement
et que c'est notre habitude de positionner des domaines *.poc
(proof of
concept). C'est la raison pour laquelle vous voyez ce type de host:
www.ls.poc
.
Voilà précisément ce que nous allons chercher à optimiser. Comme ces cookies ne servent à rien (ils ne sont quand même pas pris en compte par le serveur), autant ne pas les inclure dans la requête. Pour cela, il suffit de mettre ces ressources sur un domaine séparé, par exemple un sous-domaine de votre site web [2] . Dans notre exemple, nous arriverions ainsi à éviter l'envoi de 362 bytes de données ce qui garantit 3 bénéfices complémentaires :
Soit. Mais comment faire ?
Tout d'abord, nous avons créé un sous-domaine pour notre site. Nous l'avons
appelé res
. Nous avons donc maintenant un domaine qui
s'appelle res.ls.poc
[3]
Maintenant, il faudra utiliser le sous-domaine dans l'appel de la ressource.
Par exemple, imaginons une image comme <img
src="/images/close.png" />
. On voit clairement que la
source de l'image est /images/close.png
. Il va donc
falloir mentionner le sous-domaine comme dans <img
src="http://res.ls.poc/images/close.png" />
.
Comme ce sous-domaine est exclusivement utilisé pour des ressources statiques, il ne s'accompagne d'aucun cookie. Et le tour est joué ! Voilà, pour info, la requête qui est maintenant effectuée par le navigateur :
GET /images/uikey/close.png HTTP/1.1 User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; fr) Presto/2.10.289 Version/12.02 Host: res.ls.poc Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 Accept-Language: fr-BE,fr;q=0.9,en;q=0.8 Accept-Encoding: gzip, deflate Referer: http://www.ls.poc/articles/core/web-site-speed-apache/web-site-speed-apache.php If-Modified-Since: Thu, 27 May 2010 10:09:15 GMT If-None-Match: "1000000065463-d2-4879095374d74" Connection: Keep-Alive
… et les cookies ont disparu. 362 bytes de sauvés … pour cette SEULE ressource ! Mais le principe reste valable pour TOUTES les ressources et il n'est pas rare d'être confronté à environ 50 requêtes entre le navigateur et le serveur web (rien que pour des ressources statiques). En comptant un gain de 350 bytes par requête et 50 requêtes … ce n'est pas moins de 17500 bytes que vous économisez pour une seule page ! Ce n'est pas négligeable.
Et maintenant, où Vae Soli! peut-il aider en cette matière ? Nous le disions tout de go en préambule : via les substitutions ! Voici comment faire…
<img src="{my-images}/close.png" />
… et établissez une substitution qui transforme '{my-
images}
' en 'http://res.ls.poc/images
'. Le tour est
joué. Après vous pourrez même facilement passer à l'implémentation d'un CDN
— Content Delivery Network — en ne changeant QUE la SEULE substitution
définie. Un tour de force.
storage
des îlesDepuis l'opus "5.0.0007"
Le paramètre storage
des îles indique la ressource physique qui
est accédée pour composer le contenu. En voici un exemple :
<Island id="body" active="yes" class="LSContents" lupdate="auto" cdate="yes"> <role-mapping role="editor" groups="admin" /> <param name="storage"><![CDATA[/islands/web-expertise_fr.php]]></param> </Island>
Dans l'exemple ci-dessus, on voit que la ressource physique (ici un fichier)
qui compose le contenu de cette île est /islands/web-expertise_fr.php
.
Nous avons mis en évidence la partie fr
du nom du fichier,
indiquant ainsi la langue du contenu.
Dans le cas où il est nécessaire de gérer plusieurs langues, il pourrait être intéressant de faire en sorte que la langue mentionnée soit simplement la langue courante. Voilà comment faire :
<Island id="body" active="yes" class="LSContents" lupdate="auto" cdate="yes"> <role-mapping role="editor" groups="admin" /> <param name="storage"><![CDATA[/islands/web-expertise_{page->lang}.php]]></param> </Island>
C'est donc un exemple de substitution. Il en existe bien d'autres et
justement nous en avons introduites de nouvelles. Voici comment disposer de
contenus différents en fonction du caractère de mobilité (voir classe
LSBrowser
) (mobile, tablet, phone, desktop, …) :
<Island id="body" active="yes" class="LSContents" lupdate="auto" cdate="yes"> <role-mapping role="editor" groups="admin" /> <param name="storage"><![CDATA[/islands/web-expertise-{app->mobility}-{page->lang}.php]]></param> </Island>
En fonction du nom du device (attention, parfois ce nom est vide) :
<Island id="body" active="yes" class="LSContents" lupdate="auto" cdate="yes"> <role-mapping role="editor" groups="admin" /> <param name="storage"><![CDATA[/islands/web-expertise-{app->device}-{page->lang}.php]]></param> </Island>
En fonction du nom générique du browser (e.g. "opera") :
<Island id="body" active="yes" class="LSContents" lupdate="auto" cdate="yes"> <role-mapping role="editor" groups="admin" /> <param name="storage"><![CDATA[/islands/web-expertise-{app->browser}-{page->lang}.php]]></param> </Island>
En fonction du type de browser (e.g. "browser", "robot", ...) :
<Island id="body" active="yes" class="LSContents" lupdate="auto" cdate="yes"> <role-mapping role="editor" groups="admin" /> <param name="storage"><![CDATA[/islands/web-expertise-{app->browsertype}-{page->lang}.php]]></param> </Island>
Plusieurs substitutions existent relatives au browser du client. La toute
première est celle qui fut introduite il y a bien longtemps :
app->useragent
. Mais celle-ci est obsolète car elle ne se
basait pas sur la classe LSBrowser
, développée assez récemment.
Voici une liste récente des possibilités offertes par Vae Soli!:
{app->useragent}
: remplacement par $GLOBALS['oApp']->szBrowser
(obsolète depuis opus 5.0.0007
, remplacé par {app->browser}
){app->ua}
: remplacement par $GLOBALS['oApp']->oBrowser->szUA
(à utiliser avec précaution){app->browser}
: remplacement par $GLOBALS['oApp']->oBrowser->szName
{app->browsertype}
: remplacement par $GLOBALS['oApp']->oBrowser->szType
Vae Soli! possède ce qu'on appelle des messages de service. Il s'agit de paramètres spéciaux qui sont envoyés à n'importe quelle page et qui fait réagir le framework de manière spécifique. Les paramètres sont envoyés dans l'URL (query string). Il y a trois ans déjà nous documentions ces paramètres spéciaux.
Voici la liste des messages de service possibles :
Depuis l'opus "2.0.0009"
Vae Soli! permet de n'extraire que le corps de la page avec le message de
service suivant : ?VaesoliServiceMessage={body}
. Voilà un
message de service particulèrement intéressant pour la syndication entre
deux sites web.
http://www.vaesoli.org/?VaesoliServiceMessage={body}
Essayez ce message de service en cliquant sur ce lien.
Vae Soli! permet d'extraire l'entête HTML de la page accédée grâce au
service ?VaesoliServiceMessage={head}
.
http://www.vaesoli.org/?VaesoliServiceMessage={head}
Essayez ce message de service en cliquant sur ce lien et lisez ensuite la source de la page pour voir ce qui vous a été renvoyé.
Il est désormais possible de "dropper" le fichier de log de l'application
grâce au message de service {drop:log}
. Cette fonctionnalité
n'est accessible que si la personne logguée fait partie d'un des groupes
prédéfinis suivants :
http://www.vaesoli.org/?VaesoliServiceMessage={drop:log}
Un de ces messages de service est le géorama:satori. Son effet est de visualiser le géorama actif d'un site internet. En voici un exemple que vous pourrez tester dans votre navigateur :
Exemple ------- http://www.vaesoli.org/?VaesoliServiceMessage={georama:satori}
Visualisez la source de la page pour voir ce que que ce message de service renvoie.
Exemple ------- http://www.vaesoli.org/?VaesoliServiceMessage={dir:root}
Vae Soli! permet de visualiser un site comme il devrait apparaître sur un appareil mobile (mais c'est à vous de fournir le template qui doit être appliqué selon ce qui est expliqué ci-après).
Si vous avez spécifié un template spécifique, alors vous pourrez tester ce
que cela donne grâce au message de service suivant :
?VaesoliServiceMessage={ua:MOBILE}
(manière générique).
En remplaçant le mot "MOBILE" par la signature Agent (User-Agent) de votre appareil mobile, vous pourrez tester votre cas propre. Voyez par exemple comment nous testons le rendu dans le cas d'un iPhone :
http://www.vaesoli.org/?VaesoliServiceMessage={ua:IPHONE}
user agent
Depuis l'opus "5.0.0007"
Vae Soli! propose un message de service assez complet pour influencer la
prise en compte du User Agent (voir ci-dessus) : le service {ua:…}
. Avec l'opus
5.0.0007
, de nouvelles fonctionnalités se sont ajoutées qui
facilitent terriblement la mise au point de sites sur des environnements qui
ne leur correspondent néanmoins pas (exemple : mettre au point un site
version "mobile" sur un ordinateur "desktop").
Ainsi les clauses device
, model
et
mobility
se sont ajoutées au message de service
{ua:…}
.
http://www.vaesoli.org/?VaesoliServiceMessage={ua:device=samsung;model=GT-I9100;browser=mini;mobility=mobile}
[1] … Si les ressources statiques sont servies directement par le serveur web, les cookies n'ont aucune utilité. Le serveur ne s'en sert donc pas et les néglige.
[2] … Ce n'est pas la manière optimale de fonctionner mais cette méthode garantit déjà une belle optimisation. Dans une situation optimale on se servirait d'un CDN, entendez un Content Delivery Network.
[3] … Sur notre système de développement, il a suffit de définir le sous-domaine dans notre fichier hosts de Windows. Dans notre configuration Apache, tous les sous-domaines sont résolus physiquement par rapport à la racine du domaine général, ici 'www.ls.poc'.