<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Général JavaScript</title>
		<link>https://www.developpez.net/forums/</link>
		<description>Forum sur le développement JavaScript. Avant de poster : Cours JavaScript, FAQ JavaScript et Sources JavaScript.</description>
		<language>fr</language>
		<lastBuildDate>Thu, 05 Nov 2026 07:33:02 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - Général JavaScript</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title>Afficher/masquer un mot de passe</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2186398&amp;goto=newpost</link>
			<pubDate>Wed, 28 Oct 2026 20:06:48 GMT</pubDate>
			<description>Bonjour à tous, 
Dans le code...</description>
			<content:encoded><![CDATA[<div>Bonjour à tous,<br />
Dans le code suivant, l'affichage fonctionne mais pas le masquage, autrement dit c'est toujours la condition de la ligne 11 qui s'exécute, la ligne 16 n'étant jamais exécutée.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">const</span>
	toggle		= <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;[alt='eye.png']&quot;</span><span class="br0">&#41;</span>
	,pwd		= <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;[name='pw']&quot;</span><span class="br0">&#41;</span>
	;
&nbsp;
toggle.<span style="color: #0080ff;">addEventListener</span><span class="br0">&#40;</span><span style="color: #FF0000;">'click'</span>, <span style="color: #0000ff;">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>pwd.type = <span style="color: #FF0000;">&quot;password&quot;</span><span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		pwd.type = <span style="color: #FF0000;">'text'</span>;		<span style="color: #808080;">// OK</span>
		<span style="color: #0080ff;">alert</span><span class="br0">&#40;</span><span style="color: #cc66cc;">11</span><span class="br0">&#41;</span>;
	<span class="br0">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span class="br0">&#123;</span>
		pwd.type = <span style="color: #FF0000;">'password'</span>;
		<span style="color: #0080ff;">alert</span><span class="br0">&#40;</span><span style="color: #cc66cc;">16</span><span class="br0">&#41;</span>;				<span style="color: #808080;">// jamais appel&eacute;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
Avec le code source correspondant. Dans ce code, j'ai remplacé le texte par des .... . Je ne sais pas si j'ai bien fait. :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
&lt;!DOCTYPE html&gt;
&nbsp;
&lt;html lang=<span style="color: #FF0000;">&quot;fr&quot;</span>&gt;
&nbsp;
&lt;head&gt;
    &lt;meta charset=<span style="color: #FF0000;">&quot;UTF-8&quot;</span>&gt;
    &lt;title&gt;....&lt;/title&gt;
    &lt;meta <span style="color: #0080ff;">name</span>=<span style="color: #FF0000;">&quot;description&quot;</span> content=<span style="color: #FF0000;">&quot;....&quot;</span>&gt;
	&lt;meta <span style="color: #0080ff;">name</span>=<span style="color: #FF0000;">&quot;author&quot;</span> content=<span style="color: #FF0000;">&quot;....&quot;</span>&gt;
	&lt;meta <span style="color: #0080ff;">name</span>=<span style="color: #FF0000;">&quot;copyright&quot;</span> content=<span style="color: #FF0000;">&quot;....&quot;</span>&gt;
&nbsp;
	&lt;meta http-equiv=<span style="color: #FF0000;">&quot;Expires&quot;</span> content=<span style="color: #FF0000;">&quot;-1&quot;</span> &gt;
	&lt;meta http-equiv=<span style="color: #FF0000;">&quot;cache-control&quot;</span> content=<span style="color: #FF0000;">&quot;no-cache, no-store, must-revalidate&quot;</span>&gt;
&nbsp;
	&lt;base href=<span style="color: #FF0000;">&quot;http://mon.site/&quot;</span>&gt;
&nbsp;
	&lt;<span style="color: #0080ff;">link</span> rel=<span style="color: #FF0000;">&quot;stylesheet&quot;</span> href=<span style="color: #FF0000;">&quot;https://cdn.datatables.net/1.13.6/css/jquery.dataTables.css&quot;</span>&gt;
	&lt;<span style="color: #0080ff;">link</span> rel=<span style="color: #FF0000;">&quot;stylesheet&quot;</span> media=<span style="color: #FF0000;">&quot;all&quot;</span> type=<span style="color: #FF0000;">&quot;text/css&quot;</span> href=<span style="color: #FF0000;">&quot;css/main.css&quot;</span>&gt;
	&lt;<span style="color: #0080ff;">link</span> rel=<span style="color: #FF0000;">&quot;stylesheet&quot;</span> media=<span style="color: #FF0000;">&quot;print&quot;</span> type=<span style="color: #FF0000;">&quot;text/css&quot;</span> href=<span style="color: #FF0000;">&quot;css/print.css&quot;</span>&gt;
&nbsp;
	<span style="color: #0000ff;">&lt;script&gt;</span><span style="color: #0000ff;">const</span> lang = <span style="color: #FF0000;">&quot;fr&quot;</span>;<span style="color: #0000ff;">&lt;/script&gt;</span>
	<span style="color: #0000ff;">&lt;script</span><span style="color: #0080ff;"> type</span>=<span style="color: #FF0000;">&quot;module&quot;</span> src=<span style="color: #FF0000;">&quot;http://omnes.proginet//js/clock.js&quot;</span>&gt;<span style="color: #0000ff;">&lt;/script&gt;</span>
&lt;/head&gt;
&nbsp;
&nbsp;
&lt;body&gt;
&nbsp;
&lt;header&gt;
	&lt;div <span style="color: #0000ff;">class</span>=<span style="color: #FF0000;">&quot;displTimer&quot;</span>&gt;
		&lt;span id=<span style="color: #FF0000;">&quot;timer&quot;</span>&gt;&lt;/span&gt; 	&lt;/div&gt;
	&lt;h1&gt;....&lt;/h1&gt;
	&lt;img src=<span style="color: #FF0000;">&quot;images/....&quot;</span> alt=<span style="color: #FF0000;">&quot;....&quot;</span>&gt;
&lt;/header&gt;
&nbsp;
	&lt;div id=<span style="color: #FF0000;">&quot;mainSection&quot;</span>&gt;
&nbsp;
&lt;div&gt;
	&lt;nav <span style="color: #0000ff;">class</span>=<span style="color: #FF0000;">&quot;mainNav&quot;</span>&gt;
		&lt;ul&gt;
			&lt;li&gt;&lt;a href=<span style="color: #FF0000;">&quot;index.php&quot;</span>&gt;Accueil&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=<span style="color: #FF0000;">&quot;index.php?page=list&quot;</span>&gt;Application&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=<span style="color: #FF0000;">&quot;index.php?page=gnu&quot;</span>&gt;Conditions d<span style="color: #FF0000;">'utilisation&lt;/a&gt;&lt;/li&gt;</span>
<span style="color: #FF0000;">								&lt;/ul&gt;</span>
<span style="color: #FF0000;">	&lt;/nav&gt;</span>
&nbsp;
<span style="color: #FF0000;">	&lt;div class=&quot;center languageIcons&quot;&gt;</span>
<span style="color: #FF0000;">		&lt;a href=&quot;index.php?language=fr&quot;&gt;&lt;img src=&quot;images/fr.png&quot; alt=&quot;fr.png&quot;&gt;&lt;/a&gt;&lt;br&gt;</span>
<span style="color: #FF0000;">		&lt;a href=&quot;index.php?language=de&quot;&gt;&lt;img src=&quot;images/de.png&quot; alt=&quot;de.png&quot;&gt;&lt;/a&gt;&lt;br&gt;</span>
<span style="color: #FF0000;">	&lt;/div&gt;</span>
&nbsp;
<span style="color: #FF0000;">&lt;/div&gt;</span>
&nbsp;
<span style="color: #FF0000;">&lt;!--&lt;script type=&quot;module&quot; src=&quot;js/user.js&quot;&gt;&lt;/script&gt;--&gt;</span>
&nbsp;
<span style="color: #FF0000;">		&lt;div id=&quot;right&quot;&gt;</span>
<span style="color: #FF0000;">			&lt;h2&gt;....&lt;/h2&gt;</span>
<span style="color: #FF0000;">			&lt;img src=&quot;images/book.jpg&quot; alt=&quot;book.jpg&quot; class=&quot;floatLeft&quot;&gt;</span>
<span style="color: #FF0000;">			&lt;p&gt;....&lt;/p&gt;</span>
<span style="color: #FF0000;">			&lt;p&gt;....&lt;/p&gt;</span>
<span style="color: #FF0000;">			&lt;h3&gt;....&lt;/h3&gt;</span>
<span style="color: #FF0000;">			&lt;p&gt;....&lt;/p&gt;</span>
<span style="color: #FF0000;">			&lt;p&gt;....&lt;/p&gt;</span>
<span style="color: #FF0000;">			&lt;p&gt;....&lt;noscript class=&quot;errors&quot;&gt;&lt;br&gt;Pour fonctionner, cette application n&eacute;cessite l'</span>utilisation de scripts. Veuillez &lt;a href=<span style="color: #FF0000;">'https://www.enable-javascript.com/fr/'</span> target=<span style="color: #FF0000;">'_blank'</span>&gt;configurer votre navigateur&lt;/a&gt; pour qu<span style="color: #FF0000;">'il les accepte.&lt;/noscript&gt;</span>
<span style="color: #FF0000;">			&lt;/p&gt;</span>
&nbsp;
<span style="color: #FF0000;">&lt;form method=&quot;post&quot; action=&quot;index.php?page=login&quot;&gt;</span>
<span style="color: #FF0000;">	&lt;p&gt;&lt;a href='</span>index.php?page=demo<span style="color: #FF0000;">'&gt;Cliquez ici&lt;/a&gt; pour voir la version demo, sinon connectez-vous.&lt;/p&gt;</span>
&nbsp;
&nbsp;
<span style="color: #FF0000;">	&lt;label&gt;&lt;span&gt;Identifiant&lt;/span&gt;&lt;input type=&quot;text&quot; name=&quot;login&quot; tabindex=&quot;1&quot;&gt;&lt;/label&gt;&amp;nbsp;&lt;a href=&quot;http://omnes.proginet/user/index.php?forgot=login&quot; class=&quot;note&quot;&gt;Identifiant oubli&eacute;&lt;/a&gt;&lt;br&gt;</span>
<span style="color: #FF0000;">	&lt;label&gt;&lt;span&gt;Mot de passe&lt;/span&gt;&lt;input type=&quot;password&quot; name=&quot;pw&quot; tabindex=&quot;2&quot;&gt;&lt;/label&gt;&amp;nbsp;&lt;img src=&quot;images/eye.png&quot; alt=&quot;eye.png&quot;&gt; &lt;a href=&quot;http://omnes.proginet/user/index.php?forgot=password&quot; class=&quot;note&quot;&gt;Mot de passe oubli&eacute;&lt;/a&gt;&lt;br&gt;</span>
<span style="color: #FF0000;">	&lt;label&gt;&lt;span&gt;Se souvenir de moi&lt;/span&gt;&lt;input type=&quot;checkbox&quot; name=&quot;remember&quot; tabindex=&quot;3&quot;&gt;&lt;/label&gt;&lt;br&gt;</span>
<span style="color: #FF0000;">	&lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;Connexion&quot; name=&quot;goOn&quot; class=&quot;btn&quot; tabindex=&quot;4&quot; style=&quot;width: 90px;&quot;&gt;&lt;/p&gt;</span>
<span style="color: #FF0000;">	&lt;p class=&quot;note&quot;&gt;Si vous cochez la case &amp;quot;Se souvenir de moi&amp;quot;, vous acc&eacute;derez directement &agrave; la page de d&eacute;marrage s&eacute;lectionn&eacute;e dans le menu utilisateur (silhouette) de l'</span><span style="color: #800000;">application</span> : &amp;quot;Param&egrave;tres&amp;quot;.&lt;/p&gt;
&lt;/form&gt;
&nbsp;
<span style="color: #0000ff;">&lt;script</span><span style="color: #0080ff;"> type</span>=<span style="color: #FF0000;">&quot;module&quot;</span> src=<span style="color: #FF0000;">&quot;js/connect.js&quot;</span>&gt;<span style="color: #0000ff;">&lt;/script&gt;</span>
		&lt;/div&gt;
&nbsp;
	&lt;/div&gt;
&nbsp;
&nbsp;
&lt;footer <span style="color: #0000ff;">class</span>=<span style="color: #FF0000;">&quot;footer&quot;</span>&gt;
	&lt;br&gt;&amp;nbsp;
	&lt;hr&gt;
	* N&deg; de semaine selon ISO <span style="color: #cc66cc;">8601</span>&lt;/footer&gt;
&nbsp;
&lt;/body&gt;
&nbsp;
&lt;/html&gt;</pre></td></tr></table></code><hr />
</div></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>moimp</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2186398/javascript/general-javascript/afficher-masquer-passe/</guid>
		</item>
		<item>
			<title>Web Worker : séparer le calcul de l’animation</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2186220&amp;goto=newpost</link>
			<pubDate>Sun, 18 Oct 2026 06:02:05 GMT</pubDate>
			<description>Bonjour à tous, 
 
Un point...</description>
			<content:encoded><![CDATA[<div>Bonjour à tous,<br />
<br />
Un point que je trouve intéressant avec les Web Workers : le calcul peut être terminé alors que l’interface affiche encore ses étapes intermédiaires. Comment empêcher une animation interrompue de revenir modifier l’affichage ?<br />
<br />
Sur <a rel="nofollow" href="https://dailyredpokemon.com" target="_blank">un petit projet personnel</a> en React, j’ai séparé le dernier état calculé (`state`) de l’état actuellement affiché (`frame`). Le Worker renvoie le résultat et une liste d’événements avec leurs instantanés. L’interface les présente successivement, sans recalculer la logique.<br />
<br />
Pour interrompre cette lecture, j’utilise un compteur de génération. Voici le principe, simplifié depuis le hook ; `sequence` est une référence persistante, et `wait` une attente sur timer :<br />
<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">async</span> <span style="color: #0000ff;">function</span> <span style="color: #0080ff;">present</span><span class="br0">&#40;</span>update<span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span style="color: #0000ff;">const</span> token = ++sequence.current;
  <span style="color: #0080ff;">setState</span><span class="br0">&#40;</span>update.state<span class="br0">&#41;</span>;
&nbsp;
  <span style="color: #0000ff;">for</span> <span class="br0">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0080ff;">event</span> <span style="color: #0000ff;">of</span> update.events<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>token !== sequence.current<span class="br0">&#41;</span> <span style="color: #0000ff;">return</span>;
    <span style="color: #0080ff;">setFrame</span><span class="br0">&#40;</span><span style="color: #0080ff;">event</span>.state<span class="br0">&#41;</span>;
    <span style="color: #0000ff;">await</span> <span style="color: #0080ff;">wait</span><span class="br0">&#40;</span><span style="color: #cc66cc;">450</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
&nbsp;
  <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>token !== sequence.current<span class="br0">&#41;</span> <span style="color: #0000ff;">return</span>;
  <span style="color: #0080ff;">setFrame</span><span class="br0">&#40;</span>update.state<span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
Lorsqu’on passe l’animation, le contrôleur incrémente `sequence.current`, débloque l’attente et affiche directement l’état final. L’ancienne boucle ne peut alors plus réafficher un instantané précédent. Le contrôle après la boucle est important : une interruption peut aussi survenir pendant la dernière attente. Au démontage, le nettoyage invalide également la génération.<br />
<br />
Les nouvelles commandes restent bloquées pendant le calcul et la lecture. Le compteur invalide uniquement la présentation ; il n’annule pas un calcul dans le Worker.<br />
<br />
Cette séparation permet de changer la vitesse ou de sauter les animations sans modifier le résultat. Elle a toutefois un coût : les instantanés transmis par `postMessage` sont copiés par clonage structuré. Pour un historique volumineux, il faudrait mesurer ce coût et envisager des mises à jour plus compactes.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>drewgrant</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2186220/javascript/general-javascript/web-worker-separer-calcul-l-animation/</guid>
		</item>
		<item>
			<title><![CDATA[Cloudflare rachète Deno pour améliorer son modèle de programmation Workers, mais réserve l'usage à l'équipe]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2186083&amp;goto=newpost</link>
			<pubDate>Mon, 12 Oct 2026 05:27:57 GMT</pubDate>
			<description>*Cloudflare rachète Deno pour...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Cloudflare rachète Deno pour améliorer son modèle de programmation Workers, mais uniquement pour l'équipe, le moteur d'exécution JavaScript Deno sera abandonné</font></b><br />
<br />
<b>Cloudflare a annoncé le 9 octobre l'acquisition de Deno, une start-up américaine à l'origine du moteur d'exécution du même nom, afin de renforcer Workers, sa plateforme dédiée au développement et à l'exécution de logiciels sur son réseau. Kenton Varda, ingénieur principal chez Cloudflare Workers, a déclaré que cette acquisition permettrait d'améliorer le modèle de programmation et la plateforme Workers. La société a également mis en open source « <i>workerd </i>», le runtime sur lequel repose Workers. Les conditions financières de l'opération n'ont pas été divulguées.</b><br />
<br />
Cloudflare, Inc. est une entreprise technologique américaine dont le siège social est situé à San Francisco, en Californie, qui propose une gamme de services Internet, notamment des services de réseau de diffusion de contenu (CDN), de cybersécurité dans le cloud, de protection contre les attaques DDoS et d'enregistrement de noms de domaine accrédités par l'ICANN. Les services de l'entreprise font principalement office de proxy inverse entre les visiteurs d'un site web et l'hébergeur du client, ce qui permet d'améliorer les performances et d'assurer une protection contre le trafic malveillant.<br />
<br />
Deno est un moteur d'exécution pour JavaScript, TypeScript et WebAssembly, basé sur le moteur JavaScript V8 et le langage de programmation Rust. Deno a été co-créé par Ryan Dahl, le créateur de Node.js, et Bert Belder. Deno assume explicitement le rôle à la fois de moteur d'exécution et de gestionnaire de paquets au sein d'un seul exécutable, plutôt que de nécessiter un programme de gestion de paquets distinct. Deno a été annoncé lors de la JSConf EU 2018 par Ryan Dahl dans sa présentation intitulée « 10 choses que je regrette à propos de Node.js ». <br />
<br />
Dans son intervention, Dahl a évoqué ses regrets concernant les décisions de conception initiales de Node.js, en mettant l’accent sur ses choix de ne pas utiliser les « promises » dans la conception de l’API, d’utiliser le système de compilation hérité GYP, node_modules et package.json, de ne pas utiliser d’extensions de fichiers, la résolution « magique » des modules via index.js et la rupture de l’environnement sandboxé de V8. Il a finalement présenté le prototype de Deno, visant à réaliser des liaisons d’appels système via le passage de messages à l’aide d’outils de sérialisation tels que Protocol Buffers, et à fournir des indicateurs de ligne de commande pour le contrôle d’accès.<br />
<br />
Cloudflare a annoncé le 9 octobre l'acquisition de Deno, une start-up américaine à l'origine du moteur d'exécution du même nom, afin de renforcer Workers, sa plateforme dédiée au développement et à l'exécution de logiciels sur son réseau. Kenton Varda, ingénieur principal chez Cloudflare Workers, a déclaré que cette acquisition permettrait d'améliorer le modèle de programmation et la plateforme Workers. Dans des articles de blog distincts, Cloudflare et Deno ont annoncé que Deno rejoignait Cloudflare.<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/W_g7WKMwNeo?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
La société a également mis en open source « <i>workerd </i>», le runtime sur lequel repose Workers. Cette acquisition pourrait renforcer la position de Cloudflare dans le domaine des outils de développement « <i>edge </i>» et « <i>serverless </i>». Workers est une plateforme « <i>serverless </i>», tandis que Vercel propose un produit concurrent de type « <i>functions </i>». Les conditions financières de l'opération n'ont pas été divulguées.<br />
<br />
Voici l'annonce du départ de l'équipe Deno vers Cloudflare :<br />
<br />
<b><font size="3">Deno rejoint Cloudflare</font></b><br />
<br />
Depuis des années, nous nous efforçons de simplifier le développement de logiciels serveurs. Nous nous sommes interrogés sur la manière dont les modules pouvaient être distribués, sur les garanties de sécurité qu’un moteur d’exécution JavaScript pouvait offrir, sur ce que devait inclure une chaîne d’outils complète, et sur la facilité avec laquelle une application pouvait être distribuée sous forme d’exécutable autonome. La compatibilité avec Node.js est également devenue un aspect important de ce travail : nos utilisateurs souhaitaient bénéficier des améliorations apportées par Deno tout en continuant à s’intégrer à l’écosystème JavaScript existant. L’équipe et la communauté ont développé un moteur d’exécution qui réunissait ces capacités et remettait en question les idées reçues sur ce à quoi pouvait ressembler le développement JavaScript.<br />
<br />
Aujourd’hui, nous annonçons que l’ensemble de l’équipe Deno rejoint Cloudflare pour poursuivre ce travail. Notre ambition a toujours dépassé le simple cadre du moteur d’exécution. J’ai abordé ce sujet dans mon article de blog intitulé «<i> JavaScript Containers</i> » : la calcul, le stockage et la communication fonctionnant de concert, sans que chaque application ait à mettre en place sa propre infrastructure. Avec Deno Deploy, nous avons franchi une nouvelle étape vers cet objectif. Nous voulions rendre l’exécution des applications aussi simple que possible. Mais la création et l’exploitation de Deploy nous ont également montré à quel point cette expérience développeur cachait encore de la complexité. Je souhaitais simplifier cette couche également.<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/hSfkPVp_mro?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
C’est ainsi qu’est né celld. S’appuyant sur le modèle de programmation de Cloudflare Workers, celld permet aux développeurs de créer dès le départ des applications distribuées, tout en garantissant la simplicité d’exploitation du système. Ce qui m’enthousiasme particulièrement, c’est que la scalabilité soit intégrée au modèle de programmation, plutôt que de dépendre d’une infrastructure que chaque application doit mettre en place elle-même.<br />
<br />
L’évolution de Deno à Deno Deploy, puis à celld, explique pourquoi cette décision nous semble logique. Chez Cloudflare, nous allons associer nos efforts à ceux des équipes Workers et Durable Objects. Nous souhaitons faire de ce modèle de programmation la méthode par défaut pour créer des serveurs, que vous les exécutiez sur le réseau de Cloudflare ou sur votre propre infrastructure. Rejoindre cette plateforme signifie également choisir où concentrer nos efforts. <br />
<br />
Nous avons décidé de consacrer nos futurs travaux de développement à cette plateforme partagée plutôt que de continuer à développer un runtime et un service d’hébergement distincts. Nous savons qu’il s’agit d’un changement important pour ceux qui ont développé des applications sur Deno. À tous ceux qui ont contribué au code, créé des entreprises sur Deno, signalé des problèmes et fait confiance à notre orientation : merci. Voici ce que cela signifie concrètement :<br />
<br />
<ul><li style="">Nous continuerons à prendre en charge le runtime Deno pendant encore un an, avec des versions mensuelles comprenant des corrections de bogues et des mises à jour de sécurité. À l’issue de cette année, nous mettrons fin au développement du runtime Deno. Deno restera open source, et nous invitons toute personne souhaitant poursuivre son développement à se joindre à nous.<br /></li><li style="">Deno Deploy continuera de fonctionner pendant six mois avant d’être arrêté. Nous fournirons une assistance à la migration aux clients payants qui passeront à Cloudflare Workers.<br /></li><li style="">JSR continuera de fonctionner, son infrastructure étant transférée vers Cloudflare.<br /></li><li style="">Nous continuerons à prendre en charge rusty_v8 et travaillerons à son intégration dans workerd.</li></ul><br />
<br />
Le besoin de meilleures abstractions est particulièrement pressant dans le domaine de l’IA. Les «<i> Durable Objects</i> » réunissent des fonctionnalités particulièrement utiles pour les harnais d’agents : une exécution peu coûteuse et sans serveur, un état persistant, des WebSockets et une interface JavaScript de haut niveau. <br />
<br />
<b>Sources</b> : <a rel="nofollow" href="https://deno.com/blog/cloudflare" target="_blank">Deno</a> ; <a rel="nofollow" href="https://blog.cloudflare.com/deno-joins-cloudflare/" target="_blank">Cloudflare</a> <br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette annonce est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/383913/Cloudflare-rachete-VoidZero-la-societe-open-source-derriere-Vite-et-les-outils-de-compilation-JavaScript-qui-l-entourent-afin-de-placer-sa-plateforme-pour-developpeurs-au-coeur-du-developpement-web-avec-l-IA/" target="_blank">Cloudflare rachète VoidZero, la société open source derrière Vite et les outils de compilation JavaScript qui l'entourent, afin de placer sa plateforme pour développeurs au cœur du développement web avec l'IA</a><br />
<br />
:fleche: <a href="https://securite.developpez.com/actu/387755/Cloudflare-prevoit-de-delivrer-des-certificats-TLS-resistants-a-l-informatique-quantique-dans-le-cadre-d-une-refonte-majeure-de-l-ecosysteme-d-authentification-des-sites-web/" target="_blank">Cloudflare prévoit de délivrer des certificats TLS résistants à l'informatique quantique, dans le cadre d'une refonte majeure de l'écosystème d'authentification des sites web</a><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/384649/Le-moteur-d-execution-pour-JavaScript-TypeScript-et-WebAssembly-Deno-2-9-est-disponible-integrant-un-generateur-d-applications-de-bureau-natives-et-facilite-la-migration-des-projets-Node-js/" target="_blank">Le moteur d'exécution pour JavaScript, TypeScript et WebAssembly, Deno 2.9 est disponible, intégrant un générateur d'applications de bureau natives et facilite la migration des projets Node.js</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>Eliora</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2186083/javascript/general-javascript/cloudflare-rachete-deno-ameliorer-modele-programmation-workers-reserve-l-usage-l-equipe/</guid>
		</item>
		<item>
			<title>Next.js 16.4 est disponible avec Turbopack et React 19.3, et réduit le stockage du cache disque de 20 à 25 %</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2186056&amp;goto=newpost</link>
			<pubDate>Fri, 09 Oct 2026 05:47:43 GMT</pubDate>
			<description>*Next.js 16.4 est disponible...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Next.js 16.4 est disponible avec des performances améliorées grâce à Turbopack et React 19.3, et une réduction de 20 à 25 % du stockage du cache disque</font></b><br />
<br />
<b>Next.js a publié la version 16.4, qui apporte des améliorations significatives en termes de performances grâce à des optimisations avancées de Turbopack et à une intégration complète avec React 19.3. Cette mise à jour introduit des noms de classes CSS Module plus courts dans les builds de production, ainsi qu'un système de « <i>mangling </i>» des exportations pour réduire la longueur des noms d'exportation JavaScript. Pour les développeurs utilisant le cache disque de Turbopack, la nouvelle version réduit les besoins en stockage de 20 à 25 % grâce à la compression Zstandard. Au-delà des améliorations apportées à l'infrastructure de base, Next.js 16.4 enrichit les outils de développement grâce à un analyseur de paquets mis à jour.</b><br />
<br />
Next.js est un framework open source de développement web full-stack créé par la société privée Vercel, qui permet de développer des applications web basées sur React avec rendu côté serveur et rendu statique. La documentation de React mentionne Next.js parmi les «<i> chaînes d’outils recommandées</i> » et le conseille aux développeurs qui souhaitent « <i>créer un site web avec rendu côté serveur à l’aide de Node.js </i>». Alors que les applications React traditionnelles ne peuvent afficher leur contenu que côté client dans le navigateur, Next.js étend cette fonctionnalité pour inclure les applications rendues côté serveur.<br />
<br />
Next.js a publié la version 16.4, qui apporte des améliorations significatives en termes de performances grâce à des optimisations avancées de Turbopack et à une intégration complète avec React 19.3. Cette mise à jour introduit des noms de classes CSS Module plus courts dans les builds de production, ainsi qu’un système de « <i>mangling </i>» des exportations pour réduire la longueur des noms d’exportation JavaScript ; ces deux fonctionnalités visent à réduire la taille des bundles sans compromettre la facilité de débogage dans les environnements de développement. <br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p679246d1791525018/javascript/general-javascript/next-js-16-4-disponible-turbopack-react-19-3-reduit-stockage-cache-disque-20-25/nextjs.png/" border="0" alt="Nom : nextJS.png
Affichages : 502
Taille : 19,7 Ko"  style="float: CONFIG" /></div><br />
Pour les développeurs utilisant le cache disque de Turbopack, la nouvelle version réduit les besoins en stockage de 20 à 25 % grâce à la compression Zstandard, sans nécessiter de modifications de configuration. Cette version apporte plusieurs fonctionnalités expérimentales visant à rationaliser les workflows de développement. Le compilateur React basé sur Rust, introduit dans la version 16.3, bénéficie de mises à jour notables, notamment une vérification rapide qui ignore les optimisations inutiles et des modifications de l’allocation de mémoire qui réduisent le temps de compilation de 15 %.<br />
<br />
 Le HMR (Hot Module Replacement) « <i>paresseux </i>» sur le serveur garantit que les mises à jour du serveur ne sont compilées que lorsque des routes sont sollicitées, plutôt que d’appliquer les mises à jour à toutes les pages précédemment visitées, ce qui réduit la charge de traitement en arrière-plan. De plus, Turbopack fournit désormais son runtime sous la forme d’un seul bloc partagé entre les routes, ce qui améliore les taux de réussite du cache et les vitesses de téléchargement.<br />
<br />
Au-delà des améliorations apportées à l’infrastructure de base, Next.js 16.4 enrichit les outils de développement grâce à un analyseur de paquets mis à jour, doté d’une nouvelle page d’accueil récapitulative des routes qui met en évidence les routes client les plus volumineuses et propose des vues sous forme de tableaux triables. Une fonctionnalité expérimentale, « <i>next-bundle-optimizer</i> », diagnostique désormais automatiquement les problèmes liés à l’encombrement du code JavaScript et des ressources, et propose des améliorations. Elle est accessible via les agents IA après la mise à jour. Les développeurs peuvent activer le compilateur React et explorer ces nouvelles fonctionnalités via la configuration de Next.js. La documentation complète est disponible sur le site officiel.<br />
<br />
Voici l'annonce de la sortie de Next.js 16.4 :<br />
<br />
<b><font size="3">Next.js 16.4</font></b><br />
<br />
Au fil des versions 16.x, nous avons mis en place un nouveau modèle de programmation qui répond à bon nombre des difficultés que vous avez rencontrées avec App Router depuis le début :<br />
<br />
<ul><li style="">Il permet un chargement initial rapide, même pour les pages personnalisées<br /></li><li style="">Il offre aux applications rendues côté serveur une navigation instantanée côté client<br /></li><li style="">Il rend la mise en cache facultative, déclarative et modulable</li></ul><br />
<br />
Ce nouveau modèle de programmation s’appelle «<i> Cache Components</i> » et deviendra la norme par défaut dans Next.js 17. Avant cette version, nous ne le recommandions pas de manière générale, car dans certains cas, il ne permettait pas d’offrir les mêmes garanties en termes de coût et de performances que le modèle précédent. Cette version inclut des fonctionnalités clés qui comblent ces lacunes. À partir de Next.js 16.4, nous sommes ravis de recommander Cache Components comme le meilleur choix pour toutes les applications Next.js.<br />
<br />
Dès aujourd’hui, toutes les nouvelles applications créées avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">create-next-app</span> auront Cache Components activé par défaut. Les projets « <i>greenfield </i>» peuvent profiter sans réserve de tous les avantages du nouveau modèle. Pour les applications existantes, nous avons investi dans de meilleurs outils destinés aux agents afin de faciliter la migration des bases de code vers le nouveau modèle. La nouvelle commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">next upgrade --agent</span> fournit aux agents des instructions spécifiques à chaque version pour la mise à niveau de votre application, et des « <i>Skills </i>» dédiés aident les agents à effectuer les refactorisations nécessaires à l’adoption des « <i>Cache Components</i> ».<br />
<br />
Next.js 16.4 inclut également plusieurs améliorations prêtes à l’emploi pour toutes les applications Next.js, notamment une réduction de la consommation de mémoire et de l’espace disque en développement, des temps de compilation réduits, des bundles de production plus légers et React 19.3.<br />
<br />
<b>Que sont les «<i> Cache Components</i> »?</b><br />
<br />
Les composants de cache constituent un ensemble de fonctionnalités qui vous permettent de marquer certaines parties de votre arborescence de composants comme pouvant faire l'objet d'une mise en cache. Considérez l'option <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #FF0000;">'use cache'</span></span>  comme une version au niveau du composant de l'en-tête HTTP «<i> Cache-Control </i>» :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">import</span> <span class="br0">&#123;</span> cacheLife <span class="br0">&#125;</span> <span style="color: #0000ff;">from</span> <span style="color: #FF0000;">'next/cache'</span>;
&nbsp;
<span style="color: #0000ff;">export</span> <span style="color: #0000ff;">default</span> <span style="color: #0000ff;">async</span> <span style="color: #0000ff;">function</span> <span style="color: #0080ff;">DashboardPage</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span style="color: #0000ff;">const</span> currentUser = <span style="color: #0000ff;">await</span> <span style="color: #0080ff;">getCurrentUser</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
  <span style="color: #0000ff;">return</span> <span class="br0">&#40;</span>
    &lt;div&gt;
      &lt;p&gt;Welcome, <span class="br0">&#123;</span>currentUser.<span style="color: #0080ff;">name</span><span class="br0">&#125;</span>&lt;/p&gt;
&nbsp;
      &lt;Suspense fallback=<span class="br0">&#123;</span>&lt;Loading /&gt;<span class="br0">&#125;</span>&gt;
        &lt;Projects userId=<span class="br0">&#123;</span>currentUser.id<span class="br0">&#125;</span> /&gt;
      &lt;/Suspense&gt;
    &lt;/div&gt;
  <span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">async</span> <span style="color: #0000ff;">function</span> <span style="color: #0080ff;">Projects</span><span class="br0">&#40;</span><span class="br0">&#123;</span> userId <span class="br0">&#125;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span style="color: #FF0000;">'use cache'</span>;
  <span style="color: #0080ff;">cacheLife</span><span class="br0">&#40;</span><span style="color: #FF0000;">'hours'</span><span class="br0">&#41;</span>;
&nbsp;
  <span style="color: #0000ff;">const</span> projects = <span style="color: #0000ff;">await</span> db.query.projects.<span style="color: #0080ff;">findMany</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
    <span style="color: #800000;">where</span>: <span style="color: #0080ff;">eq</span><span class="br0">&#40;</span>projectsTable.userId, userId<span class="br0">&#41;</span>,
  <span class="br0">&#125;</span><span class="br0">&#41;</span>;
&nbsp;
  <span style="color: #0000ff;">return</span> <span class="br0">&#40;</span>
    &lt;div&gt;
      <span class="br0">&#123;</span>projects.<span style="color: #0080ff;">map</span><span class="br0">&#40;</span><span class="br0">&#40;</span>project<span class="br0">&#41;</span> =&gt; <span class="br0">&#40;</span>
        &lt;p key=<span class="br0">&#123;</span>project.id<span class="br0">&#125;</span>&gt;<span class="br0">&#123;</span>project.<span style="color: #0080ff;">name</span><span class="br0">&#125;</span>&lt;/p&gt;
      <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#125;</span>
    &lt;/div&gt;
  <span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>Next.js interprète ces annotations <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #FF0000;">'use cache'</span></span> lors du rendu de vos pages, en mettant en cache l'interface utilisateur de votre composant dans le navigateur (lors des navigations côté client) et, de manière facultative, sur le serveur (lors du rendu côté serveur ou à l'avance lors de la compilation). Ces annotations composables vous permettent de combiner la mise en cache côté client, la mise en cache côté serveur entièrement modulable et le rendu à la demande au sein d’une même page ; elles remplacent les comportements de mise en cache implicites des versions précédentes d’App Router.<br />
<br />
<b>Nouveautés concernant les « <i>Cache Components</i> »</b><br />
<br />
Dans cet article, nous utilisons le terme « <i>Cache Components</i> » pour désigner le nouveau modèle de programmation, que vous pouvez utiliser dès aujourd’hui en activant deux options dans votre configuration Next.js :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">import</span> type <span class="br0">&#123;</span> NextConfig <span class="br0">&#125;</span> <span style="color: #0000ff;">from</span> <span style="color: #FF0000;">'next'</span>;
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #800000;">nextConfig</span>: NextConfig = <span class="br0">&#123;</span>
  <span style="color: #800000;">cacheComponents</span>: <span style="color: #339933;">true</span>,
  <span style="color: #800000;">partialPrefetching</span>: <span style="color: #339933;">true</span>,
<span class="br0">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">export</span> <span style="color: #0000ff;">default</span> nextConfig;</pre></td></tr></table></code><hr />
</div>À l’origine, Cache Components était proposé sans la fonctionnalité de préchargement partiel, mais celle-ci fait désormais partie intégrante du modèle. Voici maintenant les nouveautés de Cache Components dans la version 16.4.<br />
<br />
<b>Garantir le caractère statique des shells, des préchargements ou des pages</b><br />
<br />
L’une des fonctionnalités phares de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #FF0000;">'use cache'</span></span> est la possibilité de créer des pages qui combinent du contenu statique et dynamique dans une seule réponse du serveur. Par exemple, vous pouvez afficher l’avatar de l’utilisateur actuel à côté d’un article de blog qui, par ailleurs, est pré-rendu de manière statique :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">export</span> <span style="color: #0000ff;">default</span> <span style="color: #0000ff;">function</span> <span style="color: #0080ff;">Page</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span style="color: #0000ff;">return</span> <span class="br0">&#40;</span>
    &lt;&gt;
      &lt;UserAvatar /&gt;
      &lt;Content /&gt;
    &lt;/&gt;
  <span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #808080;">// This component renders at request time</span>
<span style="color: #0000ff;">async</span> <span style="color: #0000ff;">function</span> <span style="color: #0080ff;">UserAvatar</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span style="color: #0000ff;">const</span> currentUser = <span style="color: #0000ff;">await</span> <span style="color: #0080ff;">getCurrentUser</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
  <span style="color: #808080;">// ...</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #808080;">// This component is statically prerendered</span>
<span style="color: #0000ff;">async</span> <span style="color: #0000ff;">function</span> <span style="color: #0080ff;">Content</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span style="color: #FF0000;">'use cache'</span>;
&nbsp;
  <span style="color: #0000ff;">await</span> <span style="color: #0080ff;">fetch</span><span class="br0">&#40;</span><span style="color: #FF0000;">'...'</span><span class="br0">&#41;</span>;
&nbsp;
  <span style="color: #808080;">// ...</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>Next.js peut servir l'article de blog pré-rendu à partir du cache (comme le dossier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">/<span style="color: #0000ff;">public</span></span> de votre application ou un CDN) et afficher l'UserAvatar au moment de la requête, le tout dans une seule et même réponse HTTP. C’est cette flexibilité qui vous permet de créer des applications dotées d’interfaces utilisateur sophistiquées, sans sacrifier la vitesse ni le dynamisme. Mais il arrive parfois que vous souhaitiez créer une application avec des pages entièrement statiques. Dans ces cas-là, un seul composant dynamique peut nuire aux performances ou à la rentabilité d’un site par ailleurs optimisé.<br />
<br />
Dans Next.js 16.4, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ensureStatic</span> offre un moyen simple de garantir que la coque, la prélecture ou la navigation complète d’une route soit statique. Pour les applications qui souhaitent éviter toute charge de calcul involontaire et réduire leurs coûts de serveur, cela vous permet d’empêcher qu’un composant dynamique ne s’introduise accidentellement dans une route. Par exemple, si nous voulions nous assurer que notre page d’article de blog de l’exemple ci-dessus soit toujours statique, et qu’il ne soit jamais possible d’y ajouter un composant dynamique tel que UserAvatar, nous pourrions ajouter <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">export</span> <span style="color: #0000ff;">const</span> ensureStatic</span> à la route :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">export</span> <span style="color: #0000ff;">const</span> ensureStatic = <span style="color: #FF0000;">'navigation'</span>;
&nbsp;
<span style="color: #0000ff;">export</span> <span style="color: #0000ff;">default</span> <span style="color: #0000ff;">function</span> <span style="color: #0080ff;">Page</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span style="color: #0000ff;">return</span> <span class="br0">&#40;</span>
    &lt;&gt;
      &lt;UserAvatar /&gt; <span class="br0">&#123;</span><span style="color: #808080;">/* &#128308; This component fails the build */</span><span class="br0">&#125;</span>
      &lt;Content /&gt;
    &lt;/&gt;
  <span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>En définissant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ensureStatic</span> sur « <i>navigation </i>», Next.js fera échouer la compilation si du contenu dynamique est inclus dans cette page, garantissant ainsi que les navigations vers cette route ne s'afficheront jamais au moment de la requête. Bien que « <i>navigation </i>» soit la valeur la plus restrictive, vous pouvez également définir <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ensureStatic</span> sur « <i>prefetch </i>» (pour garantir que les liens comportant une prélecture explicite vers cette route ne récupèrent que du contenu statique) ou sur « <i>shell </i>» (pour garantir que seul du contenu statique soit récupéré lors de la première découverte de cette route) si vous avez besoin d’un contrôle plus fin.<br />
<br />
En plus de l’utiliser sur des pages individuelles, vous pouvez également ajouter <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ensureStatic</span> à une mise en page pour appliquer les mêmes garanties à toutes les pages de cette mise en page. Par exemple, vous pourriez ajouter <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ensureStatic = <span style="color: #FF0000;">'navigation'</span></span> à la mise en page racine pour garantir facilement que toutes les pages de navigation de votre site soient statiques. Ensuite, vous pourrez l'étendre aux mises en page imbriquées si certaines pages commencent à nécessiter du contenu dynamique. De nombreuses applications dynamiques n'auront pas besoin de cette fonctionnalité, mais pour les sites optimisés tels que les boutiques en ligne, les pages marketing ou les blogs, ensureStatic constitue un moyen simple de se prémunir contre un rendu indésirable au moment de la requête.<br />
<br />
<b>Exclure du contenu d'un préchargement</b><br />
<br />
Le préchargement est un moyen efficace d’améliorer l’expérience utilisateur de vos applications Next.js. En utilisant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;Link prefetch&gt;</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">useRouter</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">prefetch</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>, vous pouvez éliminer les états de chargement en pré-renduant l’interface utilisateur mise en cache d’une page avant que la navigation effective n’ait lieu. La nouvelle API de navigation vous permet d’exclure le chargement du contenu mis en cache lors d’une préchargement, ce qui revient à le reporter jusqu’à ce qu’une navigation effective ait lieu.<br />
<br />
<b>Nouvelles fonctionnalités de l’agent</b><br />
<br />
Nous investissons dans les outils de l’agent afin de faire de Next.js un système qui contribue en permanence à la sécurité et à la mise à jour de votre application. Next.js 16.4 s’appuie sur notre documentation, nos « <i>Skills </i>» et nos outils de vérification, grâce aux mises à jour de l’agent et à vos retours d’expérience, ce qui nous permet de tirer des enseignements de la manière dont vous développez votre application et d’y apporter des améliorations.<br />
<br />
<b>Mises à jour de l’agent</b><br />
<br />
La nouvelle option <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--agent</span> de la commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">next upgrade</span> aide votre agent à mettre à jour votre application de A à Z. Elle vérifie la version installée, sélectionne une version cible et prépare les guides de migration, les modifications de code nécessaires et les étapes de vérification pour votre agent. L’agent applique la mise à jour, résout les problèmes de migration et vérifie que votre application fonctionne toujours.<br />
<br />
Vous ou votre agent pouvez l’exécuter depuis le répertoire de votre application :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">npx next@canary upgrade --agent=latest</code><hr />
</div>L'utilisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">next@canary</span> permet d'exécuter les derniers outils de mise à niveau, même si votre application utilise une ancienne version de Next.js. Votre agent bénéficie ainsi de conseils à jour pour mettre votre application à la dernière version disponible. Se mettre à jour est la première étape. Pour vous aider à rester à jour, Next.js 16.4 introduit la fonctionnalité <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">exp&eacute;rimentale .agentUpgrade</span>. Lorsque vous ou votre agent exécutez <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">next dev</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">next build</span>, Next.js vous avertit automatiquement lorsqu’une mise à jour pertinente est disponible, vous évitant ainsi d’avoir à vérifier vous-même. Lorsque vous choisissez de procéder à la mise à jour, le même workflow d’agent est lancé, conformément à la politique que vous avez configurée.<br />
<br />
Vous pouvez configurer ces rappels dans votre fichier de configuration Next.js :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">import</span> type <span class="br0">&#123;</span> NextConfig <span class="br0">&#125;</span> <span style="color: #0000ff;">from</span> <span style="color: #FF0000;">'next'</span>;
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #800000;">nextConfig</span>: NextConfig = <span class="br0">&#123;</span>
  <span style="color: #800000;">experimental</span>: <span class="br0">&#123;</span>
    <span style="color: #800000;">agentUpgrade</span>: <span style="color: #FF0000;">'security'</span>,
  <span class="br0">&#125;</span>,
<span class="br0">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">export</span> <span style="color: #0000ff;">default</span> nextConfig;</pre></td></tr></table></code><hr />
</div><ul><li style=""><b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #FF0000;">'security'</span></span> (politique par défaut)</b> : vous rappelle les mises à jour qui corrigent les vulnérabilités connues affectant votre version installée.<br /></li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #FF0000;">'latest'</span></span> : vous rappelle les nouvelles versions majeures ou mineures et utilise la dernière politique de mise à jour pour maintenir votre application à jour.<br /></li><li style=""><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">false</span></span> : désactive les rappels de mise à jour.</li></ul><br />
<br />
Nous travaillons également sur une future politique pour cet indicateur afin d’aider les agents à adopter de nouvelles fonctionnalités et les changements de modèle de programmation de manière idiomatique, comme la migration vers les composants de cache. Aujourd’hui, vous pouvez utiliser nos Skills pour adopter les composants de cache et la prélecture partielle afin que votre agent vous aide à migrer vers le nouveau modèle.<br />
<br />
<b>Retours d'agents</b><br />
<br />
Les agents de codage sont souvent confrontés à des erreurs de framework, à une documentation peu claire ou à des solutions de contournement lors du développement et de la mise à jour d'applications. Le nouveau workflow expérimental de retours d'agents leur permet de rédiger des brouillons de rapports que vous pouvez examiner et, le cas échéant, envoyer à l'équipe Next.js. Les retours d'agents sont activés par défaut lorsque vous créez une nouvelle application avec les paramètres recommandés de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">create-next-app</span>. Pour les applications existantes, vous pouvez activer cette fonctionnalité via votre configuration Next.js :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">import</span> type <span class="br0">&#123;</span> NextConfig <span class="br0">&#125;</span> <span style="color: #0000ff;">from</span> <span style="color: #FF0000;">'next'</span>;
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #800000;">nextConfig</span>: NextConfig = <span class="br0">&#123;</span>
  <span style="color: #800000;">experimental</span>: <span class="br0">&#123;</span>
    <span style="color: #800000;">agentFeedback</span>: <span style="color: #339933;">true</span>,
  <span class="br0">&#125;</span>,
<span class="br0">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">export</span> <span style="color: #0000ff;">default</span> nextConfig;</pre></td></tr></table></code><hr />
</div>Une fois cette fonctionnalité activée, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Next Dev</span> ajoute des instructions permettant à votre agent de collecter les problèmes potentiels au fur et à mesure de son fonctionnement. Une fois la tâche terminée, l’agent prépare des brouillons de rapports et les ouvre dans votre navigateur pour que vous puissiez les examiner. L’agent a pour consigne d’omettre le code source, les journaux, les informations confidentielles et les détails spécifiques au projet. Vous pouvez modifier ou rejeter chaque rapport, et rien n’est envoyé tant que vous n’avez pas sélectionné «<i> Envoyer des commentaires</i> ». Les commentaires de l’agent nécessitent l’activation de Next.js Telemetry et ne s’exécutent pas en CI.<br />
<br />
<b>Améliorations pour toutes les applications</b><br />
<br />
<b>Réduction de la taille du cache disque.</b> Dans la version 16.4, le cache disque de Turbopack utilise 20 à 25 % d’espace en moins, sans nécessiter de modification de configuration. Le cache utilise désormais la compression Zstandard pour les données qui occupent le plus d’espace, tout en conservant LZ4 pour les métadonnées afin de garantir des recherches rapides dans le cache. Nous avons également amélioré nos routines de compactage afin de supprimer plus efficacement les données obsolètes.<br />
<br />
<b>HMR « <i>paresseux </i>» côté serveur.</b> Auparavant, la modification d’un module serveur partagé pouvait déclencher des mises à jour pour des pages que vous aviez consultées plus tôt au cours de la session de développement, même si vous ne les consultiez plus. Dans la version 16.4, Turbopack compile et applique les mises à jour côté serveur uniquement lorsqu’une requête en a besoin. La page que vous consultez continue de se mettre à jour au fur et à mesure que vous la modifiez, tandis que les autres routes attendent d’être à nouveau sollicitées. Cela réduit le travail en arrière-plan inutile lorsque vous naviguez dans votre application.<br />
<br />
<b>Environnement d'exécution partagé de Turbopack.</b> Turbopack fournit désormais son environnement d'exécution sous la forme d'un seul bloc partagé entre les routes. Cela réduit la taille des téléchargements et améliore les taux de réussite du cache.<br />
<br />
<b>Paquets de production plus légers.</b> Dans la version 16.4, Turbopack génère des noms de classes CSS Module plus courts en production, ce qui réduit la taille des feuilles de style ainsi que celle du code HTML et JavaScript qui y fait référence. En environnement de développement, les noms de classes plus longs sont conservés pour faciliter le débogage. De plus, Turbopack utilise désormais le « <i>mangling </i>» des exportations pour réduire encore davantage la taille des paquets en raccourcissant les noms d’exportation JavaScript internes utilisés pour connecter les modules.<br />
<br />
<b>React 19.3.</b> Next.js 16.4 intègre React 19.3, qui apporte les fonctionnalités stables « <i>View Transitions</i> » et « <i>Fragment Refs</i> », la nouvelle API <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">browser</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> et bien plus encore.<br />
<br />
<b>Nouvelles fonctionnalités expérimentales</b><br />
<br />
<b>Compilateur React en Rust.</b> Le compilateur React optimise automatiquement le rendu des composants, réduisant ainsi le recours à la mémorisation manuelle. Sa version expérimentale en Rust, introduite dans la version 16.3, s’exécute directement au sein de Next.js plutôt que via Babel. Dans la version 16.4, un nouveau contrôle rapide lui permet d’ignorer les fichiers qui ne nécessitent pas d’optimisation. Il évite également de répéter ces optimisations lors de la création de composants client pour le rendu serveur, ce qui réduit le travail nécessaire à la compilation de votre application.<br />
<br />
La version 16.4 inclut également de nombreuses mises à jour du compilateur qui améliorent les performances et la précision. L'équipe Turbopack a apporté des modifications à l'allocation de mémoire qui ont permis de réduire la consommation de mémoire du compilateur React de 30 % et le temps de compilation de 15 %.<br />
<br />
<b>Nettoyage du cache disque.</b> Au fur et à mesure que vous modifiez votre application, Next.js peut conserver dans le cache des éléments de compilation qui ne sont plus nécessaires. Dans la version 16.4, un ramasse-miettes expérimental supprime ces éléments inutilisés à la fois de la mémoire et du cache disque, ce qui contribue à réduire l'utilisation des ressources lors de longues sessions de développement. Il peut également récupérer les données obsolètes issues de sessions précédentes, telles que les éléments mis en cache pour des routes que vous avez supprimées.<br />
<br />
<b>Importations dynamiques différées.</b> Les importations dynamiques vous permettent de différer le chargement du code, mais Next.js compile généralement ce code à l'avance pendant le développement. Dans la version 16.4, vous pouvez choisir de ne compiler les importations dynamiques côté client que lorsque le navigateur les sollicite. Cela réduit la charge de compilation initiale pour le code que vous n'avez pas encore utilisé, comme une bibliothèque chargée avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">import</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> après avoir cliqué sur un bouton. Certaines importations <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">next/dynamic</span> sont encore compilées de manière anticipée.<br />
<br />
<b>Threads de travail.</b> Turbopack exécute des outils tels que Babel, PostCSS et les chargeurs webpack dans des processus Node.js distincts qui communiquent avec lui via des sockets. Avec les threads de travail, ces outils s'exécutent au sein d'un seul et même processus. Cela permet d'éviter la surcharge liée aux processus distincts et à la communication via des sockets, et vise à réduire l'utilisation de la mémoire et du processeur pendant le développement et les compilations. Sous Node.js 24.13.1 et versions ultérieures, Next.js utilise actuellement des processus enfants en raison d'un bug de Node.js.<br />
<br />
<b>Prise en charge des répertoires racines supplémentaires et des dépôts virtuels globaux.</b> Next.js 16.4 peut suivre les dépendances accessibles via des liens symboliques situées en dehors du répertoire racine de votre projet en vous permettant de déclarer des répertoires racines supplémentaires. Cela facilite le travail sur des paquets locaux liés sans avoir à étendre le répertoire racine du projet pour inclure des répertoires sans rapport. Cela permet également l’intégration manuelle avec les dépôts virtuels globaux de pnpm, Bun, Nub et aube, qui partagent les dépendances installées entre les projets et les arborescences de travail afin d’accélérer les installations. L’intégration automatique est prévue pour une prochaine version.<br />
<br />
<b>Turbopack Bundle Analyzer</b>. Cette version apporte des fonctionnalités importantes à Turbopack Bundle Analyzer. Il permet désormais :<br />
<br />
<ul><li style="">De mettre en évidence les routes client les plus volumineuses dans une nouvelle page d’accueil récapitulative des routes.<br /></li><li style="">D’offrir un nouveau tableau permettant de trier rapidement les éléments qui contribuent le plus au volume des ressources d’une route.<br /></li><li style="">Crée automatiquement des instantanés des analyses que vous effectuez au fil du temps et permet de comparer les bundles à mesure que votre application évolue.<br /></li><li style="">Distingue les modules situés sur le chemin de rendu critique et vous permet de filtrer les dépendances asynchrones lors de l’exploration.</li></ul><br />
<br />
L'analyseur de paquets intègre désormais une fonctionnalité expérimentale appelée <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Next-Bundle-Optimizer</span> qui permet de détecter, de diagnostiquer et d'optimiser automatiquement la quantité de code JavaScript et d'autres ressources fournies par votre application. <br />
<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://nextjs.org/blog/next-16-4" target="_blank">Annonce de Next.js 16.4</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette annonce est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/386040/Le-framework-open-source-de-developpement-web-full-stack-Next-js-16-3-est-disponible-apportant-des-gains-de-performances-en-reduisant-la-consommation-de-memoire-du-serveur-jusqu-a-90-pourcent/" target="_blank">Le framework open source de développement web full-stack Next.js 16.3 est disponible, apportant des gains de performances en réduisant la consommation de mémoire du serveur jusqu'à 90 %</a><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/380633/Comment-nous-avons-reconstruit-Next-js-avec-l-IA-en-une-semaine-l-interface-API-Next-js-vinext-permet-de-creer-des-applications-de-production-jusqu-a-4-fois-plus-rapidement-par-Steve-Faulkner/" target="_blank">Comment nous avons reconstruit Next.js avec l'IA en une semaine, l'interface API Next.js vinext permet de créer des applications de production jusqu'à 4 fois plus rapidement, par Steve Faulkner</a><br />
<br />
:fleche: <a href="https://web.developpez.com/actu/387837/La-version-3-0-de-SvelteKit-le-framework-d-application-officiel-de-Svelte-est-disponible-et-se-presente-comme-un-framework-backend-a-l-instar-de-Next-js-mais-avec-moins-de-complications/" target="_blank">La version 3.0 de SvelteKit, le framework d'application officiel de Svelte, est disponible, et se présente comme un framework backend à l'instar de Next.js, mais avec moins de complications</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p679246d1791525018/javascript/general-javascript/next-js-16-4-disponible-turbopack-react-19-3-reduit-stockage-cache-disque-20-25/nextjs.png/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>Eliora</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2186056/javascript/general-javascript/next-js-16-4-disponible-turbopack-react-19-3-reduit-stockage-cache-disque-20-25-a/</guid>
		</item>
		<item>
			<title><![CDATA[innerHTML ne s'affiche pas]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185781&amp;goto=newpost</link>
			<pubDate>Tue, 22 Sep 2026 13:50:24 GMT</pubDate>
			<description>Bonjour 
je ne trouve pas ce...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
je ne trouve pas ce que j'ai mal écrit.<br />
Dans le html j'ai <div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">audio</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;audioPlayer&quot;</span> controls <span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">audio</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">div</span> <span style="color: #0080ff;">id</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;toto&quot;</span> <span style="color: #0080ff;">style</span><span style="color: #0000ff;">=</span><span style="color: #FF0000;">&quot;color:white&quot;</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">div</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></code><hr />
</div>dans le js <div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">const</span> toto=<span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;toto&quot;</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">const</span> player = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;audioPlayer&quot;</span><span class="br0">&#41;</span>;
player.<span style="color: #0080ff;">addEventListener</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;ended&quot;</span>, <span style="color: #0000ff;">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    MorsoEnCours++;
    <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>MorsoEnCours &lt; playlist.<span style="color: #0080ff;">length</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> toto.innerHTML=<span style="color: #FF0000;">`je suis ici`</span>;
        player.src = repertoire_liste+playlist<span class="br0">&#91;</span>MorsoEnCours<span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span>;
        <span style="color: #0080ff;">updateTrackInfo</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
        player.<span style="color: #0080ff;">play</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
    <span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>Mon &quot;je suis ici&quot; ne s'affiche pas alors que le player fonctionne tout à fait. <br />
J'ai pourtant vraiment l'impression de ne pas avoir fait de faute<br />
<br />
D'ailleurs pendant qu'on y est est-ce que j'interprète correctement ce qui se passe en disant <br />
lorsque je clique sur &quot;play&quot;  ça joue mais uniquement en mode html le script n'y est encore pour rien, en attendant que le player &lt;audio&gt; envoie je ne sais où un code de fin de morceau &quot;ended&quot; qui est attendu par le cript, auquel cas il lance la fonction sans nom se trouvant à l'intérieur du &quot;player.addEventListener&quot;, incrémente le numéro du morceau et relance le tout player.play().<br />
Et puisqu'on en parle mon objectif est de faire fonctionner un autre événement à savoir un clic sur image<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0">btnprec.<span style="color: #0080ff;">addEventListener</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;click&quot;</span>, <span class="br0">&#40;</span><span class="br0">&#41;</span> =&gt; <span class="br0">&#123;</span>
  <span style="color: #808080;">// Passe &agrave; l'indice suivant (revient &agrave; 0 &agrave; la fin)</span>
  MorsoEnCours = <span class="br0">&#40;</span>MorsoEnCours + <span style="color: #cc66cc;">1</span><span class="br0">&#41;</span> % playlist.<span style="color: #0080ff;">length</span>;
  toto.innerHTML=<span style="color: #FF0000;">`je suis ici`</span>;</pre></td></tr></table></code><hr />
</div>C'est parce que le &quot;clic&quot; ne donnait rien que j'ai voulu vérifier.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>noradan</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185781/javascript/general-javascript/innerhtml-ne-s-affiche/</guid>
		</item>
		<item>
			<title><![CDATA[replace('/%20/g',' ') ne fonctionne pas]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185648&amp;goto=newpost</link>
			<pubDate>Mon, 14 Sep 2026 15:24:22 GMT</pubDate>
			<description><![CDATA[Bonjour 
on m'a fournit le...]]></description>
			<content:encoded><![CDATA[<div>Bonjour<br />
on m'a fournit le code <div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">function</span> <span style="color: #0080ff;">updateTrackInfo</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span style="color: #0000ff;">const</span> trackName = playlist<span class="br0">&#91;</span>currentTrack<span class="br0">&#93;</span>.<span style="color: #0080ff;">replace</span><span class="br0">&#40;</span><span style="color: #FF0000;">'/%20/g'</span>,<span style="color: #FF0000;">' '</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">replace</span><span class="br0">&#40;</span><span style="color: #FF0000;">'.mp3'</span>, <span style="color: #FF0000;">''</span><span class="br0">&#41;</span>; <span style="color: #808080;">//</span>
    trackInfo.textContent = <span style="color: #FF0000;">`En lecture :  <span style="color: #800000;">${trackName}</span>`</span>;<span style="color: #808080;">//</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>et les '%20' ne sont pas remplacés. La syntaxe m'a pourtant l'air bonne et les modif que j'ai testés donnent ce qu'il faut. Tous les exemples que j'ai lus disent la même chose &quot;replace('/%20/g',' ')&quot; fait ce que j'en attend... mais non !<br />
Ca ne remplace pas.<br />
En revanche le '.mp3', lui, est bien supprimé.<br />
Qu'est-ce que je dois changer ? (j'imagine que c'est encore idiot)</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>noradan</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185648/javascript/general-javascript/replace-20-g-ne-fonctionne/</guid>
		</item>
		<item>
			<title>Fonctions équivalentes Photos de Windows en javascript</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185487&amp;goto=newpost</link>
			<pubDate>Fri, 04 Sep 2026 19:19:10 GMT</pubDate>
			<description><![CDATA[Bonjour, 
 
L'application...]]></description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
L'application Phptps de Windows offre deux fonctionnalités très intéressantes.<br />
<br />
Taille de l'image modifiable avec la molette.<br />
<br />
Déplacement de l'image au clic droit enfoncé dès que l'image dépasse de son cadre.<br />
<br />
J'aimerais les mêmes fonctions dans un Carroussel HTML / CSS.<br />
<br />
Ce <a rel="nofollow" href="https://codepen.io/editor/boteha_2/pen/01a029c1-3dc6-769a-974e-e12ca3f4c89f" target="_blank">codepen</a> montre le code HTML et CSS que j'aimerais ne pas changer.<br />
<br />
Premier problème, si je veux que toutes les images soient zoomable, je suppose qu'il faut remplacer :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">const</span> tutti = <span style="color: #0080ff;">document</span>.querySelector <span class="br0">&#40;</span><span style="color: #FF0000;">'figure &gt; img'</span><span class="br0">&#41;</span></code><hr />
</div>par<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">const</span> tutti = <span style="color: #0080ff;">document</span>.querySelectorAll <span class="br0">&#40;</span><span style="color: #FF0000;">'figure &gt; img'</span><span class="br0">&#41;</span></code><hr />
</div>Puis faire une boucle :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">for</span> <span class="br0">&#40;</span><span style="color: #0000ff;">let</span> i = <span style="color: #cc66cc;">0</span>; i &lt; tutti.<span style="color: #0080ff;">length</span>; i++<span class="br0">&#41;</span></code><hr />
</div>De façon très bizarre je n'arrive pas à faire fonctionner cette boucle.<br />
<br />
Avez-vous idée d'une solution ?<br />
<br />
Merci d'avance.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>boteha</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185487/javascript/general-javascript/fonctions-equivalentes-photos-windows-javascript/</guid>
		</item>
		<item>
			<title>récupération de valeurs getBoundingClientRect inexacte</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185378&amp;goto=newpost</link>
			<pubDate>Sun, 30 Aug 2026 18:38:01 GMT</pubDate>
			<description><![CDATA[Bonjour, j'essaie de...]]></description>
			<content:encoded><![CDATA[<div>Bonjour, j'essaie de récupérer la position d'une image sur une page et l'attribuer à une autre image sur une autre page.<br />
<br />
Sur la première page, j'ai mis les valeurs <b>getBoundingClientRect().top</b> et <b>getBoundingClientRect().left</b> dans deux <b>inputs </b>d'un <b>form</b> et les aies envoyées dans un <b>BDD MySql<br />
</b><br />
Sur la deuxième page j'ai récupéré les valeurs et les aies attribuées à une image avec <b>document.getElementById('image2').style.top=valeur_Top_récupérée</b> et <b>document.getElementById('image2').style.left=valeur_Left_récupérée</b><br />
<br />
Problème: il y a un sacré décalage au niveau de la position <b>top</b>, malgré que les deux page sont identiques.<br />
<br />
J'ai voulu m'assurer des valeurs récupérées avec un <b>alert()</b> sur un <b>mouseover</b> sur l'image. Elles sont identiques aux valeurs envoyées depuis la première page.<br />
<br />
Auriez-vous une explication, svp ?</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>OUZFA</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185378/javascript/general-javascript/recuperation-valeurs-getboundingclientrect-inexacte/</guid>
		</item>
		<item>
			<title><![CDATA[demande d'explication à propos de "player.src"]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185376&amp;goto=newpost</link>
			<pubDate>Sun, 30 Aug 2026 15:38:50 GMT</pubDate>
			<description>Bonjour 
Je ne suis même pas...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
Je ne suis même pas débutant en js.<br />
On m'a donné un code que j'essaye de comprendre<br />
il y a dedans <div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">const</span> player = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;audioPlayer&quot;</span><span class="br0">&#41;</span>;</code><hr />
</div>ça je comprend ce que ça fait : la constante nommée player est identifiée à l'objet du fichier appelant (un html) identifiée par &quot;id=audioPlayer&quot;<br />
Ensuite il y a une liste nommé &quot;playlist&quot; qui contient des chemins vers des mp3. L'indice dans le liste est donné par &quot;currentTracks&quot; jusque là je suit<br />
vient alors ceci<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">player.src = playlist<span class="br0">&#91;</span>currentTrack<span class="br0">&#93;</span>;</code><hr />
</div>Même si je comprends ce que cela fait à savoir &quot;écrire src=&quot;le chemin&quot; &quot; dans la balise &lt;audio id=&quot;audioPlayer&quot;&gt; J'aimerais comprendre un peu mieux.<br />
Je viens de lire pendant une heure et je n'ai pas trouvé de quoi me satisfaire.<br />
La question est : tout ce qu'on peut écrire dans une balise est-il une méthode js?<br />
La méthode &quot;src&quot; est elle une méthode standard de js ou une méthode &quot;à la volée&quot; permettant d'attribuer une valeur à tout ce qu'on peut mettre dans un &lt;audio&gt; ?<br />
<br />
Je veux dire par là si j'avais &lt;div id=&quot;audioPlayer&quot;&gt; est-ce que je pourrais écrire dans le js<br />
player.style='font-size:20px'<br />
player.width='30rem'<br />
etc</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>noradan</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185376/javascript/general-javascript/demande-d-explication-propos-player-src/</guid>
		</item>
		<item>
			<title>CANVAS tracer retardé</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185159&amp;goto=newpost</link>
			<pubDate>Fri, 14 Aug 2026 18:08:46 GMT</pubDate>
			<description><![CDATA[Bonjour à tous, 
 
J'ai un...]]></description>
			<content:encoded><![CDATA[<div>Bonjour à tous,<br />
<br />
J'ai un <b>canvas </b>sur lequel je trace des lignes.<br />
<br />
Avant il fonctionnait bien : la trajectoire des lignes était synchronisée avec la souris.<br />
<br />
Depuis que j'ai augmenté la hauteur du <b>canvas</b>, le temps d'exécution de la ligne est légèrement retardé par rapport au mouvement de la souris.<br />
<br />
J'ai essayé de changer la largeur pour voir si c'était une question de proportionalité entre hauteur et largeur. En vain !<br />
<br />
Lorsque je remets la hauteur comme avant, ce décalage disparait.<br />
<br />
Auriez-vous une solution svp ?<br />
<br />
Merci</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>OUZFA</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185159/javascript/general-javascript/canvas-tracer-retarde/</guid>
		</item>
		<item>
			<title>Écrire un formulaire qui change</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2185066&amp;goto=newpost</link>
			<pubDate>Sat, 08 Aug 2026 18:16:35 GMT</pubDate>
			<description>Bon alors je ne sais pas si...</description>
			<content:encoded><![CDATA[<div>Bon alors je ne sais pas si je vais réussir à me faire comprendre<br />
Je voudrais faire un formulaire avec un label &quot;fruits&quot; et un champs texte où on écrit par exemple &quot;cerise&quot;<br />
mais si on fait &quot;enter&quot;, ça ouvre un nouveau label &quot;fruits&quot; avec un nouveau text etc jusqu'au moment où l'on envoie.<br />
<br />
Je n'ai rien trouvé sur la toile.<br />
Merci</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>noradan</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2185066/javascript/general-javascript/ecrire-formulaire-change/</guid>
		</item>
		<item>
			<title><![CDATA[Syntaxe getAttribute, où est l'erreur]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2184875&amp;goto=newpost</link>
			<pubDate>Tue, 28 Jul 2026 09:34:37 GMT</pubDate>
			<description><![CDATA[Bonjour, 
 
J'ai un carrousel...]]></description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
J'ai un carrousel d'images dont la structure est la suivante.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td valign="top"><pre style="margin: 0">&lt;figure role=<span style="color: #FF0000;">&quot;main&quot;</span>&gt;
&lt;<span style="color: #0080ff;">button</span> type=<span style="color: #FF0000;">&quot;button&quot;</span>&gt;&lt;img src=<span style="color: #FF0000;">&quot;im/pr/1550G.avif&quot;</span> alt=<span style="color: #FF0000;">&quot;vignette 1&quot;</span> width=<span style="color: #FF0000;">&quot;100&quot;</span> height=<span style="color: #FF0000;">&quot;77&quot;</span> loading=<span style="color: #FF0000;">&quot;lazy&quot;</span> decoding=<span style="color: #FF0000;">&quot;async&quot;</span> /&gt;&lt;/button&gt;
&lt;img src=<span style="color: #FF0000;">&quot;im/pr/1550G.avif&quot;</span> alt=<span style="color: #FF0000;">&quot;mon beau produit tout neuf&quot;</span> width=<span style="color: #FF0000;">&quot;400&quot;</span> height=<span style="color: #FF0000;">&quot;305&quot;</span> fetchpriority=<span style="color: #FF0000;">&quot;high&quot;</span> decoding=<span style="color: #FF0000;">&quot;async&quot;</span> /&gt;
&lt;<span style="color: #0080ff;">button</span> type=<span style="color: #FF0000;">&quot;button&quot;</span>&gt;&lt;img src=<span style="color: #FF0000;">&quot;im/mu/1550-1G.webp&quot;</span> alt=<span style="color: #FF0000;">&quot;vignette 2&quot;</span> width=<span style="color: #FF0000;">&quot;100&quot;</span> height=<span style="color: #FF0000;">&quot;82&quot;</span> loading=<span style="color: #FF0000;">&quot;lazy&quot;</span> decoding=<span style="color: #FF0000;">&quot;async&quot;</span> /&gt;&lt;/button&gt;
&lt;img src=<span style="color: #FF0000;">&quot;im/mu/1550-1G.webp&quot;</span> alt=<span style="color: #FF0000;">&quot;imafge 2&quot;</span> width=<span style="color: #FF0000;">&quot;400&quot;</span> height=<span style="color: #FF0000;">&quot;328&quot;</span> loading=<span style="color: #FF0000;">&quot;lazy&quot;</span> decoding=<span style="color: #FF0000;">&quot;async&quot;</span> /&gt;
&lt;/figure&gt;</pre></td></tr></table></code><hr />
</div>Je dois savoir quel bouton a le focus :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">&lt;script&gt;</span>
<span style="color: #808080;">// Focus &agrave; l'ouverture de la page</span>
&nbsp;
<span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span style="color: #FF0000;">'button:has(&gt; img[src$=&quot;1550-6G.webp&quot;])'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">focus</span> <span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">const</span> imgs = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelectorAll</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;figure &gt; button&quot;</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">const</span> imgFocused = <span class="br0">&#91;</span><span class="br0">&#93;</span>;
imgFocused<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span> = <span style="color: #FF0000;">&quot;im/mu/1550-1G.webp&quot;</span>
&nbsp;
<span style="color: #808080;">// Cherche le Focus</span>
&nbsp;
<span style="color: #0000ff;">for</span> <span class="br0">&#40;</span><span style="color: #0080ff;">button</span> <span style="color: #0000ff;">of</span> imgs<span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span style="color: #0080ff;">button</span>.<span style="color: #0080ff;">addEventListener</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;blur&quot;</span>, <span style="color: #0000ff;">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span style="color: #FF0000;">'button:has(&gt; img[src=&quot;'</span> + imgFocused<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span> + <span style="color: #FF0000;">'&quot;])'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span><span class="br0">&#41;</span>;
<span style="color: #0080ff;">button</span>.<span style="color: #0080ff;">addEventListener</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;mousedown&quot;</span>, <span style="color: #0000ff;">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
imgFocused<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span> = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span>figure &gt; <span style="color: #0000ff;">this</span> &gt; img<span class="br0">&#41;</span>.<span style="color: #0080ff;">getAttribute</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;src&quot;</span><span class="br0">&#41;</span>;
<span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span><span style="color: #FF0000;">'button:has(&gt; img[src=&quot;'</span> + imgFocused<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span> + <span style="color: #FF0000;">'&quot;])'</span><span class="br0">&#41;</span>.<span style="color: #0080ff;">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span>
<span style="color: #0000ff;">&lt;/script&gt;</span></pre></td></tr></table></code><hr />
</div>Cela ne fonctionne pas.<br />
<br />
Voyez-vous où est l'erreur dans le code ?<br />
<br />
J'ai un gros doute sur :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">imgFocused<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span> = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">querySelector</span><span class="br0">&#40;</span>figure &gt; <span style="color: #0000ff;">this</span> &gt; img<span class="br0">&#41;</span>.<span style="color: #0080ff;">getAttribute</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;src&quot;</span><span class="br0">&#41;</span>;</code><hr />
</div>Si vous pouvez m'aider merci d'avance.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>boteha</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2184875/javascript/general-javascript/syntaxe-getattribute-l-erreur/</guid>
		</item>
		<item>
			<title>PDF bouton  formulaire scripts JavaScript</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2184644&amp;goto=newpost</link>
			<pubDate>Tue, 14 Jul 2026 09:40:11 GMT</pubDate>
			<description>Bonjour  
 
Je voudrais...</description>
			<content:encoded><![CDATA[<div>Bonjour <br />
<br />
Je voudrais savoir s'il est possible, à partir d'un fichier PDF, de mettre un bouton 'Enregistrer sous' et de pouvoir n'enregistrer qu'une seule page avec des scripts JavaScript. <br />
 <br />
Avec Adode Acrobat, je suis en mesure de créer et de modifier des scripts JavaScript. <br />
 <br />
Je voulais savoir comment créer un script JavaScript et obtenir de l'aide pour y parvenir. <br />
 <br />
Choisir la page où est situé le bouton 'enregistrer sous', puis l'extraction et l'enregistrement au format PDF. <br />
 <br />
Dans mon fichier, il y a plusieurs pages et je veux les remplir et pouvoir enregistrer toutes les pages individuellement, sans inclure l'ensemble du fichier en PDF. <br />
 <br />
Je vous remercie par avance de prendre le temps de me lire.  <br />
 <br />
Je fais parvenir mon fichier en pièce jointe <br />
 <br />
<a href="https://www.developpez.net/forums/attachments/p677516d1784021966/javascript/general-javascript/pdf-bouton-formulaire-scripts-javascript/01.fiche-pms-suivi-controle.pdf/"  title="Nom : 01.Fiche PMS de suivi et de controle.pdf
Affichages : 71
Taille : 1,95 Mo">01.Fiche PMS de suivi et de controle.pdf</a><br />
<br />
Montgesoye</div>


	<div style="padding:10px">

	

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
			<ul>
			<li>
	<img class="inlineimg" src="https://forum.developpez.be/images/attach/pdf.gif" alt="Type de fichier : pdf" />
	<a href="https://www.developpez.net/forums/attachments/p677516d1784021966/javascript/general-javascript/pdf-bouton-formulaire-scripts-javascript/01.fiche-pms-suivi-controle.pdf/">01.Fiche PMS de suivi et de controle.pdf</a> 
(1,95 Mo)
</li>
			</ul>
			</fieldset>
	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>montgesoye</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2184644/javascript/general-javascript/pdf-bouton-formulaire-scripts-javascript/</guid>
		</item>
		<item>
			<title>Deno lance deno desktop, une nouvelle commande qui convertit les applications web en binaires natifs</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2184331&amp;goto=newpost</link>
			<pubDate>Mon, 22 Jun 2026 20:25:13 GMT</pubDate>
			<description>*Deno Desktop convertit les...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Deno Desktop convertit les applications web en binaires natifs, en ciblant votre référentiel web existant, tel que Next.js, Astro, Remix ou SvelteKit, pour le compiler en un exécutable natif léger et autonome</font></b><br />
<br />
<b>Deno a lancé la commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">deno desktop</span>, conçue pour transformer les applications Web en binaires natifs pour macOS, Windows ou Linux. Disponible dans la version 2.9.0 (canary) de Deno, cette fonctionnalité détecte automatiquement les frameworks web les plus courants, comme Next.js, Astro, Remix ou SvelteKit, et compile votre projet Deno en un binaire natif léger et autonome qui regroupe votre code, le runtime Deno et un moteur de rendu Web en un seul paquet par plateforme. Aucune modification du code n’est nécessaire pour porter un projet web existant sur le bureau.</b><br />
<br />
Deno est un moteur d'exécution pour JavaScript, TypeScript et WebAssembly, basé sur le moteur JavaScript V8 et le langage de programmation Rust. Deno a été co-créé par Ryan Dahl, le créateur de Node.js, et Bert Belder. Deno assume explicitement le rôle à la fois de moteur d'exécution et de gestionnaire de paquets au sein d'un seul exécutable, sans nécessiter de programme de gestion de paquets distinct. Deno se veut un environnement de script productif et sécurisé destiné aux programmeurs modernes. À l'instar de Node.js, Deno met l'accent sur une architecture orientée événements, en proposant un ensemble d'utilitaires d'E/S de base non bloquants, ainsi que leurs versions bloquantes. Deno peut être utilisé pour créer des serveurs web, effectuer des calculs scientifiques, etc. Deno est un logiciel open source sous licence MIT.<br />
<br />
Finie la lourdeur d'Electron, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">deno desktop</span> convertit désormais les applications web en binaires natifs sans aucune configuration.<br />
<br />
Pendant une décennie, développer une application de bureau multiplateforme à l'aide de technologies web impliquait d'accepter un compromis technique impitoyable : Electron. On disposait certes de vues web standard, mais les utilisateurs se retrouvaient avec des binaires « hello world » de plus de 150 Mo et une consommation de mémoire effrénée.<br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">deno desktop</span>, la nouvelle sous-commande native qui vient de sortir, redéfinit complètement les règles du jeu en matière de distribution pour ordinateurs de bureau. Au lieu d'encapsuler votre projet dans des couches IPC à forte friction et des frameworks lourds, deno desktop cible votre référentiel web existant (Next.js, Astro, Remix, SvelteKit, etc.) et le compile en un exécutable natif léger et autonome. Pas de réécriture de code, pas d'empreinte de dépendances massive, et une compatibilité totale avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Node/npm</span> dès l'installation. Le paysage du développement pour ordinateur de bureau vient de changer pour de bon. <br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">deno desktop</span> transforme un projet Deno (qu'il s'agisse d'un simple fichier TypeScript ou d'une application Next.js) en une application de bureau autonome. Le résultat est un binaire redistribuable qui regroupe votre code, le runtime Deno et un moteur de rendu Web en un seul paquet par plateforme.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p677091d1782159880/javascript/general-javascript/deno-lance-deno-desktop-nouvelle-commande-convertit-applications-web-binaires-natifs/deno-desktop-javascript.png/" border="0" alt="Nom : deno desktop javascript.png
Affichages : 5121
Taille : 78,7 Ko"  style="float: CONFIG" /></div><br />
<b><font size="3">Pourquoi <i>deno desktop</i> ?</font></b><br />
<br />
Les technologies web constituent la boîte à outils d'interface utilisateur la plus répandue au monde. Les applications de bureau développées à partir de piles web (Electron, Tauri, Electrobun) tirent parti de cet atout, mais chacune présente des inconvénients avec lesquels il faut composer : des binaires volumineux, une prise en charge insuffisante de certaines plateformes, l'absence d'écosystème JavaScript, l'absence de mécanisme de mise à jour intégré et l'absence d'intégration de framework.<br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">deno desktop</span> a une position bien définie sur ces compromis :<br />
<br />
<ul><li style=""> Petite taille par défaut, compatibilité totale avec Node. Le backend WebView par défaut utilise la WebView native du système d'exploitation pour obtenir des binaires légers, tout en permettant de continuer à bénéficier de l'intégralité de l'écosystème npm grâce à la couche de compatibilité Node de Deno. Les développeurs peuvent opter pour le backend Chromium (CEF) intégré lorsqu'ils ont besoin d'un rendu identique sous macOS, Windows et Linux.</li><li style=""> Détection automatique du framework. Il suffit de pointer <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">deno desktop</span> vers un projet Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start ou Vite SSR pour qu’il s’exécute : le serveur de production en mode « release », et le serveur de développement avec rechargement à chaud (hot reload) via l’option <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--hmr</span>. Aucune modification du code n’est nécessaire pour porter un projet web existant sur le bureau.</li><li style=""> Des liaisons intra-processus plutôt que l'IPC. La communication entre le backend et l'interface utilisateur s'effectue via des canaux intra-processus, et non via une IPC basée sur des sockets. Les valeurs sont toujours encodées lorsqu'elles franchissent la frontière d'appel, mais il n'y a pas d'allers-retours inter-processus entre le code Deno et la vue Web.</li><li style=""> Compilation croisée à partir d'une seule machine. Une même machine permet de compiler pour macOS, Windows et Linux. Les backends sont téléchargés à la demande, et non compilés localement.</li><li style=""> Mise à jour automatique intégrée via la comparaison de binaires. Il suffit de fournir un seul manifeste <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">latest.json</span> et des correctifs bsdiff ; le runtime interroge, applique et annule automatiquement les modifications en cas d'échec au démarrage. </li></ul><br />
<b><font size="3">Hello, desktop</font></b><br />
<br />
Créer une application de bureau en un seul fichier (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">main.ts</span>) :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0">Deno.<span style="color: #0080ff;">serve</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span> =&gt;
  <span style="color: #0000ff;">new</span> <span style="color: #0080ff;">Response</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;&lt;h1&gt;Hello, desktop&lt;/h1&gt;&quot;</span>, <span class="br0">&#123;</span>
    <span style="color: #800000;">headers</span>: <span class="br0">&#123;</span> <span style="color: #FF0000;">&quot;content-type&quot;</span>: <span style="color: #FF0000;">&quot;text/html&quot;</span> <span class="br0">&#125;</span>,
  <span class="br0">&#125;</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">deno desktop main.ts</code><hr />
</div><br />
Le binaire compilé ouvre une fenêtre pointant vers un serveur HTTP local lié à votre gestionnaire <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Deno.<span style="color: #0080ff;">serve</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span>. Vous pouvez l'exécuter directement :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0">./main      # macOS / Linux
.\main.exe  # Windows</pre></td></tr></table></code><hr />
</div><br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Deno.<span style="color: #0080ff;">serve</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> se connecte automatiquement à l'adresse vers laquelle la vue Web navigue ; il n'est donc pas nécessaire de spécifier un port ou un nom d'hôte.<br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">deno desktop</span> est incluse dans Deno v2.9.0 et n'est pas encore disponible dans une version stable. Pour l'essayer, exécutez la commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">deno upgrade canary</span> afin d'installer la version canary. La commande, les clés de configuration et les API TypeScript sont susceptibles d'évoluer avant que la fonctionnalité ne soit stabilisée.<br />
<br />
<b>Source :</b> <a rel="nofollow" href="https://docs.deno.com/runtime/desktop/" target="_blank">Deno</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Trouvez-vous cette nouvelle sous-commande de Deno utile et pertinente ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/378434/Deno-2-6-la-derniere-version-du-runtime-JavaScript-et-TypeScript-moderne-est-disponible-avec-l-outil-dx-un-controle-plus-granulaire-des-autorisations-et-une-verification-des-types-TypeScript-plus-rapide/" target="_blank">Deno 2.6, la dernière version du runtime JavaScript et TypeScript moderne, est disponible avec l'outil dx, un contrôle plus granulaire des autorisations et une vérification des types TypeScript plus rapide</a><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/365176/Deno-contre-Oracle-Deno-a-depose-une-demande-d-annulation-de-la-marque-JavaScript-d-Oracle-Oracle-a-jusqu-au-4-janvier-2025-pour-agir-sinon-la-marque-sera-probablement-annulee/" target="_blank">Deno contre Oracle : Deno a déposé une demande d'annulation de la marque JavaScript d'Oracle, Oracle a jusqu'au 4 janvier 2025 pour agir, sinon la marque sera probablement annulée</a><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/333870/Pendant-que-Deno-le-runtime-de-JS-et-TS-gagne-en-maturite-certaines-entreprises-tentent-de-l-utiliser-en-production-mais-d-autres-repartent-non-satisfaites-a-la-suite-des-tests-effectues/" target="_blank">Pendant que Deno, le runtime de JS et TS, gagne en maturité, certaines entreprises tentent de l'utiliser en production, mais d'autres repartent non satisfaites à la suite des tests effectués</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p677091d1782159880/javascript/general-javascript/deno-lance-deno-desktop-nouvelle-commande-convertit-applications-web-binaires-natifs/deno-desktop-javascript.png/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>Anthony</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2184331/javascript/general-javascript/deno-lance-deno-desktop-nouvelle-commande-convertit-applications-web-binaires-natifs/</guid>
		</item>
		<item>
			<title><![CDATA[Cloudflare rachète VoidZero afin de placer sa plateforme Workers au cœur du développement web assisté par l'IA]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2184101&amp;goto=newpost</link>
			<pubDate>Fri, 05 Jun 2026 12:03:04 GMT</pubDate>
			<description>*Cloudflare rachète VoidZero,...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Cloudflare rachète VoidZero, la société open source derrière Vite et les outils de compilation JavaScript qui l'entourent, afin de placer sa plateforme pour développeurs au cœur du développement web assisté par l'IA</font></b><br />
<br />
<b>Cloudflare a annoncé l'acquisition de VoidZero, la société open source à l'origine de Vite et des outils de compilation JavaScript associés, afin de renforcer sa plateforme pour développeurs Workers. Cette initiative vise à faciliter le développement web assisté par l'intelligence artificielle (IA) en simplifiant le déploiement du code local vers le réseau mondial de Cloudflare, sans les transitions habituelles entre différents outils. Les outils de VoidZero, notamment Vite, Vitest, Rolldown et Oxc, resteront open source sous licence MIT et son équipe rejoindra la division « Emerging Technology and Incubation » de Cloudflare, où elle continuera à diriger les projets.</b><br />
<br />
Cloudflare, Inc. est une entreprise technologique américaine dont le siège social est situé à San Francisco, en Californie, qui propose une gamme de services Internet, notamment des services de réseau de diffusion de contenu (CDN), de cybersécurité dans le cloud, de protection contre les attaques DDoS et d'enregistrement de noms de domaine accrédités par l'ICANN. Les services de l'entreprise fonctionnent principalement comme un proxy inverse entre les visiteurs d'un site web et l'hébergeur du client, améliorant ainsi les performances et assurant une protection contre le trafic malveillant.<br />
<br />
Le 4 juin 2026, Cloudflare Inc. a annoncé avoir racheté VoidZero Inc., la société open source à l'origine de Vite et des outils de compilation JavaScript très répandus qui l'entourent, dans le but de positionner sa plateforme pour développeurs au cœur du développement web assisté par l'IA. VoidZero a été fondé par Evan You, le créateur du framework Vue.js, en 2023.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p676768d1780660967/javascript/general-javascript/cloudflare-rachete-voidzero-afin-placer-plateforme-workers-coeur-developpement-web-assiste-l-ia/voidzero-cloudflare-javascript-ia.png/" border="0" alt="Nom : voidzero cloudflare javascript IA.png
Affichages : 2003
Taille : 17,5 Ko"  style="float: CONFIG" /></div><br />
Vite s'est imposé comme la norme dans le développement JavaScript et TypeScript, avec plus de 100 millions de téléchargements par semaine. Les autres outils de VoidZero s'intègrent parfaitement à ce flux de travail. Vitest se charge des tests. Rolldown, écrit en Rust, s'occupe de la création des paquets. La chaîne d'outils Oxc en constitue la base. <br />
<br />
Cloudflare souhaite intégrer cette chaîne d'outils à sa plateforme de développement Workers. L'objectif est d'offrir aux développeurs un parcours unique, du code sur leur ordinateur portable jusqu'au déploiement sur le réseau de Cloudflare, sans les transitions habituelles entre différents outils. <br />
<br />
L'entreprise a déclaré que la courbe d'adoption de Vite est « l'un des phénomènes les plus remarquables à observer actuellement dans l'écosystème ». Cloudflare a indiqué que Vite enregistre environ 129 millions de téléchargements hebdomadaires. Le plugin Vite de Cloudflare a atteint quant à lui près de 14 millions de téléchargements hebdomadaires, soit plus de 10 % du volume hebdomadaire total de Vite. <br />
<br />
Cette acquisition intervient alors que les agents de codage IA autonomes redéfinissent la manière dont les applications sont développées. Cloudflare estime que, à mesure que ces agents écrivent davantage de code, les outils qui les entourent doivent suivre le rythme, la priorité étant désormais accordée à la rapidité et à la prévisibilité du comportement, de l'environnement local jusqu'à la mise en production.<br />
<br />
« Les meilleurs ingénieurs que je connaisse déploient plus de code que jamais, et en écrivent moins à la main. L’IA se charge d’une plus grande partie de la saisie — tout ce qui l’entoure doit donc suivre le rythme », a déclaré Matthew Prince, cofondateur et PDG de Cloudflare. « Evan et son équipe ont développé Vite à partir de zéro en s’inspirant de la même philosophie que celle qui a guidé la création de Cloudflare : éliminer le superflu et privilégier la rapidité. Leur arrivée offre à des millions de développeurs, ainsi qu’aux agents IA qui travaillent à leurs côtés, le chemin le plus rapide entre le code local et notre réseau mondial. »<br />
<br />
L'équipe de VoidZero, décrite par Cloudflare comme composée de développeurs open source et de spécialistes de l'optimisation Rust, rejoindra la division « Emerging Technology and Incubation » de l'entreprise et continuera à diriger les projets. Evan You restera à la tête de la feuille de route open source de la chaîne d'outils.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p676762d1780660899/javascript/general-javascript/cloudflare-rachete-voidzero-afin-placer-plateforme-workers-coeur-developpement-web-assiste-l-ia/voidzero-cloudflare-javascript-ia-fig-2.png/" border="0" alt="Nom : voidzero cloudflare javascript IA fig 2.png
Affichages : 615
Taille : 146,2 Ko"  style="float: CONFIG" /></div><br />
Pour répondre aux inquiétudes concernant le contrôle par un seul fournisseur d'une infrastructure open source largement utilisée, Cloudflare a déclaré que Vite, Vitest, Rolldown, Oxc et Vite+ resteraient open source sous licence MIT et indépendants de tout fournisseur. La feuille de route de Vite continuera également à être définie par l'équipe et la communauté Vite, tandis qu'Evan You et le reste de l'équipe VoidZero continueront de diriger Vite, Vitest, Rolldown, Oxc et Vite+. Cloudflare a déclaré qu'elle consacrera les ressources techniques et humaines nécessaires à ces projets, sans les réorienter.<br />
<br />
L'entreprise s'engage également à verser 1 million de dollars à un fonds indépendant dédié à l'écosystème Vite afin de soutenir les responsables de maintenance et les contributeurs n'étant affiliés ni à VoidZero ni à Cloudflare.<br />
<br />
« Notre priorité absolue est de préserver la confiance qui a permis à Vite de connaître un tel succès. Non pas par de belles paroles, mais en le démontrant chaque jour à travers la manière dont nous soutenons et développons ces projets », a déclaré Cloudflare. « Nous souhaitons également joindre le geste à la parole en ce qui concerne notre soutien à l'open source et aux fondements d'un écosystème collaboratif. Dans le cadre de cette annonce, Cloudflare s'engage à verser 1 million de dollars à un fonds dédié à l'écosystème Vite, destiné à soutenir les mainteneurs et les contributeurs, et géré par l'équipe principale de Vite. Vite dépasse largement le cadre de VoidZero ou de Cloudflare, et ceux qui ont contribué à sa création doivent avoir leur place dans la suite de l'aventure. »<br />
<br />
Evan You a déclaré dans un article de blog que cet accord résolvait un problème de monétisation qui avait longtemps handicapé VoidZero, malgré l'adoption rapide de ses outils. Avant les négociations en vue de l'acquisition, l'entreprise avait testé un modèle de licence mixte et développait parallèlement une plateforme de déploiement native Vite, baptisée Void, sur la base de Cloudflare. VoidZero avait levé des fonds lors d'un tour de table d'amorçage et d'une série A menés par Accel.<br />
<br />
Cette opération s'inscrit dans la lignée des acquisitions réalisées par Cloudflare dans le domaine du Web natif pour l'IA. En janvier, l'entreprise a racheté Human Native, une start-up spécialisée dans les données sous licence, et n'a cessé depuis de développer sa suite d'outils Agent Cloud, destinée à la création et à l'exploitation d'agents IA.<br />
<br />
<b><font size="3">Annonce de l'acquisition de VoidZero par Cloudflare</font></b><br />
<br />
Le communiqué de presse annonçant l'acquisition de VoidZero par Cloudflare est présenté ci-dessous :<br />
<br />
« Cloudflare, Inc., leader des solutions de connectivité dans le cloud, a annoncé aujourd’hui avoir racheté VoidZero, l’entreprise axée sur l’open source à l’origine de Vite, l’écosystème d’outils JavaScript de nouvelle génération. Cette acquisition permettra d’intégrer nativement les outils haute performance de VoidZero — notamment l’outil de compilation Vite, l’exécuteur de tests Vitest, le bundler Rolldown basé sur Rust et la chaîne d’outils Oxc — au sein de l’écosystème Cloudflare. En fusionnant le réseau mondial en périphérie de Cloudflare et la plateforme de développement Workers avec la chaîne d'outils standard de l'industrie du web moderne, Cloudflare crée une pile de déploiement fluide, en un seul clic, permettant de passer directement du code local au réseau mondial de Cloudflare.  <br />
<br />
Le développement d'applications connaît actuellement une transformation profonde. L'essor des agents de codage autonomes basés sur l'IA a inauguré une ère de création rapide de structures d'applications, où la rapidité et la prévisibilité entre l'environnement local et la production sont primordiales. La chaîne d'outils de VoidZero, articulée autour de Vite, s'est imposée comme la base commune de l'écosystème web, enregistrant plus de 130 millions de téléchargements hebdomadaires. Le plugin Cloudflare Vite a atteint 13,9 millions de téléchargements hebdomadaires — soit plus de 10 % du volume hebdomadaire total de Vite —, ce qui prouve que les développeurs choisissent déjà cette pile combinée pour les applications codées par l'IA.<br />
<br />
L'équipe de VoidZero, composée de développeurs open source et de spécialistes de l'optimisation Rust, dirigée par Evan You, créateur largement reconnu de Vue.js et Vite, rejoindra la division Emerging Technology and Incubation (ETI) de Cloudflare. L'équipe continuera à faire progresser la feuille de route open source de VoidZero tout en accélérant l'intégration approfondie avec la plateforme de développement Cloudflare Workers.<br />
<br />
« Chez VoidZero, notre mission a toujours été d’éliminer la fragmentation et les goulots d’étranglement de la pile web moderne », a déclaré Evan You, fondateur et PDG de VoidZero. « Cloudflare partage notre obsession pour la vitesse et la pureté architecturale. En unissant nos forces, nous pouvons préserver la neutralité, l’ouverture et l’indépendance vis-à-vis des fournisseurs de l’écosystème Vite, tout en bénéficiant des ressources et de l’infrastructure mondiale nécessaires pour optimiser l’expérience des développeurs pour des millions d’ingénieurs à travers le monde. »<br />
<br />
En intégrant directement les outils ultra-performants de VoidZero, basés sur Rust, à la plateforme de développement Workers de Cloudflare, Cloudflare unifiera l'ensemble du cycle de vie du développement logiciel. Les développeurs comme les agents IA autonomes pourront passer instantanément d'une idée à une mise en production mondiale grâce à un écosystème de déploiement Vite natif et modulable. Grâce à cette acquisition, Cloudflare entend promouvoir un modèle de développement centré sur les projets, en se concentrant sur trois initiatives clés :<br />
<br />
<ul><li style="">Unifier le pipeline de développement : intégrer nativement la CLI Cloudflare au flux de travail fluide de Vite, déjà très apprécié des développeurs, afin d'offrir une expérience de bout en bout sans friction à tous les créateurs.</li><li style="">Mettre en place une infrastructure basée sur l'intention : évoluer vers un workflow où une seule commande de déploiement Vite gère tout. Si la logique d'application déclare avoir besoin d'une base de données ou d'un magasin d'objets, une application Vite intégrant Cloudflare détectera automatiquement cette intention et provisionnera nativement des ressources Cloudflare telles que D1 ou R2, sans aucune intervention manuelle sur le tableau de bord.</li><li style="">Préserver la neutralité des mainteneurs open source : Vite, Rolldown, Oxc et Vitest resteront open source, indépendants de tout fournisseur et pilotés par la communauté. Vite, Vitest, Rolldown, Oxc et Vite+ resteront strictement open source sous licence MIT. Cloudflare s'engage à verser 1 million de dollars à un nouveau fonds indépendant dédié à l'écosystème Vite afin de soutenir les mainteneurs et contributeurs de la communauté qui sont indépendants à la fois de VoidZero et de Cloudflare.</li></ul><br />
« Chez Lovable, nous donnons aux développeurs les moyens de créer et de déployer des applications full-stack à une échelle sans précédent. Une chaîne d’outils ouverte et prévisible est absolument essentielle à cette mission. Alors que les agents gèrent des tâches en temps réel de plus en plus complexes, ils ont besoin d’une architecture sous-jacente performante et modulaire », a déclaré Fabian Hedin, directeur technique et cofondateur de Lovable. « En construisant notre pipeline automatisé sur Vite et en tirant parti de son écosystème ouvert, nous avons pu accélérer radicalement la manière dont les agents IA génèrent, compilent et déploient le code. Nous avons travaillé en étroite collaboration avec les équipes de Cloudflare et de VoidZero, et nous sommes ravis de continuer à soutenir et à tirer parti de l’écosystème qu’elles ont contribué à créer. Les infrastructures open source telles que Vite jouent un rôle essentiel dans l’avenir du développement logiciel, et nous sommes encouragés de voir que son développement reste indépendant et transparent. »<br />
<br />
»<br />
<br />
<b><font size="3">Que se passe-t-il ensuite ?</font></b><br />
<br />
Cloudflare a déclaré qu'à court terme, rien ne changera pour les utilisateurs de Vite ni pour les frameworks qui s'appuient sur Vite. Vite, Vitest, Rolldown, Oxc et Vite+ continueront d'être mis à jour et l'équipe VoidZero continuera de contribuer à leur développement et d'en assurer la direction. Le plugin Cloudflare Vite continuera également d'être amélioré, et l'API Environment et le concept plus large consistant à « exécuter votre code serveur dans le bon runtime localement » continueront de s'améliorer, y compris pour les runtimes non Cloudflare.<br />
<br />
À plus long terme, Cloudflare entamera les travaux visant à faire évoluer son interface CLI vers une expérience directement intégrée à Vite. Ce dernier bénéficiera de nouvelles primitives épurées et indépendantes des fournisseurs, destinées aux applications full-stack et aux agents, qui fonctionneront pour tous, quelle que soit la plateforme. À terme, Cloudflare mettra la plateforme Void en open source pour que d'autres puissent s'en inspirer et créer leurs propres plateformes en s'appuyant sur Vite et Cloudflare.<br />
<br />
« Nous sommes ravis d'accueillir l'équipe de VoidZero chez Cloudflare et impatients de consacrer davantage de ressources à ces projets. Notre mission consiste désormais à les aider à se développer, à rester ouverts et à dynamiser l'écosystème JavaScript pour tous », a déclaré Cloudflare.<br />
<br />
<b>Sources :</b> Cloudflare (<a rel="nofollow" href="https://www.cloudflare.com/press/press-releases/2026/cloudflare-acquires-voidzero-to-build-the-future-of-the-ai-native-web/" target="_blank">1</a>,  <a rel="nofollow" href="https://blog.cloudflare.com/voidzero-joins-cloudflare/" target="_blank">2</a>)<br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Trouvez-vous cette initiative de Cloudflare crédible ou pertinente ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://intelligence-artificielle.developpez.com/actu/380269/Apres-avoir-tente-de-bloquer-l-IA-Cloudflare-souhaite-desormais-faire-le-contraire-et-aider-l-IA-a-s-alimenter-des-sites-web-grace-a-la-conversion-automatique-et-instantanee-du-HTML-en-markdown/" target="_blank">Après avoir tenté de bloquer l'IA, Cloudflare souhaite désormais faire le contraire et aider l'IA à s'alimenter des sites web grâce à la conversion automatique et instantanée du HTML en markdown</a><br />
<br />
:fleche: <a href="https://web.developpez.com/actu/379356/Cloudflare-acquiert-Astro-le-framework-web-permettant-de-creer-des-sites-web-rapides-et-axes-sur-le-contenu-afin-d-accelerer-l-avenir-du-developpement-web-haute-performance/" target="_blank">Cloudflare acquiert Astro, le framework web permettant de créer des sites web rapides et axés sur le contenu, afin d'accélérer l'avenir du développement web haute performance</a><br />
<br />
:fleche: <a href="https://intelligence-artificielle.developpez.com/actu/376259/Deployez-votre-propre-plateforme-d-IA-de-Vibe-Coding-en-un-seul-clic-Cloudflare-met-en-open-source-sa-plateforme-de-codage-IA-complete-de-bout-en-bout-VibeSDK/" target="_blank">Déployez votre propre plateforme d'IA de Vibe Coding en un seul clic : Cloudflare met en open source sa plateforme de codage IA complète de bout en bout &quot;VibeSDK&quot;</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p676762d1780660899/javascript/general-javascript/cloudflare-rachete-voidzero-afin-placer-plateforme-workers-coeur-developpement-web-assiste-l-ia/voidzero-cloudflare-javascript-ia-fig-2.png/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p676768d1780660967/javascript/general-javascript/cloudflare-rachete-voidzero-afin-placer-plateforme-workers-coeur-developpement-web-assiste-l-ia/voidzero-cloudflare-javascript-ia.png/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>Anthony</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2184101/javascript/general-javascript/cloudflare-rachete-voidzero-afin-placer-plateforme-workers-coeur-developpement-web-assiste-l-ia/</guid>
		</item>
	</channel>
</rss>
