<?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>Border-Labs &#187; pop-up</title>
	<atom:link href="http://border-labs.fr/?feed=rss2&#038;tag=pop-up" rel="self" type="application/rss+xml" />
	<link>http://border-labs.fr</link>
	<description>... souvent à la limite</description>
	<lastBuildDate>Fri, 04 Mar 2011 16:36:17 +0000</lastBuildDate>
	<language>fr-FR</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.8.41</generator>
	<item>
		<title>Partage de code javascript inter-fenêtres : introduction</title>
		<link>http://border-labs.fr/?p=51</link>
		<comments>http://border-labs.fr/?p=51#comments</comments>
		<pubDate>Fri, 28 Jan 2011 13:37:32 +0000</pubDate>
		<dc:creator><![CDATA[BlackAdder]]></dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[pop-up]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://border-labs.fr/?p=51</guid>
		<description><![CDATA[Problématique Quand on réalise une application web, il est fondamental d’optimiser les temps de chargement de chacune des pages. C’est un impératif en termes d’ergonomie. Cette série d’articles étudie le partage de code javascript inter-fenêtres ou comment éviter de recharger &#8230; <a href="http://border-labs.fr/?p=51">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h1>Problématique</h1>
<p>Quand on réalise une application web, il est fondamental d’optimiser les temps de chargement de chacune des pages. C’est un impératif en termes d’ergonomie. Cette série d’articles étudie le partage de code javascript inter-fenêtres ou comment éviter de recharger un <em>framework</em> javascript qui est utilisé dans chacune des pages de l’application web.</p>
<p>Les contraintes sont les suivantes :</p>
<ul>
<li>On doit pouvoir accéder directement à chaque page html de l’application via son url (on ne peut pas facilement empêcher l’utilisation des menus ou des raccourcis des navigateurs ; de plus, en termes d’ergonomie, il est conseillé que toute fonctionnalité d’une application possède sa propre url).</li>
<li>L’application peut ouvrir ses pages html dans d’autres fenêtres via des appels javascript ou intégrer ces pages dans des balises <span class="tag">IFRAME</span></li>
<li>Dans chacun de ces cas, le code qui dans chaque page utilise le <em>framework</em> doit rester identique. Il est par exemple exclus de se préoccuper de la façon dont la page a été ouverte : directement, sous forme d’un dialogue modal simulé avec des balises <span class="tag">DIV</span> ou sous forme d’un <span class="tag">IFRAME</span>.</li>
</ul>
<p>Dans les exemples, nous étudierons des pages statiques html mais elles pourraient être générées dynamiquement (jsp ou php par exemple), sans que çà change quoi que ce soit à l’approche utilisée.</p>
<p><span style="color: #000000; font-size: 31px; line-height: 46px;">Plan de la série d&rsquo;articles</span></p>
<p>Un <A href="http://border-labs.fr/?p=57">premier article</A> étudiera le cas de l’ouverture de fenêtres <em>pop-up</em> et comment il est possible de partager le code chargé par la fenêtre qui les a ouvertes.</p>
<p>Un second article étudiera le cas des fenêtres incluses dans un <span class="tag">IFRAME</span> et comment partager le code chargé par la fenêtre parente.</p>
<p>Un troisième article étudiera comment optimiser cette utilisation des <span class="tag">IFRAME</span> pour partager le code</p>
<p>Un quatrième article fera le point sur les contraintes dues à ce partage de code : par exemple au niveau de la conception du code lui-même, en termes de sécurité (<em>cross-scripting</em>), d’ergonomie, de robustesse.</p>
<h1>L’exemple</h1>
<p>D’un point de vue pratique, nous allons simuler l’utilisation d’un <em>framework</em> en utilisant un unique fichier javascript intitulé <span class="file">skynetlib.js</span>. Ce fichier contient une boucle d’attente d’1 seconde pour simuler le temps d’interprétation d’un « gros » <em>framework</em>.</p>
<p>Ce temps d’1 seconde n’est absolument pas délirant. Il est courant d’avoir des <em>frameworks</em> du marché, qui ayant fait le choix d’utiliser un fichier javascript unique (rassemblant tous les composants) ont un temps de chargement de cet ordre (voir pire) et qui peuvent aller jusqu’à retarder l’événement <span class="js">onload</span> de 5 à 6 secondes même sur une machine décente. On peut voir ce mécanisme dans cette copie d’écran de firebug où le <span class="js">onload</span> (trait rouge) est très tardif.</p>
<div id="attachment_54" style="width: 513px" class="wp-caption aligncenter"><a href="http://border-labs.fr/WordPress/wp-content/uploads/2011/01/gros-framework.png"><img class="size-full wp-image-54" title="gros framework" src="http://border-labs.fr/WordPress/wp-content/uploads/2011/01/gros-framework.png" alt="Temps de charment d'un gros framework" width="503" height="123" /></a><p class="wp-caption-text">Chronologie du chargement d&#39;un gros framework</p></div>
<p>Le <em>framework</em> de l’exemple est sensé être conforme au <a href="http://yuiblog.com/blog/2007/06/12/module-pattern/">design pattern « module »</a> et l’ensemble de son code est donc accessible sous forme d’une variable globale. Dans les exemples suivants, cette variable, qui sert aussi d’espace de nommage, sera intitulée Skynet. Ce <em>framework</em> d’exemple comporte un constructeur appelé <span class="js">Skynet.tools.Probe</span>.</p>
<p>Une fois le code du <em>framework</em> chargé, chaque page de l’application lance une méthode d’initialisation qui lui est propre (dans notre exemple, elle s’appelera <span class="js">init</span>). Voilà par exemple une fonction init qui réalise l’instanciation du constructeur <span class="js">Probe</span> définit par le <em>framework</em> :</p>
<pre>function init(){
// Création d’une instance de Probe et affectation à une variable
var a=new Skynet.tools.Probe(1337) ;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://border-labs.fr/?feed=rss2&#038;p=51</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
