<?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>Laurent Duchaussoy, auteur/autrice sur EKITE</title>
	<atom:link href="https://ekite.info/author/m3stash/feed/" rel="self" type="application/rss+xml" />
	<link>https://ekite.info</link>
	<description>Vos défis, notre passion</description>
	<lastBuildDate>Tue, 11 Jun 2024 12:31:29 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://ekite.info/wp-content/uploads/2023/06/cropped-favicon2-150x150.png</url>
	<title>Laurent Duchaussoy, auteur/autrice sur EKITE</title>
	<link>https://ekite.info</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Boostez vos applis web avec Web Assembly !</title>
		<link>https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/</link>
					<comments>https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/#respond</comments>
		
		<dc:creator><![CDATA[Laurent Duchaussoy]]></dc:creator>
		<pubDate>Thu, 06 Oct 2022 10:28:27 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://ekite.info/?p=1004</guid>

					<description><![CDATA[<p>Web Assembly (ou WASM) est un standard du World Wide Web consistant en un bytecode exécuté côté navigateur dans un environnement dédié (sandbox) en complément du Javascript (JS). Ce code bas niveau étant interprété côté navigateur peut être écrit dans différents langages comme le C, C++, RUST, x86 etc. L’interprétation du Web Assembly se fait [&#8230;]</p>
<p>L’article <a href="https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/">Boostez vos applis web avec Web Assembly !</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="post-header" style="text-align: justify;">Web Assembly (ou WASM) est un standard du World Wide Web consistant en un bytecode exécuté côté navigateur dans un environnement dédié (sandbox) en complément du Javascript (JS).</p>
<div class="extract">
<p style="text-align: justify;">Ce code bas niveau étant interprété côté navigateur peut être écrit dans différents langages comme le C, C++, RUST, x86 etc.</p>
<p style="text-align: justify;">L’interprétation du Web Assembly se fait plus bas-niveau que celle du Javascript. Web Assembly utilise de manière plus efficace et directe les ressources disponibles sur la machine sur laquelle il s’exécute (CPU/Mémoire), et permet donc d’atteindre un haut niveau de performances.</p>
<p style="text-align: justify;">Ces performances accrues permettent alors de développer des applications qui n’étaient pas envisageables en Javascript. Par exemple du traitement vidéo en temps réel, comme le floutage d’arrière plan en visio-conférence, ou encore des jeux vidéo.</p>
<p style="text-align: justify;">Pour résumer, WASM a été créé pour tirer parti de la puissance des langages de bas niveau, couplé à la flexibilité de Javascript afin de créer des applications Web plus performantes.</p>
<h2 id="un-peu-de-contexte" style="text-align: justify;">Un peu de contexte</h2>
<p style="text-align: justify;">WASM fut officiellement lancé en 2015 pour la première fois sous forme d’une démonstration faite sous Unity (moteur de jeu multi plateforme) afin de démontrer les performances et les possibilités de l’outil.</p>
<p style="text-align: justify;">Mozilla a sorti asm.js, le 21 mars 2013, un sous-ensemble du langage JS pour améliorer les performances grâce à une couche de traitement binaire. Google et Lars Bak ont mis en place un moteur JS V8, le 2 septembre 2008, qui peut compiler nativement vers de l’assembleur. Ces deux derniers événements sont surtout des améliorations liées à la gestion du langage.</p>
<h2 id="objectifs" style="text-align: justify;">Objectifs</h2>
<p style="text-align: justify;">Les objectifs du WASM sont:</p>
<ul style="text-align: justify;">
<li><b>la rapidité</b> : avoir des performances proches des applications natives (C/C++/Rust) tout en fonctionnant sur un navigateur Web..</li>
<li><b>la portabilité</b> : WebAssembly est conçu de manière à s’associer aux autres technologies web mais aussi de garantir une rétro compatibilité ascendante entre les différentes versions.<br />
Il existe aussi des polyfills pour les navigateurs plus anciens.</li>
<li><b>la sécurité</b> : l’environnement dédié permet de garantir une isolation totale du code et de la machine de l’utilisateur. Par exemple, la partie entrée / sortie (réseau et fichier) est totalement inaccessible (en dehors du module qui l’embarque).</li>
</ul>
<h2 id="la-compilation" style="text-align: justify;">La compilation</h2>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/web-assembly//image-1.jpg" alt="image" /></p>
<p style="text-align: justify;">Fig: Le processus de compilation Web Assembly</p>
<p style="text-align: justify;">Afin d’exécuter du Web Assembly dans une page web, il faut compiler du code écrit dans un langage source (écrit en C, C++, Rust ou autre) vers un code intermédiaire (le bytecode WASM). Le bytecode est situé entre le code d’un langage source et le code machine (binaire). Cela est rendu possible grâce à une infrastructure de compilation <a href="https://ekite.tech/articles/front-end/web-assembly/#llvm">LLVM</a>, qui implémente la traduction d’un AST (<a href="https://ekite.tech/articles/front-end/web-assembly/#syntaxeTree">arbre de syntaxe abstraite</a>) en bytecode WASM.<br />
Le fichier ainsi compilé aura pour extension ‘.wasm’.</p>
<p style="text-align: justify;">L’utilisation d’une LLVM permet d’isoler et d’uniformiser la compilation de tous les langages sources supportés vers ce format. Pour ajouter le support d’un langage, il suffit d’implémenter un programme capable de lire un AST pour le transmettre à la LLVM (transpilateur).<br />
Il est donc possible de créer des compilateurs pour n’importe quel langage. (une liste des langages principaux déjà supportés par WASM se trouve sur le Discord de sa communauté.)</p>
<p style="text-align: justify;">Fonctionnement général du Web Assembly</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/web-assembly//image-2.jpg" alt="image" /></p>
<p style="text-align: justify;">Le code initialement écrit dans un langage haut-niveau est donc compilé dans en un module web-assembly. La compilation produit un fichier binaire ‘.wasm’ contenant le bytecode devant être exécuté dans le navigateur web de l’utilisateur. Les fichiers ‘.wasm’ peuvent alors être distribués aux utilisateurs comme le reste des ressources statiques d’une application web.</p>
<p style="text-align: justify;">Lorsqu’un utilisateur consulte l’application web, les ressources statiques (HTML, CSS, Images) sont téléchargées par son navigateur, ainsi que le code Javascript et les binaires ‘.wasm’. Le navigateur se charge de décoder, compiler et exécuter le code WASM, en parallèle du code Javascript habituel.</p>
<h2 id="les-concepts" style="text-align: justify;">Les concepts</h2>
<ul style="text-align: justify;">
<li>Intégration sur le web WebAssembly est conçu de manière à facilement s’associer aux autres technologies web et de garantir une rétrocompatibilité.</li>
<li>Le fichier compilé est téléchargé, l’exécution est faite nativement sur le poste de l’utilisateur et la mémoire est gérée de manière linéaire.</li>
<li>Bien que l’exécution ait lieu sur le poste de l’utilisateur, WASM ne permet pas l’accès à certains composants du <a href="https://ekite.tech/articles/front-end/web-assembly/#kernel">kernel</a> : Il existe une limite sur la gestion des entrées/sorties. (pour des raisons de sécurité)</li>
<li>Mémoire linéaire La mémoire linéaire est une seule plage d’adresse mémoire sur laquelle on peut agir au fil de l’eau. Vu l’abstraction du sujet, il est mieux de pouvoir se représenter tout ça. Voici un parallèle entre la manière dont est gérée la mémoire en Java (de Jakob Jenkov) et un schéma de la mémoire linéaire (de Meghalee Goswami) :</li>
</ul>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/web-assembly//image-3.jpg" alt="image" /></p>
<p style="text-align: justify;">Avant d’aller à la suite un petit aparté : WASM a mis en place un traducteur du fichier compilé nommé <a href="https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format">Web Assembly Text (WAT)</a>. Le fichier compilé est donc lisible</p>
<ul style="text-align: justify;">
<li>Module Représente un binaire WASM qui a été compilé en code exécutable par le navigateur.</li>
<li>Table Représente un tableau typé de référence ne pouvant être stocké de manière brute en mémoire (pour des raisons de sécurité et de portabilité).</li>
<li>Instance Représente un module associé ainsi que ses états (la mémoire, la table ainsi qu’un ensemble de données importées).</li>
</ul>
<h2 id="les-cas-dusage-de-wasm" style="text-align: justify;">Les cas d’usage de WASM</h2>
<p style="text-align: justify;">Comme expliqué en introduction, WASM permet un haut niveau de performances impossible en Javascript. Ces performances ouvrent la possibilité d’implémenter de nouveaux cas d’usage. Certains de ces cas d’usage sont concrets et déjà mis en place dans certaines applications et jeux. D’autres cas d’usage sont plutôt de l’ordre du POC (Proof Of Concept) ou de la démo :</p>
<ul style="text-align: justify;">
<li>Server-side rendering</li>
<li>OCI (Open Container Initiative)</li>
<li>3D Web View Rendering</li>
<li>Étendre des fonctions JS</li>
<li>Extensions navigateurs (ublock origin)</li>
<li>Utilisation de la 3D</li>
</ul>
<p style="text-align: justify;">Voici des exemples d’applications connues faites à l’aide de WASM :<br />
<a href="https://www.figma.com/fr/blog/webassembly-cut-figmas-load-time-by-3x/">Figma</a>, <a href="https://madewithwebassembly.com/showcase/google-earth">Google Earth</a>, <a href="https://madewithwebassembly.com/showcase/unity">Unity</a>, <a href="https://madewithwebassembly.com/showcase/tensorflow">Unity</a>, etc.</p>
<h3 id="pros" style="text-align: justify;">Pros</h3>
<ul style="text-align: justify;">
<li>Performance</li>
<li>Cross platform</li>
<li>Sécurisation</li>
<li>multiples langages Rust / C++ / C etc.</li>
<li>Portabilité</li>
</ul>
<h3 id="cons" style="text-align: justify;">Cons</h3>
<ul style="text-align: justify;">
<li>Communauté faible</li>
<li>Beaucoups de concepts complexe à appréhender avant de pouvoir faire la moindre chose</li>
<li>N’a pas encore percé malgré son “âge”</li>
<li>Installation plus ou moins aisée en fonction de la plateforme de développement</li>
<li>Pas “user friendly”</li>
</ul>
<h2 id="conclusion" style="text-align: justify;">Conclusion</h2>
<p style="text-align: justify;">Le principal but de WASM est d’apporter un enrichissement de la stack technique de Javascript avec un haut niveau de performances. La plus grande difficulté de WASM reste d’assimiler ses différents principes et concepts généraux</p>
<ul style="text-align: justify;">
<li>devoir utiliser un langage de bas niveau</li>
<li>utiliser un compilateur</li>
<li>avoir affaire à une communauté de niche</li>
<li>assez complexe à appréhender Malgré une adoption encore faible, il n’en reste pas moins fiable que ce soit en termes de sécurité, de performance, de lisibilité et dans certains domaines la seule solution possible afin de garantir un haut niveau de performance sur une application Web.</li>
</ul>
<h2 id="lexique" style="text-align: justify;">Lexique</h2>
<ul style="text-align: justify;">
<li><b><a name="bytecode"></a>bytecode:</b> En informatique, le bytecode (terme anglais signifiant « code en bytes ») est un code intermédiaire entre les instructions machines et le code source, qui n’est pas directement exécutable. Le bytecode (également appelé code portable ou p-code) peut être créé à la volée et résider en mémoire (compilation à la volée, JIT en anglais) ou bien résider dans un fichier, généralement binaire qui représente le programme, tout comme un fichier de code objet produit par un compilateur. <a href="https://fr.wikipedia.org/wiki/Bytecode">Source</a></li>
<li><b><a name="syntaxeTree"></a>Arbre de syntaxe abstraite:</b> Un arbre de syntaxe abstraite (AST) est une manière de représenter la syntaxe d’un langage de programmation sous la forme d’une structure arborescente hiérarchique. Cette structure est utilisée pour générer des tables de symboles pour les compilateurs et la génération de code ultérieure. L’arbre représente toutes les constructions du langage et leurs règles ultérieures. <a href="https://definir-tech.com/arbre-de-syntaxe-abstraite-ast/">Source</a></li>
<li><b><a name="llvm"></a>LLVM:</b> LLVM (anciennement appelé Low Level Virtual Machine en français : « machine virtuelle de bas niveau ») est une infrastructure de compilateur conçue pour l’optimisation du code à la compilation, à l’édition de liens, voire à l’exécution ou durant les « temps morts » d’un programme, quel que soit le langage d’origine. LLVM permet de créer une machine virtuelle pour des langages similaires à Java et sa JVM, un générateur de code pour une architecture matérielle spécifique, et des optimiseurs de compilation indépendants de toute plate-forme et de tout langage. <a href="https://fr.wikipedia.org/wiki/LLVM">Source</a></li>
<li><b><a name="kernel"></a>Kernel:</b> terme anglais signifiant « noyau ». Il constitue le cœur du système qui exploite un ordinateur. Il établit la communication entre la partie matérielle et la partie logicielle de l’appareil. <a href="https://www.jedha.co/blog/kernel-definition-utilite">Source</a></li>
</ul>
<h2 id="sources" style="text-align: justify;">Sources</h2>
<p style="text-align: justify;">The state of WebAssembly (2022)</p>
<ul>
<li style="text-align: justify;"><a href="https://tech.mozfr.org/post/2017/03/08/D-ou-vient-la-rapidite-de-WebAssembly">https://tech.mozfr.org/post/2017/03/08/D-ou-vient-la-rapidite-de-WebAssembly</a></li>
<li style="text-align: justify;"><a href="https://developer.mozilla.org/fr/docs/">https://developer.mozilla.org/fr/docs/</a></li>
<li style="text-align: justify;"><a href="https://emscripten.org/">https://emscripten.org/</a></li>
<li style="text-align: justify;"><a href="https://developer.mozilla.org/fr/docs/">https://developer.mozilla.org/fr/docs/</a></li>
<li style="text-align: justify;"><a href="https://jenkov.com/tutorials/java-concurrency/java-memory-model.html">https://jenkov.com/tutorials/java-concurrency/java-memory-model.html</a></li>
<li style="text-align: justify;"><a href="https://www.youtube.com/watch?v=hSeB9I_mK6A&amp;t=4s">Angry Bots Démo</a></li>
<li style="text-align: justify;"><a href="https://discord.gg/3B8QFXkYTc">lien discord Wasm</a></li>
<li style="text-align: justify;"><a href="https://madewithwebassembly.com/">Applications faite en WASM</a></li>
<li style="text-align: justify;"><a href="https://radu-matei.com/blog/wasm-to-oci/">OCI (Open Container Initiative)</a></li>
<li style="text-align: justify;"><a href="https://study.com/academy/lesson/what-is-the-linear-memory-model-definition-constraints.html">schéma mémoire linéaire de Meghalee Goswami</a></li>
</ul>
</div>
<p>L’article <a href="https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/">Boostez vos applis web avec Web Assembly !</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1004</post-id>	</item>
		<item>
		<title>Design Pattern</title>
		<link>https://ekite.info/2022/06/15/design-pattern/</link>
					<comments>https://ekite.info/2022/06/15/design-pattern/#respond</comments>
		
		<dc:creator><![CDATA[Laurent Duchaussoy]]></dc:creator>
		<pubDate>Wed, 15 Jun 2022 10:36:01 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://ekite.info/?p=1001</guid>

					<description><![CDATA[<p>L’art de savoir utiliser le bon outil au bon moment Les “Design Patterns”, ou “patrons de conception”, sont un ensemble de solutions reconnues, particulièrement dans la programmation orientée objet, comme étant la meilleure réponse afin de résoudre un problème de conception récurrent. Les exemples de patrons peuvent être faits de différentes façons: par le biais [&#8230;]</p>
<p>L’article <a href="https://ekite.info/2022/06/15/design-pattern/">Design Pattern</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="post-header" style="text-align: justify;">L’art de savoir utiliser le bon outil au bon moment</h2>
<div class="extract">
<p style="text-align: justify;">Les “Design Patterns”, ou “patrons de conception”, sont un ensemble de solutions reconnues, particulièrement dans la programmation orientée objet, comme étant la meilleure réponse afin de résoudre un problème de conception récurrent.</p>
<p style="text-align: justify;">Les exemples de patrons peuvent être faits de différentes façons: par le biais de schémas, de pseudo code, la manière d’organiser ses modules ou classes ou à l’aide d’une implémentation proposée.</p>
<h2 id="doù-viennent-ils-" style="text-align: justify;">D’où viennent-ils ?</h2>
<p style="text-align: justify;">Nous pouvons être redevable à Christopher Alexander, anthropologue et architecte Américain pour avoir travaillé sur “la théorie des Pattern Languages” permettant des déclinaisons dans des domaines aussi divers que l’histoire de l’art, l’anthropologie…<br />
Cette façon d’aborder le modèle de conception a été reprise en 1987 par Kent Beck (concepteur d’extrême programming) et Ward Cunningham (inventeur du concept de Wiki) , qui ont décidé d’appliquer ce type de design architectural à l’informatique.<br />
C’est en 1994, à la suite d’un livre nommé <b>Design Patterns: Elements of Reusable Software</b> co-écrit par un collectif (GoF pour Gang of Four) et décrivant plus d’une vingtaine de patrons que ce principe fut réellement reconnu.</p>
<h2 id="voici-les-différents-types-de-patrons-de-conception-" style="text-align: justify;">Voici les différents types de patrons de conception :</h2>
<h3 id="le-patron-de-création-creational-pattern" style="text-align: justify;"><b>Le patron de création</b> (Creational Pattern)</h3>
<p style="text-align: justify;">Il a pour but d’aider à résoudre les problèmes d’instanciation de classes.</p>
<p style="text-align: justify;">Quelques exemples:</p>
<ul style="text-align: justify;">
<li>Singleton</li>
<li>Prototype</li>
<li>Fabrique (Factory)</li>
<li>Fabrique Abstraite (Abstract Factory)</li>
<li>Monteur (Builder)</li>
</ul>
<h3 id="le-patron-de-structure-structural-pattern" style="text-align: justify;"><b>Le patron de structure</b> (Structural Pattern)</h3>
<p style="text-align: justify;">Structurer les classes et objets afin de garder ceux-ci flexibles et efficaces au travers de leur structuration et leur interface.</p>
<p style="text-align: justify;">Quelques exemples:</p>
<ul style="text-align: justify;">
<li>Pont (Bridge)</li>
<li>Façade</li>
<li>Adaptateur (Adapter)</li>
<li>Objet composite</li>
<li>Proxy</li>
<li>Poids-mouche (Flyweight pattern)</li>
<li>Décorateur (Decorator)</li>
</ul>
<h3 id="le-patron-de-comportement-behavioral-pattern" style="text-align: justify;"><b>Le patron de comportement</b> (Behavioral Pattern)</h3>
<p style="text-align: justify;">Permet de modéliser et répartir les responsabilités entre les objets.</p>
<p style="text-align: justify;">Quelques exemples:</p>
<ul style="text-align: justify;">
<li>Chaîne de responsabilité (Chain of Responsibility)</li>
<li>Commande (Command)</li>
<li>Interpréteur (Interpreter)</li>
<li>Itérateur (Iterator)</li>
<li>Médiateur (Mediator)</li>
<li>Mémento</li>
<li>Observateur (Observer)</li>
<li>Etat (State)</li>
<li>Stratégie (Strategy)</li>
<li>Patron de méthode (Template Method Pattern)</li>
<li>Visiteur (Visitor)</li>
</ul>
<h2 id="quand-et-pourquoi-les-utiliser-" style="text-align: justify;">Quand et pourquoi les utiliser ?</h2>
<p style="text-align: justify;">Un développeur ayant une culture du Design Pattern (et sachant quand c’est le moment d’en utiliser un) pourra trouver plus rapidement une solution grâce aux différents paradigmes proposés et ayant déjà fait leurs preuves.</p>
<p style="text-align: justify;">Il permet donc :</p>
<ul style="text-align: justify;">
<li>d’accélérer le processus de développement,</li>
<li>de réduire les bugs potentiels,</li>
<li>de connaître les bonnes pratiques et les pièges à éviter</li>
<li>de s’appuyer sur la capitalisation de l’expérience de la communauté.</li>
</ul>
<p style="text-align: justify;">Il est donc vraiment important de l’intégrer le plus tôt possible dans le processus de conception / développement.<br />
Un bon développeur devra savoir s’arrêter et remettre en question son code lorsqu’il se retrouve face à un problème.<br />
Il faudra se demander “Ne suis-je pas en train de réinventer la roue ? N’existe t’il pas un patron qui pourrait répondre à ma problématique ?”</p>
<h3 id="quelques-exemples" style="text-align: justify;">Quelques exemples</h3>
<p style="text-align: justify;">Il existe de nombreux modèles qui sont souvent très utilisés. La plupart du temps beaucoup de développeurs en utilisent sans savoir qu’il s’agit de modèles de patrons de conception. Voici quelques cas parmis ceux que vous utilisez peut-être sans même le savoir.</p>
<p style="text-align: justify;">Le <b>Modèle Composite</b> : pour représenter des structures arborescentes pour présenter des hiérarchies de composants / composés.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/other/design-pattern//dp-1.jpg" alt="image" /></p>
<p style="text-align: justify;">Le <b>Singleton</b> qui permet de limiter l’instanciation d’une classe à un seul objet.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/other/design-pattern//dp-2.jpg" alt="image" /></p>
<p style="text-align: justify;">Les <b>itérateurs</b> qui permettent de parcourir les éléments d’une collection (liste, arbre etc.).</p>
<p style="text-align: justify;">Le <b>Proxy</b> : substitue une classe à une autre en utilisant la même interface permettant entre autres la sécurité ou l’appel de méthodes à distance.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/other/design-pattern//dp-3.jpg" alt="image" /></p>
<p style="text-align: justify;">Le <b>Décorateur</b> : attacher dynamiquement des nouvelles responsabilités à un objet</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/other/design-pattern//dp-4.jpg" alt="image" /></p>
<p style="text-align: justify;">Le <b>Façade</b> pour simplifier l’utilisation d’une interface complète.</p>
<p style="text-align: justify;">L’<b>Observateur</b> : mécanisme de souscription afin d’envoyer des notifications à plusieurs objets qui sont observés.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/other/design-pattern//dp-5.jpg" alt="image" /></p>
<p style="text-align: justify;">Le <b>Stratégie</b> qui permet de créer des algorithmes séparés dans plusieurs classes autonomes / interchangeables.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/other/design-pattern//dp-6.jpg" alt="image" /></p>
<p style="text-align: justify;">Voici un cas d’usage écrit en Typescript pour savoir quand l’utiliser. Imaginons que l’on souhaite faire plusieurs actions différentes mais avec le même objet, nous pourrions être tenté de faire une classe qui contiendrait toutes ces actions? Oui et non, car celà reviendrait à ne pas respecter un des principes du <a href="https://fr.wikipedia.org/wiki/SOLID_(informatique)">SOLID</a> à savoir le “S” pour Single Responsibility Principe. Prenons le cas d’un site, nous voulons développer une classe qui permet de gérer le paiement.</p>
<div class="language-typescript highlighter-rouge" style="text-align: justify;">
<div class="highlight">
<pre class="EnlighterJSRAW" data-enlighter-language="js">Interface PaymentStrategy {
    public doPay(amount: number): void;
}</pre>
<p>&nbsp;</p>
</div>
</div>
<p style="text-align: justify;">nous allons ensuite créer plusieurs classes correspondant aux différents moyens de paiement :</p>
<div class="language-typescript highlighter-rouge" style="text-align: justify;">
<div class="highlight">
<pre class="EnlighterJSRAW" data-enlighter-language="js">class CreditCardStrategy implements PaymentStrategy {

    //  ici on fait des traitements différents

    public doPay(total: number): void {
        console.log('je paye en carte de crédit un total de', total);
    }		
}</pre>
<pre class="EnlighterJSRAW" data-enlighter-language="js">class OtherPaymentStrategy implements PaymentStrategy {

    //  ici on fait des traitements différents

    public doPay(total: number): void {
        console.log('je paye en X moyen de paiement un total de', total);
    }		
}</pre>
<p>Pour finir nous créerons une classe finale qui va permettre d’utiliser notre stratégie.</p>
</div>
</div>
<div class="language-typescript highlighter-rouge" style="text-align: justify;">
<div class="highlight">
<pre class="EnlighterJSRAW" data-enlighter-language="js">class Cart {

    private total: number;

    constructor(total: number){
        this.total = total;
    }
    
    public getTotalCart(): number {
        return this.total;
    }

    public doPay(PaymentStrategyMethod methodToPay): void {
        methodToPay.doPay(this.getTotalCart());
    }
}</pre>
<p>Afin d’utiliser tout ça on pourrait imaginer un sélecteur lorsque l’on passe à l’étape du paiement qui permettrait de sélectionner son moyen de paiement préféré.</p>
</div>
</div>
<p style="text-align: justify;">exemple :</p>
<div class="language-typescript highlighter-rouge" style="text-align: justify;">
<div class="highlight">
<pre class="EnlighterJSRAW" data-enlighter-language="js">cart = new Cart(199);
cart.doPay(new CreditCardStrategy()); // pour le premier cas
cart.doPay(new OtherPaymentStrategy()); // pour le second cas</pre>
<p>Le <b>Prototype</b> qui permet de créer de nouveaux objets à partir d’objets existants tout en laissant à la classe le soin du type d’objet à créer.</p>
</div>
</div>
<p style="text-align: justify;">La <b>Fabrique</b> pour instancier des objets dans une classe mère tout en laissant aux sous classes le choix des types d’objets à créer.</p>
<p style="text-align: justify;">L’ <b>Object Pool</b> pour économiser le temps d’instanciation et de suppression lorsque de nombreux objets ayant une vie courte seront utilisés.</p>
<h2 id="pour-finir" style="text-align: justify;">Pour finir</h2>
<p style="text-align: justify;">Vous l’aurez compris, le Design Pattern fait partie intégrante des outils indispensables du développeur.<br />
Le but de cet article est de vous donner l’envie de vous y intéresser, de lire, de découvrir et surtout d’apprendre à savoir quand les utiliser afin de répondre au mieux à vos besoins.</p>
<p style="text-align: justify;">Attention toutefois à ne pas tomber dans l’exact contraire, à savoir, l’anti pattern.<br />
Cela reviendrait à faire le mauvais choix et donc à apporter la mauvaise réponse à une problématique donnée.</p>
<p style="text-align: justify;">Voici un exemple développé en Java par Maxime, il combine le Pattern Observer et Builder avec comme thème l’organisation de course à pied.</p>
<p style="text-align: justify;">Lien du repo git : https://github.com/ekit3/design-pattern</p>
<p style="text-align: justify;">Sources ayant servie à écrire l’article et pour aller plus loin :</p>
<p style="text-align: justify;">https://fr.wikibooks.org/wiki/Patrons_de_conception https://ryax.tech/fr/design-pattern-cest-quoi-et-pourquoi-lutiliser/ https://refactoring.guru/ https://madasamy.medium.com/introduction-to-object-oriented-design-patterns-part-i-4e5c7845015b</p>
</div>
<p>L’article <a href="https://ekite.info/2022/06/15/design-pattern/">Design Pattern</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ekite.info/2022/06/15/design-pattern/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1001</post-id>	</item>
		<item>
		<title>Micro Front End</title>
		<link>https://ekite.info/2022/03/02/micro-front-end/</link>
					<comments>https://ekite.info/2022/03/02/micro-front-end/#respond</comments>
		
		<dc:creator><![CDATA[Laurent Duchaussoy]]></dc:creator>
		<pubDate>Wed, 02 Mar 2022 13:05:26 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://ekite.info/?p=997</guid>

					<description><![CDATA[<p>Inspiré par les architectures microservices Back-End, le principe du micro-front end se résume en une agrégation de composants web « isolées ». Voyez la page finale comme un puzzle où chaque morceau serait un composant MFE. Ces composants peuvent être une barre de navigation, un bouton ou tout simplement un texte. Cette découpe apporte en [&#8230;]</p>
<p>L’article <a href="https://ekite.info/2022/03/02/micro-front-end/">Micro Front End</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="post-header" style="text-align: justify;">Inspiré par les architectures microservices Back-End, le principe du micro-front end se résume en une agrégation de composants web « isolées ».</div>
<div class="extract">
<p style="text-align: justify;">Voyez la page finale comme un puzzle où chaque morceau serait un composant MFE. Ces composants peuvent être une barre de navigation, un bouton ou tout simplement un texte. Cette découpe apporte en quelque sorte de la “liberté”.<br />
Ce type d’architecture permet de choisir son framework Front, d’être autonome sur sa livraison et de séparer les projets par équipes au lieu de travailler sur un monolith commun. Le but du MFE est de simplifier la gestion, la maintenabilité, la conception et le découpage des interfaces utilisateurs.<br />
Garantir le bon fonctionnement de la page Web finale demandera de la rigueur et un travail commun.<br />
Il existe une multitude de façon de faire du micro-front end notamment en utilisant des technologies HTML (Iframe) ou un agrégateur en Back End (type Node Js, Java etc..)…</p>
<h2 id="origine" style="text-align: justify;">Origine</h2>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/micro-front-end//image_1.jpg" alt="image" /></p>
<p style="text-align: justify;">Le terme est apparu dans les RADAR techniques de Thoughtworks en 2016 mais c’est en 2019 que les micro-front end commencent à émerger.</p>
<h2 id="thoughtworks--qui-sont-ils-" style="text-align: justify;">Thoughtworks : qui sont-ils ?</h2>
<p style="text-align: justify;">C’est un organisme public qui se concentre sur la mise en place de concept technologique.<br />
Ils mettent à disposition la conception et participe à la livraison de logiciels, d’outils, ils proposent également un service de conseil informatique.</p>
<h2 id="que-sest-il-passé-entre-lapparition-du-terme-et-sa-réelle-émergence-" style="text-align: justify;">Que s’est-il passé entre l’apparition du terme et sa réelle émergence ?</h2>
<p style="text-align: justify;">Thoughtworks a mis à disposition une recherche réalisée dans leurs équipes. Cette recherche porte sur la mise en place des micro-services au niveau de l’UI. Thoughtworks a partagé l’évolution conceptuelle des micro-front end. En Novembre 2016, arrivent les premières idées à propos de ce type d’architecture (des idées mais aussi des POC et des phases d’évaluation).</p>
<p style="text-align: justify;">Les ingénieurs de Thoughtworks pensent qu’il serait intéressant d’appliquer un système de micro-services au niveau de l’UI afin d’éviter les monolithes. Ils mettent en avant le fait que l’approche BFF (back-for-front : couche permettant la communication entre le back-end et le front-end) en serait largement bénéficiaire.</p>
<p style="text-align: justify;">S’ensuit une communication en Mai 2018 (lors de la phase d’essai), celle-ci nous informe que des équipes ont mis en place des structures monolithiques au niveau des services back. Ils font un petit rappel afin d’expliquer l’objectif des micro-front end : obtenir des composants/pages isolés et indépendants les uns des autres et qui appartiennent à différentes équipes.</p>
<p style="text-align: justify;">En Avril 2019 débute la phase d’émergence, à ce stade, Thoughtworks pense que la mise en place des micro-front end représente un bénéfice certain pour les équipes de développement. A partir de ce moment ils commencent à informer et à conseiller sur les implémentations liées aux micro-front end.</p>
<h2 id="et-si-jai-rien-compris--petit-résumé" style="text-align: justify;">“Et si j’ai rien compris ?”: Petit Résumé</h2>
<p style="text-align: justify;">Le processus lié à ce concept, dans un format de type release/actualisation semble venir de la frustration de certaines équipes vis-à-vis des monolithes.</p>
<p style="text-align: justify;">Les “assessments” donne pour définition des structures monolithiques Front : « large and sprawling browser applications that are as difficult to maintain and evolve as the monolithic server-side applications we’ve abandoned »</p>
<p style="text-align: justify;">Soit en français : « Des applications “navigateurs” volumineuses et entremêlées étant aussi difficiles à maintenir et à faire évoluer que des applications back monolithiques déjà abandonnées. »</p>
<h2 id="mise-en-place" style="text-align: justify;">Mise en place</h2>
<h3 id="--la-gouvernance" style="text-align: justify;">&#8211; La Gouvernance</h3>
<p style="text-align: justify;">La gouvernance est un élément indispensable lors de l’initialisation d’un projet micro-front end. La liberté provenant de ce type d’architecture est à double tranchant. Une plus grande liberté permet de réaliser plus facilement un ensemble de tâches mais c’est aussi un moyen de surcharger votre application.</p>
<p style="text-align: justify;">Voici 3 axes de réflexions afin de mieux comprendre la problématique :</p>
<h3 id="--le-premier--déterminer-le-scope" style="text-align: justify;">&#8211; Le premier : déterminer le scope</h3>
<p style="text-align: justify;">Réfléchissez à la taille de vos composants (comme ce qui est fait pour les briques dans un modèle microservice en back-end). Cela permet ainsi de réfléchir à la taille de vos équipes et le nombre de ressources à mobiliser. (Votre budget vous remerciera.)</p>
<h3 id="--le-second--il-en-faut-un-pour-les-gouverner-tous" style="text-align: justify;">&#8211; Le second : il en faut un pour les gouverner tous.</h3>
<p style="text-align: justify;">L’indépendance des composants peut faire perdre de vue l’objectif commun: la réalisation d’une interface graphique pour une application. Cette application a des attentes en termes d’objectifs, de performances, ou encore d’image (marketing etc…).<br />
Il faut, par exemple, veiller à avoir une équipe responsable du partage de la connaissance et de la culture afin de ne pas diviser “pour mieux régner” mais plutôt de “réunir pour mieux réussir”. Il est également important d’imaginer la mise en place de tests d’intégrations globaux au niveau du plus haut parent de la famille des composants.<br />
(Imaginez une application dont chaque composant possède sa propre charte graphique façon sapin de noël..)</p>
<p style="text-align: justify;">Une solution commune dite “Core” se matérialise par une équipe gérant le noyau du site, elle régit les librairies de bases, la création, la gestion des outils (e.g.. Eventbus), la charte graphique etc.<br />
Les composants “enfants” hériteront de tout ce qui aura été prévu et partagé par le noyau applicatif.</p>
<h3 id="--la-troisième--comment-bien-séquiper-pour-la-performance-" style="text-align: justify;">&#8211; La troisième : comment bien s’équiper pour la performance ?</h3>
<p style="text-align: justify;">Il faut distinguer deux aspects lorsque l’on pense à la qualité des MFE : la performance de chacun d’entre eux mais également du site global en termes d’affichage et de rendu. Avoir de multiples composants, c’est accepter d’avoir un possible laps de temps au moment de la création/initialisation de chacun.<br />
Il faut également penser au démarrage et à l’intégration de nouveaux MFE dans l’architecture globale, que ce soit en termes de cohérence, de qualité de code, de sécurité, de chaîne d’intégration et de déploiement.<br />
Pour éviter cela, il faut mettre en relation des experts techniques (architectes, leader, etc.) capables de trouver des solutions performantes et de partager les bonnes pratiques à tous ces différents niveaux.</p>
<p style="text-align: justify;"><b>Point d’attention : le runtime</b><br />
Plus il y a de frameworks, plus il y aura de runtimes et donc plus de risques que le poids de la page soit augmenté et sa performance dégradée.<br />
Il faudra limiter la diversité des frameworks utilisés.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/micro-front-end//image_2.jpg" alt="image" /></p>
<p style="text-align: justify;">Ce graphique montre la consommation en runtime pour chaque build avec le runtime Svelte. On dénote qu’avec à peine 10 composants on consomme moins qu’un Angular pour ne citer que lui.</p>
<h2 id="que-doit-on-retenir-" style="text-align: justify;">Que doit-on retenir ?</h2>
<p style="text-align: justify;">Pour résumer en un seul mot : “Communiquez !”<br />
L’indépendance apportée par les MFE peut desservir, chaque équipe faisant ses composants de manière “isolée”, si personne ne s’assure de la cohérence globale cela peut rapidement devenir néfaste.<br />
Sans communication et gouvernance, la page finale peut vite se retrouver alourdie (du au fait d’un ensemble de technologies mélangées et de la multiplicité des frameworks utilisés) ou chartée de façon bien différente et donc perdre de la cohérence (notamment via le design).<br />
Tous ces risques peuvent vite amener à regretter les monolithes.</p>
<p style="text-align: justify;"><b>Schéma d’archi<br />
</b></p>
<p style="text-align: justify;">Voici un exemple qui schématise une architecture micro front avec trois MFE. Chaque composant est développé avec une techno différente (Vue, Angular, React) et géré par une équipe spécifique, possédant ses outils de CI/CD, de tests, etc.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/micro-front-end//image_3.jpg" alt="image" /></p>
<h2 id="framework-technos-et-outils" style="text-align: justify;">Framework, technos et outils</h2>
<p style="text-align: justify;">Une pluralité de frameworks qui vont vous faciliter le développement des micro frontend est disponible : chacun a sa propre philosophie dans la manière d’aborder les concepts liés aux micro frontend.<br />
Parmi les plus connus on peut citer Single-spa, Bit, Qiankun, Open components …</p>
<h2 id="proscons" style="text-align: justify;">Pros/Cons</h2>
<p style="text-align: justify;">De grandes entreprises ont choisi de se lancer dans les micro frontend, comme IKEA sur son magasin en ligne, Spotify avec son application desktop ou encore Leroy Merlin avec son site Web et Kobi.</p>
<p style="text-align: justify;">Pour chacune de ces applications, des bénéfices se sont rapidement fait sentir, par exemple à travers leur vie dans les différentes plateformes, à travers l’expérience de l’utilisateur ou encore sur une meilleure réalisation des développements grâce à des équipes plus réduite mais concentrées sur une seule feature.</p>
<p style="text-align: justify;"><b>Les avantages et inconvénients des MFE sont fortement liés.</b></p>
<p style="text-align: justify;">Le découpage du code</p>
<ul style="text-align: justify;">
<li><b>Pros</b> : plus simple, plus léger, c’est un vrai bonus de lisibilité et de maintenabilité.</li>
<li><b>Cons</b> : même si la compréhension unitaire des composants est plus simple, la complexité globale de l’application peut en revanche être plus floue.</li>
</ul>
<p style="text-align: justify;">La liberté des choix technologiques</p>
<ul style="text-align: justify;">
<li><b>Pros</b> : plus de technologies disponibles implique plus de possibilités.</li>
<li><b>Cons</b> : cela peut induire des problèmes de performances, de compatibilité voire de maintenabilité.</li>
</ul>
<p style="text-align: justify;">L’indépendance et l’autonomie des équipes</p>
<ul style="text-align: justify;">
<li><b>Pros</b> : cet aspect améliore les conditions et la qualité de développement.</li>
<li><b>Cons</b> : la relation inter-équipes ne doit pas être négligée. Le risque étant de s’éloigner de l’objectif principal, d’avoir des demandes de refontes (e.g : ne correspond pas à l’attente des composants consommateurs) et même des migrations d’outils.</li>
</ul>
<p style="text-align: justify;">L’indépendance des livraisons</p>
<ul style="text-align: justify;">
<li><b>Pros</b> : le choix des outils d’intégration et de déploiement continue est possible. Cela permet de livrer uniquement certaines parties de l’application.</li>
<li><b>Cons</b> : mais cela implique une gestion de la qualité, du release management ou software delivery global plus complexe à mettre en place.</li>
</ul>
<p style="text-align: justify;">Il est nécessaire de mettre en place une gouvernance forte pour garantir une cohérence dans les choix pris lors du développement des différents composants. (Objectif : assurer une qualité et maintenabilité globale).</p>
<p style="text-align: justify;">Links : https://www.infoq.com/news/2019/04/real-world-framework-benchmark/</p>
</div>
<p>L’article <a href="https://ekite.info/2022/03/02/micro-front-end/">Micro Front End</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ekite.info/2022/03/02/micro-front-end/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">997</post-id>	</item>
		<item>
		<title>PWA : Innovation ou solution de consolation ?</title>
		<link>https://ekite.info/2021/09/29/pwa-innovation-ou-solution-de-consolation/</link>
					<comments>https://ekite.info/2021/09/29/pwa-innovation-ou-solution-de-consolation/#respond</comments>
		
		<dc:creator><![CDATA[Romain Vermeeren]]></dc:creator>
		<pubDate>Wed, 29 Sep 2021 12:45:20 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://ekite.info/?p=990</guid>

					<description><![CDATA[<p>Le terme PWA est entré depuis quelques années dans le long répertoire des acronymes liés au numérique. Mais qu’est ce qu’une Progressive Web App ? Pour certains c’est la promesse d’une expérience mobile responsive boostée par les fonctionnalités de votre téléphone. Elle serait facile à mettre en place, de faible coût et elle n’aurait plus rien à [&#8230;]</p>
<p>L’article <a href="https://ekite.info/2021/09/29/pwa-innovation-ou-solution-de-consolation/">PWA : Innovation ou solution de consolation ?</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/pwa-innovation-or-consolation//pwa-dbz-img.jpg" alt="image" /></p>
<p style="text-align: justify;">Le terme PWA est entré depuis quelques années dans le long répertoire des acronymes liés au numérique. Mais qu’est ce qu’une <code class="highlighter-rouge">Progressive Web App</code> ?</p>
<p style="text-align: justify;">Pour certains c’est la promesse d’une expérience mobile responsive boostée par les fonctionnalités de votre téléphone. Elle serait facile à mettre en place, de faible coût et elle n’aurait plus rien à envier aux applications natives.</p>
<p style="text-align: justify;">Afin de vous éclairer sur le sujet et de vous permettre de vous faire votre propre avis, vous trouverez ici les informations qui nous paraissent pertinentes pour une première approche fonctionnelle du sujet.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/pwa-innovation-or-consolation//pwa-logo.png" alt="image" /></p>
<h2 id="mais-doù-ça-vient-" style="text-align: justify;">Mais d’où ça vient ?</h2>
<p style="text-align: justify;">La PWA est une suite logique de l’évolution du web sur mobile. Avant 2007 et l’arrivée des smartphones, l’accès mobile au web se fait par le WAP (Wireless Application Protocol). Il permet le téléchargement d’applications hors ligne non, dépendantes d’un réseau instable et peu performant.</p>
<p style="text-align: justify;">Après 2007 et avec la popularisation des smartphones arrive l’essor du développement mobile. Dès lors des solutions WEB tournent sur des technologies dynamiques exécutées côté serveur. Steve Jobs imagine déjà des applications proches du principe de la PWA mais les principaux acteurs du marché font alors le choix de partir sur le développement d’applications natives permettant une meilleure UX et une meilleure intégration avec nos téléphones.</p>
<p style="text-align: justify;">C’est en 2010 que l’arrivée de HTML5 et CSS3 va relancer les travaux autour d’applications hybrides et la mise en place de design responsive. On cherche alors à mutualiser le développement desktop et mobile.</p>
<p style="text-align: justify;">Le terme PWA arrive en 2015 grâce à Alex Russell, l’un des ingénieurs ayant conceptualisé la solution chez Google. PWA: “Progressive Web Apps: Escaping Tabs Without Losing Our Soul”</p>
<p style="text-align: justify;">Aujourd’hui les PWA sont supportées par une majorité de grandes entreprises de la tech (Google, Microsoft, Samsung, Mozilla, etc.) et utilisées par de nombreuses marques grand public (Starbucks, Pinterest, Spotify, etc.).</p>
<h2 id="oui-mais-ça-consiste-en-quoi-" style="text-align: justify;">Oui mais ça consiste en quoi ?</h2>
<p style="text-align: justify;">Les Progressive Web Apps sont des versions optimisées d’un site web pour le mobile. Elles intégrent des fonctionnalités du téléphone, qui, jusqu’à aujourd’hui étaient réservées aux applications natives : appareil photo, mode hors ligne, raccourci écran d’accueil etc. Elles sont considérées comme des <code class="highlighter-rouge">solutions Hybrides</code>. Supportées par le navigateur du téléphone, elles ne nécessitent pas de développement spécifique à l’OS et permettent la mutualisation des coûts de développement mobile et desktop.</p>
<h3 id="1--un-service-worker-au-coeur-de-lapplication" style="text-align: justify;">1- Un service Worker au coeur de l’application</h3>
<p style="text-align: justify;">Composant fondamental de la PWA, le service Worker est un script exécuté en tâche de fond qui va apporter toute l’intelligence à la PWA. Il intercepte les requêtes réseaux et y applique des configurations. Il permet :</p>
<ul style="text-align: justify;">
<li>Mise en cache du contenu</li>
<li>Synchronisation des données en arrière plan</li>
<li>Push de notifications</li>
<li>L’utilisation des fonctionnalités de votre téléphone</li>
<li>L’exécution d’actions hors ligne (comme pousser une bannière lorsque le téléphone est hors ligne)</li>
<li>…</li>
</ul>
<h3 id="2--un-manifest-pour-une-expérience-mobile" style="text-align: justify;">2- Un Manifest pour une expérience mobile</h3>
<p style="text-align: justify;">Le manifest, en plus du service worker, va permettre de transformer un site en PWA et de simuler une expérience native. Il s’agit d’un simple fichier JSON dans lequel est configuré l’application et qui permet de la personnaliser. Les utilisateurs pourront également installer directement un site web sur leur mobile ou leur desktop sans passer par les stores d’applications.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="json">{
    "name": "Blog Ekite",
    "short_name": "Blog Ekite",
    "description": "Blog Ekite.",
    "icons": [
        {
            "src": "assets/images/icons/icon-48.png",
            "sizes": "48x48",
            "type": "image/png"
        },
        {
            "src": "assets/images/icons/icon-72.png",
            "sizes": "72x72",
            "type": "image/png"
        },
        {
            "src": "assets/images/icons/icon-96.png",
            "sizes": "96x96",
            "type": "image/png"
        },
        {
            "src": "assets/images/icons/icon-128.png",
            "sizes": "128x128",
            "type": "image/png"
        },
        {
            "src": "assets/images/icons/icon-192.png",
            "sizes": "192x192",
            "type": "image/png"
        },
        {
            "src": "assets/images/icons/icon-384.png",
            "sizes": "384x384",
            "type": "image/png"
        },
        {
            "src": "assets/images/icons/icon-512.png",
            "sizes": "512x512",
            "type": "image/png"
        }
    ],
    "start_url": "/jekyll-site/",
    "display": "fullscreen",
    "theme_color": "#000000",
    "background_color": "#000000"
}
</pre>
<p style="text-align: justify;">Configuration du raccourci de l’application mobile</p>
<ul style="text-align: justify;">
<li>Nom</li>
<li>URL</li>
<li>Icone</li>
<li>etc.</li>
</ul>
<h3 id="3--des-apis-html5-pour-les-fonctionnalités" style="text-align: justify;">3- Des APIs HTML5 pour les fonctionnalités</h3>
<p style="text-align: justify;">Le développement de PWA est grandement facilité par HTML5 qui propose la mise à disposition de nombreuses API aux navigateurs. Ces API permettent, entre autres choses, l’utilisation de fonctionnalités telles que la géolocalisation, le push, le statut de la batterie, le presse papier, l’orientation de l’écran, les vibrations du mobile etc. La liste détaillée de ces fonctionnalités est disponible sur ce <a href="https://whatwebcando.today/" target="_blank" rel="noopener">site</a>.</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/pwa-innovation-or-consolation//pwa-lighthouse.png" alt="image" /></p>
<p style="text-align: justify;">Lighthouse est un plugin Chrome qui permet d’auditer un site web et qui indique son niveau de compatibilité avec la PWA. Ce plugin liste l’ensemble des caractéristiques officielles qui permettent d’évaluer la performance des applications.</p>
<p style="text-align: justify;"><b>Progressive</b></p>
<blockquote><p>Les applications web progressives fonctionnent sur n’importe quel périphérique et intègrent les fonctionnalités disponibles du navigateur et de l’appareil utilisé.</p></blockquote>
<p style="text-align: justify;"><b>Sécurisée</b></p>
<blockquote><p>La mise en place d’un protocole HTTPS permet aux PWA d’être fiables et sûres, ce qui répond aux problématiques de sécurité des échanges entre les utilisateurs et les sites</p></blockquote>
<p style="text-align: justify;"><b>Engageante</b></p>
<blockquote><p>Elles proposent une expérience utilisateur immersive en plein écran et facilitent le réengagement grâce à l’envoi de notifications push web.</p></blockquote>
<p style="text-align: justify;"><b>Installable</b></p>
<blockquote><p>L’utilisation d’un fichier Manifest permet aux PWA de proposer, à l’instar d’une application mobile native, l’installation de l’application sur l’écran d’accueil du mobile.</p></blockquote>
<p style="text-align: justify;"><b>Rapidité</b></p>
<blockquote><p>D’après Google, 53 % des internautes abandonnent un site si son chargement prend plus de trois secondes. Une fois le site chargé, la navigation doit se faire de manière rapide et fluide.</p></blockquote>
<p style="text-align: justify;"><b>Optimisation pour le référencement</b></p>
<blockquote><p>Utilisant les technologies du web, les progressive web app peuvent être référencées sur les moteurs de recherche de la même manière que n’importe quel site web classique.</p></blockquote>
<p style="text-align: justify;"><b>Indépendante de la connexion</b></p>
<blockquote><p>Grâce à la gestion du cache via l’utilisation d’un Service Worker, une fois le contenu chargé, il sera possible de le consulter même dans les zones de faible connexion réseau.</p></blockquote>
<p style="text-align: justify;">Sur le sujet de la mise en place et de la compatibilité avec les langages du marché, rien de particulier, la liste des frameworks est disponible ici : <a href="https://www.hnpwa.com/" target="_blank" rel="noopener">HNPWA</a></p>
<h2 id="donc-pas-mal-davantages-" style="text-align: justify;">Donc pas mal d’avantages !</h2>
<p style="text-align: justify;">Les solutions PWA sont assez simples à mettre en place. Elles ont une marge d’évolution relativement importante selon le temps et l’argent qui y sont consacrés. D’un point de vue utilisateur, l’installation se fait de façon intuitive, sans même devoir passer par les stores. L’expérience utilisateur peut devenir aussi immersive que sur une application native.</p>
<p style="text-align: justify;">Les principaux avantages de la PWA sont, sans aucun doute, la fluidité, la fiabilité et la capacité à proposer des parcours hors ligne (grâce au chargement progressif) ainsi que l’optimisation de l’affichage sur mobile. La co-construction avec le site web facilite l’organisation des équipes et permet la mutualisation des coûts de développement.</p>
<p style="text-align: justify;">Sur un marché qui ne pense plus seulement à l’expérience utilisateur mais aussi à l’impact environnemental, ces différents avantages s’ancrent parfaitement dans des projets d’éco-conception : moins de données à héberger, un design optimisé pour une utilisation réduite de la batterie du mobile et surtout des phases de développement réduites contrairement à des projets d’application native.</p>
<h2 id="mais-aussi-des-limites" style="text-align: justify;">Mais aussi des limites.</h2>
<p style="text-align: justify;">Vous avez peut-être entendu qu’Apple et PWA ne faisaient pas bon ménage. Malheureusement comme vous pourrez le constater dans ce <a href="https://www.goodbarber.com/widget/browsers/" target="_blank" rel="noopener">tableau des compatibilités</a>, les fonctionnalités disponibles sur Iphone et Safari sont, aujourd’hui encore, très limitées. Il s’agit là du principal frein à la substitution des applications natives pour les entreprises fortement implantées sur mobile.</p>
<p style="text-align: justify;">Il est également à noter que la mise en place d’une PWA nécessite une sécurisation de l’ensemble des pages de votre site par le protocole https.</p>
<h2 id="qui-fait-de-la-pwa-" style="text-align: justify;">Qui fait de la PWA ?</h2>
<p style="text-align: justify;">Voici 2 exemples de PWA réussies:</p>
<p style="text-align: justify;"><b>Twitter avec twitter lite:</b></p>
<p style="text-align: justify;">Objectifs:</p>
<ul style="text-align: justify;">
<li>Améliorer l’expérience sur les connexions limitées.</li>
<li>Simplifier l’accès sans téléchargement sur les stores</li>
<li>Optimiser par le cache et la taille des images</li>
<li>Charger en amont pour une navigation hors ligne</li>
</ul>
<p style="text-align: justify;">Résultat:</p>
<ul style="text-align: justify;">
<li>65 % d’augmentation de pages vues par session</li>
<li>75 % d’augmentation de tweets envoyés</li>
<li>20 % de baisse du taux de rebond (comparé au site mobile avant PWA)</li>
</ul>
<p style="text-align: justify;"><b>ALIBABA (2016)</b> Objectifs:</p>
<ul style="text-align: justify;">
<li>Augmenter le taux de conversion sur mobile</li>
<li>Personnaliser l’ergonomie et le design sur la PWA</li>
<li>Optimiser le chargement des images (nombreuses) pour se déployer sur les pays à faibles connections</li>
<li>Fidéliser avec la proposition d’ajout du site sur l’écran d’accueil</li>
</ul>
<p style="text-align: justify;">Résultat:</p>
<ul style="text-align: justify;">
<li>76% de plus sur le taux de conversions sur tous les navigateurs (30% sur Android)</li>
<li>14% d’utilisateurs actifs mensuels en plus sur iOS</li>
<li>4X plus d’ajout à l’écran d’accueil</li>
</ul>
<h2 id="en-conclusion" style="text-align: justify;">En conclusion</h2>
<p style="text-align: justify;">La PWA n’est ni une évolution des solutions mobiles natives ni une solution de consolation.<br />
Il s’agit d’une vraie réponse à des problématiques de déploiement sur mobile.<br />
Elle offre une expérience immersive et intuitive pour l’utilisateur. Sa mise en place est accessible à n’importe quelle taille de projet web.</p>
<p style="text-align: justify;">Elle permet de rapidement mutualiser les coûts grâce à sa facilité de transformation. Malheureusement son utilisation pour le développement de parcours innovants reste restreinte à cause de sa non-compatibilité avec les fonctionnalités natives des appareils IOS.</p>
<p style="text-align: justify;">Aujourd’hui, la montée en puissance de cette technologie semble être conditionnée par Apple et leur volonté ou non d’améliorer la prise en charge des PWA. Après 5 ans d’existence, cette technologie n’a toujours pas réussi à percer.</p>
<h4 style="text-align: justify;">Glossaire:</h4>
<p style="text-align: justify;"><b>WAP:</b>C’est le premier protocole de communication qui a permis de relier le réseau mobile à internet</p>
<p style="text-align: justify;"><b>Application Hybride:</b> contrairement aux applications natives qui utilisent directement les composants du device (mobile/tablette..), les applications hybrides utilisent le navigateur WEB embarqué dans le device et les technologies qu’on y retrouve pour le développement web, HTML, CSS, JavaScript</p>
<p style="text-align: justify;"><b>Responsive:</b> le Responsive Web Design (RWD) est une technique qui consiste à ajuster automatiquement l’affichage d’une page web à la taille de l’écran du terminal utilisé</p>
<p style="text-align: justify;"><b>Script:</b> suite de commandes qui permettent d’automatiser une tâche</p>
<p style="text-align: justify;"><b>Stores d’application:</b> bibliothèque telle que l’Apple store ou le Play store qui permettent de trouver et d’installer des applications sur un téléphone</p>
<p style="text-align: justify;"><b>Framework:</b> le regroupement d’outils qui facilitent le développement de logiciels et la création de systèmes (aussi appelé environnement de développement)</p>
<h4 style="text-align: justify;">Sources:</h4>
<ul>
<li style="text-align: justify;">https://blog.octo.com/cest-quoi-une-progressive-web-app-pwa/</li>
<li style="text-align: justify;">https://fr.wikipedia.org/wiki/Progressive_web_app</li>
<li style="text-align: justify;">https://developer.mozilla.org/fr/docs/Web/Progressive_web_apps</li>
<li style="text-align: justify;">https://www.novaway.fr/blog/tech/3-exemples-pwa</li>
<li style="text-align: justify;">https://www.goodbarber.com/blog/progressive-web-apps-browser-support-compatibility-a883/</li>
<li style="text-align: justify;">https://developers.google.com/web/showcase/2017/twitter</li>
<li style="text-align: justify;">https://developers.google.com/web/showcase/2016/flipkart</li>
</ul>
<p>L’article <a href="https://ekite.info/2021/09/29/pwa-innovation-ou-solution-de-consolation/">PWA : Innovation ou solution de consolation ?</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ekite.info/2021/09/29/pwa-innovation-ou-solution-de-consolation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">990</post-id>	</item>
	</channel>
</rss>
