<?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>Sat, 30 May 2026 09:20:08 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>Un panier avec LocalStorage - Sécurité</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183475&amp;goto=newpost</link>
			<pubDate>Wed, 29 Apr 2026 10:43:30 GMT</pubDate>
			<description>Bonjour. Si un spécialiste JS...</description>
			<content:encoded><![CDATA[<div>Bonjour. Si un spécialiste JS a un avis sur la question ?<br />
<br />
J'ai crée un site statique pour une petite boutique, avec une page PANIER. Le panier marche avec LocalStorage et des boutons addToCart en JS.<br />
Un bouton SDK Paypal permet de finaliser le paiement. Je récupère le total via JS et je l’intègre dans le script PayPal.<br />
La seule indication publique est l'ID client dans le chemin du script.<br />
<br />
<b>Selon vous, cela pose il un problème de sécurité ?</b> Je sais bien qu'il est possible de changer le prix du total via la console, mais je ne vois pas l'intérêt de la manœuvre<br />
car au final le total payé via Paypal ne correspondra pas au produit et le vendeur le verras bien.<br />
<br />
Pour l'instant, je suis assez serein sur la procédure car je ne transmet aucun code, token confidentiel mais peut-être que je suis dans le faux. <br />
J'ai une certaine maitrise de JS mais je ne suis pas non plus un expert. <br />
<br />
Si certain-e parmi ont des connaissances poussées en JS et peuvent confirmer ou infirmer ? Merci.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>BKaernel</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183475/javascript/general-javascript/panier-localstorage-securite/</guid>
		</item>
		<item>
			<title><![CDATA[Remettre dragged element dans son parent d'origine]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183421&amp;goto=newpost</link>
			<pubDate>Sun, 26 Apr 2026 09:30:33 GMT</pubDate>
			<description><![CDATA[Bonjour à tous, 
j'ai des...]]></description>
			<content:encoded><![CDATA[<div>Bonjour à tous,<br />
j'ai des images qui sont dans des <b>divs</b> qui eux sont disposés horizontalement dans un grand <b>div</b>. L'idée est de glisser un <b>div </b> contenant une image et le déposer sur <b>Document</b>.<br />
<br />
Je souhaite pouvoir remettre chaque <b>div</b> contenant une image dans sa place d'origine en cliquant sur une croix rouge à côté de l'image (histoire de désélectionner l'image).<br />
<br />
<b>PROBLEMATIQUE</b>: Le <b>div </b>général qui contient les <b>divs</b> des images est en position &quot; <b>sticky</b> &quot;(afin que je puisse <b>scroller</b> tout en l'ayant au milieu de l'écran)<br />
Lorsque j'ai utilisé la méthode de récupérer la position d'origine et l'affecter ensuite à l'élément, cela marche partiellement car puisque le <b>div </b>général est &quot;<b>sticky</b>&quot;, il reste au milieu du <b>view </b>tandis que l'élément remis suit le mouvement du <b>scroll</b>.<br />
<br />
Auriez-vous une solution pour que les éléments reviennent à leur place d'origine relative au <b>parent </b>(qui est &quot;<b>sticky</b>&quot;) 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/d2183421/javascript/general-javascript/remettre-dragged-element-parent-d-origine/</guid>
		</item>
		<item>
			<title><![CDATA[NexoPad : Comment j'ai résolu l'injection DOM en Vanilla JS pour créer un espace de travail unifié]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183363&amp;goto=newpost</link>
			<pubDate>Wed, 22 Apr 2026 20:37:13 GMT</pubDate>
			<description>Bonjour à tous, 
 
En tant...</description>
			<content:encoded><![CDATA[<div>Bonjour à tous,<br />
<br />
En tant que développeurs, nous passons notre vie dans le navigateur. Mais il y a quelques mois, j'en ai eu marre de devoir jongler entre 20 onglets juste pour retrouver une note en Markdown, copier une réponse prédéfinie pour un ticket de support, ou utiliser un wrapper d'IA pour reformuler un texte. Le context switching (basculement de contexte) tuait ma productivité.<br />
<br />
Au lieu de chercher une énième application, j'ai décidé de développer NexoPad : une extension qui unifie ces outils directement dans les couches natives du navigateur. L'équipe de Google vient d'ailleurs de l'évaluer manuellement et de lui attribuer le badge &quot;Sélection&quot; (Featured), ce qui est une belle validation technique.<br />
<br />
La Stack Technique :<br />
J'ai gardé le front-end aussi léger que possible en utilisant principalement du Vanilla JS et HTML5/CSS pour les éléments d'interface (popup, panneau latéral, content scripts). Pour le back-end (synchronisation et RBAC des plans Pro/Teams), je m'appuie sur Supabase.<br />
<br />
Les défis techniques et fonctionnalités clés :<br />
<br />
1. Injection DOM et Parseur dynamique (Snippets) :<br />
C'est la partie qui m'a donné le plus de fil à retordre. L'extension injecte des templates directement dans le DOM actif (fonctionne sur des SPA complexes comme Gmail ou Zendesk). J'ai codé un parseur sur mesure pour gérer des variables dynamiques ({{input}}), du Spintax, et un Inspecteur Visuel qui permet d'extraire le texte d'un élément du DOM à la volée pour l'utiliser comme variable.<br />
<br />
2. Architecture IA &quot;Bring Your Own Key&quot; (BYOK) :<br />
Je suis opposé au fait de payer des abonnements mensuels pour des wrappers IA qui stockent nos données. NexoPad utilise un modèle BYOK : les appels API (OpenAI, Anthropic, Gemini) partent directement du navigateur du client vers le fournisseur. Aucune donnée ne transite par mes serveurs. L'interface flottante permet de sélectionner du texte sur n'importe quelle page et de le remplacer par la réponse de l'IA via une injection directe.<br />
<br />
3. Notes &quot;Local-first&quot; et Web Clipper :<br />
Un éditeur Markdown complet intégré au navigateur. Les notes peuvent être détachées sous forme de fenêtres flottantes en utilisant l'API Picture-in-Picture, idéal pour garder des bouts de code sous les yeux.<br />
<br />
4. Gestion des onglets avancée :<br />
L'extension s'intègre directement avec l'API native des groupes d'onglets de Chrome pour lancer des environnements de projet en masse. J'y ai ajouté un script de renommage forcé des onglets pour identifier facilement les instances dupliquées (très utile pour les CRM).<br />
<br />
Si vous avez l'occasion de la tester, je serais ravi d'avoir vos retours techniques, des critiques sur l'UI/UX, ou d'échanger sur les défis liés au développement sous Manifest V3.<br />
<br />
Liens :<br />
<br />
Site web : <a rel="nofollow" href="https://nexopad.app" target="_blank">https://nexopad.app</a><br />
<br />
Chrome Web Store: <a rel="nofollow" href="https://chromewebstore.google.com/detail/nexopad-expansor-de-texto/jjjmhgbdbepmledkcoalkfhnnnoignca" target="_blank">https://chromewebstore.google.com/de...alkfhnnnoignca</a><br />
<br />
Firefox Add-ons: <a rel="nofollow" href="https://addons.mozilla.org/es-ES/firefox/addon/nexopad-atajos-notas-y-links/" target="_blank">https://addons.mozilla.org/es-ES/fir...notas-y-links/</a><br />
<br />
Merci de m'avoir lu !</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>richyzx7</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183363/javascript/general-javascript/nexopad-j-ai-resolu-l-injection-dom-vanilla-js-creer-espace-travail-unifie/</guid>
		</item>
		<item>
			<title>Poser une question concernant JavaScript avec Edge ?</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183180&amp;goto=newpost</link>
			<pubDate>Mon, 13 Apr 2026 08:46:31 GMT</pubDate>
			<description>Bonjour, 
Je suis sous W11...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
Je suis sous W11 avec WebView, WebView4Delphi et JavaScript installé et maintenues à jour.<br />
Je rencontre un problème avec JavaScript dans Edge (via le WVBrowser object implémenté par WebView4Delphi).<br />
Pour le moment, je ne reçois aucune réponse sur le forum dédié à WebView4Delphi, où j'ai exposé mon problème.<br />
<br />
Je décris brièvement:<br />
je pars d'une page &quot;about<b></b>:blank&quot; chargé par la méthode Navigate, j'ajoute un élément HTML &quot;Script&quot; dans l'élément &quot;head&quot; de la page.<br />
Ce script contient la définition d'une fonction JavaScript créant un élément DIV avec un texte chargé dans l'attribut InnerText.<br />
L'ajout de cet élément script fonctionne bien et la fonction est appelable.<br />
<br />
Mais - lorsque j'appelle cette fonction, elle crée bien mon élément DIV ajouté au &quot;body&quot; de la page, mais le texte ne s'affiche pas.<br />
J'ai vérifié par l'inspecteur: <br />
l'attribut TextContent de monDIV attaché au body contient bien le texte que j'ai fourni mais rien n'est affiché.<br />
<br />
Pourriez-vous m'indiquer dans quel forum ou sousforum je pourrais poster ma question avec tous les détails (code HTML, JavaScript, captures etc) ?<br />
Merci !</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>KlausGunther</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183180/javascript/general-javascript/poser-question-concernant-javascript-edge/</guid>
		</item>
		<item>
			<title>Créer une expression javascript pour calculer un élément de la page</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183051&amp;goto=newpost</link>
			<pubDate>Sun, 05 Apr 2026 11:22:07 GMT</pubDate>
			<description>Bonjour, 
 
Je suis débutant...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
Je suis débutant en Javascript et nouveau sur ce forum, merci pour votre accueil. <br />
Sous Oracle Application Express, dans une &quot;Expression Javascript&quot;, je cherche a récupérer une valeur de deux élements d'un formulaire : P7_ROLE et P7_RELATION et selon ces valeurs, affecter une valeur à l'élément P7_PRIORITE_CONTACT.<br />
Voici les conditions :<br />
SI P7_ROLE = &quot;Décideur&quot; ET P7_RELATION = &quot;Chaud&quot; Alors P7_PRIORITE_CONTACT = &quot;Haute&quot;<br />
SI P7_ROLE = &quot;Décideur&quot; ET P7_RELATION = &quot;Tiède&quot;Alors P7_PRIORITE_CONTACT = &quot;Haute&quot;<br />
SI P7_ROLE = &quot;Prescripteur&quot; ET P7_RELATION = &quot;Chaud&quot; Alors P7_PRIORITE_CONTACT = &quot;Haute&quot;<br />
SI P7_ROLE = &quot;Froid&quot; = Basse Alors P7_RELATION = &quot;Basse&quot;<br />
SINON P7_RELATION = &quot;Moyenne&quot;.<br />
<br />
Meric pour votre aide.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>Chipniz</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183051/javascript/general-javascript/creer-expression-javascript-calculer-element-page/</guid>
		</item>
		<item>
			<title><![CDATA[éviter que copie de "<" devienne "&lt;" au collé]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182878&amp;goto=newpost</link>
			<pubDate>Thu, 26 Mar 2026 10:49:47 GMT</pubDate>
			<description>Bonjour tout le monde, 
...</description>
			<content:encoded><![CDATA[<div>Bonjour tout le monde,<br />
<br />
J'ai une petite fonction que j'utilise sur mon site pour la copie de code html et css généré par l'appli php, les codes sont contenus dans 2 textarea &quot;StriHtml&quot; et &quot;StriCss&quot;. Coté css tout se passe bien, par contre coté html les caractères de balises &lt; et &gt; deviennent &quot;&amp;lt;&quot; et &quot;&amp;gt;&quot; au collé dans un éditeur de texte.<br />
<br />
Un exemple parmi d'autres (c'est mieux qu'un long discours : <a rel="nofollow" href="https://codepen.io/erdouane/pen/QwKGwLP" target="_blank">https://codepen.io/erdouane/pen/QwKGwLP</a><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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">function</span> <span style="color: #0080ff;">CopierHtml</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span style="color: #0000ff;">var</span> text_to_copy = <span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">getElementById</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;StriHtml&quot;</span><span class="br0">&#41;</span>.innerHTML;
	<span style="color: #0080ff;">navigator</span>.clipboard.<span style="color: #0080ff;">writeText</span><span class="br0">&#40;</span>text_to_copy<span class="br0">&#41;</span>.<span style="color: #0080ff;">then</span><span class="br0">&#40;</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;">alert</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Code HTML copi&eacute;&quot;</span><span class="br0">&#41;</span>;
	<span class="br0">&#125;</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>J'ai beau chercher, je ne trouve pas de réponse (je ne pose certainement pas bien la question).<br />
Une âme charitable saurait-elle me trouver la bonne méthode ? <br />
Merci d'avance et bonne continuation à toutes et tous :D que vous ayez ou non la réponse.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>erranali</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182878/javascript/general-javascript/eviter-copie-devienne-lt-colle/</guid>
		</item>
		<item>
			<title><![CDATA[[Canvas] Supprimer les pixels d'une zone Canvas]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182636&amp;goto=newpost</link>
			<pubDate>Fri, 13 Mar 2026 19:46:13 GMT</pubDate>
			<description><![CDATA[Bonjour, 
 
J'essaie de...]]></description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
J'essaie de supprimer des pixels sur un <i>canvas</i> de HTML5 d'une forme semblable à <i>roundRect</i> avec les bords totalement arrondis pour créer un fond d'image transparent.<br />
<br />
Existe-t-il un moyen simple pour faire cela ?<br />
<br />
<font size="1">Petit point en plus : je ne cherche pas la rapidité mais plutôt la précision car c'est pour créer mon logo puis le télécharger en image.</font></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>Elliot2.0</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182636/javascript/general-javascript/canvas-supprimer-pixels-d-zone-canvas/</guid>
		</item>
		<item>
			<title>Faire glisser les pages de mon site internet (Photos) en utilisant un téléphone Androïd</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182304&amp;goto=newpost</link>
			<pubDate>Wed, 25 Feb 2026 09:49:38 GMT</pubDate>
			<description>Bonjour, 
 
je suis peu...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
je suis peu expérimenté mais comme mon site utilise quelques routines java je me demandais si c'était possible de compléter l'avance ou le recul des pages de mon site par glissement du doigt sur un téléphone Androïd , sur un PC ce sont les flèches droite &lt;=&gt; gauche qui permettent l'avance ou le recul.<br />
La séquence actuelle est : <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 /></div></td><td valign="top"><pre style="margin: 0"> <span style="color: #0000ff;">function</span> <span style="color: #0080ff;">handler</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><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">all</span><span class="br0">&#41;</span> e = <span style="color: #0080ff;">window</span>.<span style="color: #0080ff;">event</span>;
     <span style="color: #0000ff;">var</span> key;
     <span style="color: #0000ff;">var</span> msg = <span style="color: #FF0000;">''</span>;
     key = e.keyCode;
     <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">layers</span><span class="br0">&#41;</span> key = e.which;
     <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span><span style="color: #0080ff;">document</span>.<span style="color: #0080ff;">all</span><span class="br0">&#41;</span>    key = e.keyCode;
     <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>key==<span style="color: #cc66cc;">39</span><span class="br0">&#41;</span> msg = <span style="color: #FF0000;">'_00001.htm'</span>;
     <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>key==<span style="color: #cc66cc;">76</span><span class="br0">&#41;</span> msg = <span style="color: #FF0000;">'_00016.htm'</span>;
     <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>key==<span style="color: #cc66cc;">80</span>||key==<span style="color: #cc66cc;">37</span><span class="br0">&#41;</span> msg = <span style="color: #FF0000;">'_00015.htm'</span>;
     <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>msg!=<span style="color: #FF0000;">''</span><span class="br0">&#41;</span> <span style="color: #0080ff;">location</span> = msg;
   <span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>pour <b>key=39</b> flèche gauche c'est un recul et pour <b>key=76</b> flèche droite du PC c'est une avance.<br />
<br />
Si vous avez la solution à me proposer, je vous en remercie d'avance.<br />
<br />
Très bonne journée à vous.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>Trente</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182304/javascript/general-javascript/faire-glisser-pages-site-internet-photos-utilisant-telephone-android/</guid>
		</item>
		<item>
			<title>Convertir un texte html en image png</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181997&amp;goto=newpost</link>
			<pubDate>Mon, 09 Feb 2026 02:09:59 GMT</pubDate>
			<description><![CDATA[Bonjour, j'ai une zone de...]]></description>
			<content:encoded><![CDATA[<div>Bonjour, j'ai une zone de texte input, dans laquelle le client écrit son texte, je voudrais que via un lien, il puisse télécharger le texte écrit sur une image au format PNG, est ce que je peux avoir votre aide s'ils vous plait ?</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>Kojoh</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181997/javascript/general-javascript/convertir-texte-html-image-png/</guid>
		</item>
		<item>
			<title><![CDATA[Erreur : Identificateur inconnu, sur la fonction [alert]]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181455&amp;goto=newpost</link>
			<pubDate>Tue, 13 Jan 2026 11:14:35 GMT</pubDate>
			<description>Bonjour, 
 
Je suis le cours...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
Je suis <a rel="nofollow" href="https://fr.javascript.info/alert-prompt-confirm" target="_blank">le cours</a> <br />
<br />
<img src="https://www.developpez.net/forums/attachments/p673226d1768302684/javascript/general-javascript/erreur-identificateur-inconnu-fonction-alert/1.png/" border="0" alt="Nom : 1.png
Affichages : 152
Taille : 11,6 Ko"  style="float: CONFIG" /><br />
Quand je saisis le code dans node, il me reporte une erreur sur alert<br />
<img src="https://www.developpez.net/forums/attachments/p673227d1768302734/javascript/general-javascript/erreur-identificateur-inconnu-fonction-alert/2.png/" border="0" alt="Nom : 2.png
Affichages : 146
Taille : 16,0 Ko"  style="float: CONFIG" /><br />
<br />
Merci de votre aide</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/p673226d1768302684/javascript/general-javascript/erreur-identificateur-inconnu-fonction-alert/1.png/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p673227d1768302734/javascript/general-javascript/erreur-identificateur-inconnu-fonction-alert/2.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>frunch</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181455/javascript/general-javascript/erreur-identificateur-inconnu-fonction-alert/</guid>
		</item>
		<item>
			<title>Ouvrir des onglets sur des fenêtres avec window.open et chrome</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181340&amp;goto=newpost</link>
			<pubDate>Tue, 06 Jan 2026 15:51:02 GMT</pubDate>
			<description>Bonjour et meilleurs voeux !...</description>
			<content:encoded><![CDATA[<div>Bonjour et meilleurs voeux !<br />
<br />
A partir d'un bouton sur mon site web, en utilisant le navigateur Chrome, je voudrais ouvrir une URL sur une NOUVELLE fenêtre (pop-up) avec window.open, puis ouvrir 2 autres URL dans de nouveaux ONGLETS, sur la même pop-up précédemment créée.<br />
<br />
Savez-vous si c'est possible ?<br />
<br />
Je vous remercie</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>JeanParis</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181340/javascript/general-javascript/ouvrir-onglets-fenetres-window-open-chrome/</guid>
		</item>
		<item>
			<title>Pourquoi les navigateurs ralentissent-ils les minuteries JavaScript ? par Nolan Lawson</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181337&amp;goto=newpost</link>
			<pubDate>Tue, 06 Jan 2026 13:32:28 GMT</pubDate>
			<description>*Pourquoi les navigateurs...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Pourquoi les navigateurs ralentissent-ils les minuteries JavaScript ? par Nolan Lawson</font></b><br />
<br />
Même si vous utilisez JavaScript depuis un certain temps, vous serez peut-être surpris d'apprendre que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span></span> n'est pas vraiment <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span><span style="color: #cc66cc;">0</span><span class="br0">&#41;</span></span>. Au lieu de cela, il pourrait s'exécuter 4 millisecondes plus tard :<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"><span style="color: #0000ff;">const</span> start = performance.<span style="color: #0080ff;">now</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span> =&gt; <span class="br0">&#123;</span>
  <span style="color: #808080;">// Likely 4ms</span>
  console.<span style="color: #0080ff;">log</span><span class="br0">&#40;</span>performance.<span style="color: #0080ff;">now</span><span class="br0">&#40;</span><span class="br0">&#41;</span> - start<span class="br0">&#41;</span>
<span class="br0">&#125;</span>, <span style="color: #cc66cc;">0</span><span class="br0">&#41;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Il y a près de dix ans, lorsque je faisais partie de l'équipe Microsoft Edge, on m'a expliqué que les navigateurs faisaient cela pour éviter les « abus ». En d'autres termes, il existe de nombreux sites web qui spamment <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span>. Pour éviter de vider la batterie de l'utilisateur ou de bloquer l'interactivité, les navigateurs fixent un minimum spécial « bridé » de 4 ms.<br />
<br />
Cela explique également pourquoi certains navigateurs augmentent l'étranglement pour les appareils sur batterie (16 ms dans le cas de l'ancien Edge), ou l'étranglent encore plus agressivement pour les onglets en arrière-plan (1 seconde dans Chrome !).<br />
<br />
Une question m'a toujours taraudé : si <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> était si mal utilisé, pourquoi les navigateurs ont-ils continué à introduire de nouveaux temporisateurs comme <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">setImmediate</span> (RIP), Promises, ou même de nouvelles fantaisies comme <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">scheduler.<span style="color: #0080ff;">postTask</span><span class="br0">&#40;</span><span class="br0">&#41;</span></span> ? Si <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> devait être affaibli, ces temporisateurs ne subiraient-ils pas le même sort ?<br />
<br />
J'ai écrit un long billet sur les timers JavaScript en 2018, mais jusqu'à récemment, je n'avais pas de bonne raison de revenir sur cette question. Puis j'ai travaillé sur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fake-indexeddb</span>, qui est une implémentation purement JavaScript de l'API IndexedDB, et cette question a refait surface. Il s'avère qu'IndexedDB souhaite auto-commettre les transactions lorsqu'il n'y a pas de travail en cours dans la boucle d'événements - en d'autres termes, une fois que toutes les micro-tâches sont terminées, mais avant qu'aucune tâche (puis-je dire effrontément « macro-tâches » ?) n'ait commencé.<br />
<br />
Pour ce faire, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fake-indexeddb</span> utilisait <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">setImmediate</span> dans Node.js (qui partage certaines similitudes avec la version héritée du navigateur) et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> dans le navigateur. Dans Node, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">setImmediate</span> est en quelque sorte parfait, car il s'exécute après les microtâches mais immédiatement avant toute autre tâche, et sans serrage. Dans le navigateur, cependant, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> est plutôt sous-optimal : dans un benchmark, je voyais Chrome prendre 4,8 secondes pour quelque chose qui ne prenait que 300 millisecondes dans Node (un ralentissement de 16x !).<br />
<br />
En regardant le paysage des timers en 2025, il n'était pas évident de savoir quoi choisir. Voici quelques options possibles :<br />
<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">setImmediate</span> - uniquement supporté par les anciens Edge et IE, donc pas de choix.<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">MessageChannel.postMessage</span> - c'est la technique utilisée par afterframe.<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">window</span>.postMessage</span> - une bonne idée, mais un peu bancale car elle peut interférer avec d'autres scripts sur la page utilisant la même API. Cette approche est cependant utilisée par la polyfill <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">setImmediate</span>.<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">scheduler.postTask</span> - si vous ne lisez pas plus loin, c'est le gagnant. Mais expliquons pourquoi !<br />
<br />
Pour comparer ces options, j'ai écrit un rapide benchmark. Quelques points importants à propos de ce benchmark :<br />
<br />
1. Vous devez exécuter plusieurs itérations de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> (et de ses amis) pour vraiment comprendre le bridage. Techniquement, selon la spécification HTML, la limitation à 4 ms n'est censée intervenir qu'après qu'un <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> a été imbriqué (c'est-à-dire qu'un <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> en appelle un autre) 5 fois.<br />
<br />
2. Je n'ai pas testé toutes les combinaisons possibles entre 1) batterie et branchement, 2) taux de rafraîchissement du moniteur, 3) onglets d'arrière-plan et d'avant-plan, etc. J'ai une vie, et bien qu'il soit amusant d'enfiler la blouse de laboratoire et de faire quelques expériences, je ne veux pas passer tout mon samedi à le faire.<br />
<br />
Quoi qu'il en soit, voici les chiffres (en millisecondes, médiane de 101 itérations, sur un MacBook Pro 16 pouces de 2021) :<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p673069d1767710631/javascript/general-javascript/pourquoi-navigateurs-ralentissent-minuteries-javascript-nolan-lawson/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 37400
Taille : 25,3 Ko"  style="float: CONFIG" /></div><br />
<b>Note</b> : ce benchmark a été difficile à écrire ! Lorsque je l'ai écrit pour la première fois, j'ai utilisé <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">Promise</span>.<span style="color: #0080ff;">all</span></span> pour lancer tous les timers simultanément, mais cela semblait aller à l'encontre de l'heuristique d'imbrication de Safari, et faisait que le timer de Firefox se déclenchait de manière incohérente. Désormais, le benchmark exécute chaque minuterie de manière indépendante.<br />
<br />
Ne vous souciez pas trop des chiffres précis : l'essentiel est que Chrome et Firefox brident <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> à 4ms, et que les trois autres options sont à peu près équivalentes. Dans Safari, il est intéressant de noter que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> est encore plus fortement bridé, et que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">MessageChannel.postMessage</span> est un peu plus lent que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">window</span>.postMessage</span> (bien que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">window</span>.postMessage</span> soit toujours bancal pour les raisons citées plus haut).<br />
<br />
Cette expérience a répondu à ma question immédiate : <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fake-indexeddb</span> devrait utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">scheduler.postTask</span> (que je préfère pour son ergonomie) et se rabattre sur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">MessageChannel.postMessage</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">window</span>.postMessage</span>. (J'ai expérimenté différentes priorités pour <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">postTask</span>, mais elles ont toutes donné des résultats presque identiques. Pour le cas d'utilisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fake-indexeddb</span>, la priorité par défaut de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #FF0000;">'user-visible'</span></span> semblait la plus appropriée, et c'est ce que le benchmark utilise).<br />
<br />
Mais rien de tout cela ne répond à ma question initiale : pourquoi les navigateurs s'embarrassent-ils de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> si les développeurs web peuvent simplement utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">scheduler.postTask</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">MessageChannel</span> à la place ? J'ai posé la question à mon ami Todd Reifsteck, qui était co-président du groupe de travail sur les performances du web à l'époque où ces discussions sur les « interventions » étaient en cours.<br />
<br />
Il m'a répondu qu'il y avait en fait deux camps : l'un estimait que les temporisateurs devaient être limités pour protéger les développeurs Web contre eux-mêmes, tandis que l'autre estimait que les développeurs devaient « mesurer leur propre folie » et que toute heuristique de limitation subtile ne ferait que semer la confusion. En bref, il s'agissait d'un compromis standard dans la conception d'API performantes : « certaines API sont rapides mais sont accompagnées de fusils à pompe ».<br />
<br />
Cela correspond à mes propres intuitions sur le sujet. Les interventions du navigateur sont généralement mises en place parce que les développeurs web ont soit utilisé trop d'une bonne chose (par exemple <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span>), soit ignoré allègrement de meilleures options (la controverse sur le Touch Listener en est un bon exemple). En fin de compte, le navigateur est un « agent utilisateur » qui agit au nom de l'utilisateur, et la priorité des groupes d'intérêt du W3C indique clairement que les besoins de l'utilisateur final l'emportent toujours sur ceux du développeur web.<br />
<br />
Cela dit, les développeurs web veulent souvent faire ce qu'il faut. (Nous n'avons simplement pas toujours les outils pour le faire, alors nous saisissons l'instrument contondant qui se trouve à proximité et commençons à frapper. En nous donnant plus de contrôle sur les tâches et la planification, nous pourrions éviter d'avoir à marteler <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> et de provoquer un désordre qui nécessite une intervention.<br />
<br />
Ma prédiction est que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">postTask</span> / <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">postMessage</span> resteront pour l'instant sans ralentissement. Parmi les deux « camps » de Todd, l'existence même de l'API Scheduler, qui offre toute une série d'outils de planification des tâches, semble indiquer que le camp « pro-contrôle » est celui qui dirige actuellement le navire. Todd considère l'API comme un compromis entre les deux groupes : oui, elle offre beaucoup de contrôle, mais elle s'aligne également sur le pipeline de rendu du navigateur plutôt que sur des délais aléatoires.<br />
<br />
Le pessimiste en moi se demande cependant si l'API ne pourrait pas encore être utilisée de manière abusive, par exemple en utilisant sans précaution la priorité <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">user-blocking</span> partout. Peut-être qu'à l'avenir, un éditeur de navigateur entreprenant mettra plus fermement le pied sur l'accélérateur (pour ainsi dire) et découvrira que cela rend les sites web plus rapides, plus réactifs et moins gourmands en batterie. Dans ce cas, nous pourrions assister à une nouvelle série d'interventions. (Peut-être aurons-nous besoin d'une API <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">scheduler2</span> pour nous sortir de ce pétrin !)<br />
<br />
Je ne suis plus très impliqué dans les normes du web et je ne peux que spéculer. Pour l'instant, je me contenterai de faire ce que font la plupart des développeurs web : choisir l'API qui me permet d'atteindre mes objectifs aujourd'hui, et espérer que les navigateurs ne changeront pas trop à l'avenir. Tant que nous sommes prudents et que nous n'introduisons pas trop de « bêtises », je ne pense pas que ce soit trop demander.<br />
<br />
Merci à Todd Reifsteck pour ses commentaires sur une version préliminaire de cet article.<br />
<br />
<b>Note</b> : tout ce que j'ai dit à propos de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> pourrait également être dit à propos de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setInterval</span></span>. Du point de vue du navigateur, il s'agit pratiquement des mêmes API.<br />
<br />
<b>Note</b> : pour ce que ça vaut, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fake-indexeddb</span> utilise toujours <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">setTimeout</span></span> plutôt que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">MessageChannel</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">window</span>.postMessage</span> dans Safari. Malgré mes benchmarks ci-dessus, je n'ai pu obtenir que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">window</span>.postMessage</span> surpasse les deux autres dans le propre benchmark de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fake-indexeddb</span> - Safari semble avoir un certain étranglement supplémentaire pour <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">MessageChannel</span> que mon benchmark autonome n'a pas pu mettre en évidence. Et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">window</span>.postMessage</span> me semble toujours sujet à des erreurs, je suis donc réticent à l'utiliser. Pour les curieux, voici <a rel="nofollow" href="https://nolanlawson.github.io/fake-indexeddb-timer-benchmark/" target="_blank">mon benchmark</a>.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://nolanlawson.com/2025/08/31/why-do-browsers-throttle-javascript-timers/" target="_blank">&quot;Why do browsers throttle JavaScript timers?&quot;</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cet avis est crédible ou pertinent ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/369946/Pourquoi-je-suis-sceptique-quant-a-la-reecriture-des-outils-JavaScript-dans-des-langages-plus-rapides-par-Nolan-Lawson/" target="_blank">Pourquoi je suis sceptique quant à la réécriture des outils JavaScript dans des langages &quot;plus rapides&quot;, par Nolan Lawson</a><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/369725/Tout-partout-en-meme-temps-Les-promesses-JavaScript-par-Mensur-Durakovic/" target="_blank">Tout partout en même temps : Les promesses JavaScript, par Mensur Durakovic</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/p673069d1767710631/javascript/general-javascript/pourquoi-navigateurs-ralentissent-minuteries-javascript-nolan-lawson/1.jpg/" 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>Nolan Lawson</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181337/javascript/general-javascript/pourquoi-navigateurs-ralentissent-minuteries-javascript-nolan-lawson/</guid>
		</item>
		<item>
			<title>Bug Index is not a function</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181249&amp;goto=newpost</link>
			<pubDate>Thu, 01 Jan 2026 14:16:18 GMT</pubDate>
			<description>Bonjour à tous, 
 
Meilleurs...</description>
			<content:encoded><![CDATA[<div>Bonjour à tous,<br />
<br />
Meilleurs voeux de code...<br />
Je débute en Javascript et j'apprécie de trouver ce forum, après celui pour le vba.<br />
Je me sers de Visual studio et d'une vidéo d'il y a 4 ans.<br />
<br />

<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/nB4ziHtJsQo?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
<br />
Voilà le bug de la console<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p672949d1767276540/javascript/general-javascript/bug-index-is-not-function/bug.png/" border="0" alt="Nom : bug.png
Affichages : 143
Taille : 18,7 Ko"  style="float: CONFIG" /><br />
Je comprends ce qui ne va pas dans la page de VS :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p672950d1767276664/javascript/general-javascript/bug-index-is-not-function/bug2.png/" border="0" alt="Nom : bug2.png
Affichages : 139
Taille : 96,8 Ko"  style="float: CONFIG" /><br />
<br />
Merci pour votre aide</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/p672949d1767276540/javascript/general-javascript/bug-index-is-not-function/bug.png/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p672950d1767276664/javascript/general-javascript/bug-index-is-not-function/bug2.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>frunch</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181249/javascript/general-javascript/bug-index-is-not-function/</guid>
		</item>
		<item>
			<title>Next.js 16.1, le framework open source de développement web full-stack, est désormais disponible</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181116&amp;goto=newpost</link>
			<pubDate>Mon, 22 Dec 2025 20:02:42 GMT</pubDate>
			<description>*Next.js 16.1, le framework...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Next.js 16.1, le framework open source de développement web full-stack, est désormais disponible avec la mise en cache du système de fichiers Turbopack, un analyseur de bundles Next.js et bien plus encore</font></b><br />
<br />
<b>La version 16.1 de Next.js, le framework de développement web open source, est désormais disponible. Cette mise à jour stabilise et active par défaut la mise en cache du système de fichiers Turbopack pour le serveur de développement, ce qui permet de réduire considérablement les temps de compilation dans les grands projets. Elle introduit également un nouvel outil expérimental, Bundle Analyzer, pour aider les développeurs à optimiser la taille des bundles serveur et client, ainsi que plusieurs autres améliorations. </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 fournit des applications web basées sur React avec rendu côté serveur et rendu statique. La documentation React mentionne Next.js parmi les « chaînes d'outils recommandées » et le conseille aux développeurs qui « créent un site web rendu côté serveur avec Node.js ». Alors que les applications React traditionnelles ne peuvent rendre leur contenu que dans le navigateur côté client, Next.js étend cette fonctionnalité pour inclure les applications rendues côté serveur. Les droits d'auteur et les marques commerciales de Next.js sont détenus par Vercel, qui assure également la maintenance et dirige son développement open source.<br />
<br />
Next.js 16.1 est la dernière mise à jour du célèbre framework open source React, qui met l'accent sur des workflows de développement plus rapides et une plus grande stabilité. Les développeurs bénéficieront d'améliorations notables apportées à Turbopack et aux outils de projet. La mise en cache du système de fichiers Turbopack pour le serveur de développement est désormais stable et activée par défaut. Elle stocke les artefacts du compilateur sur le disque pour des temps de compilation beaucoup plus rapides, en particulier lors du redémarrage des serveurs dans les grands projets.<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/I1V9YWqRIeI?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
S'appuyant sur ces améliorations, la mise à jour introduit un nouvel outil expérimental, Bundle Analyzer, pour Turbopack. Cet outil facilite l'optimisation de la taille des bundles serveur et client, contribuant ainsi à améliorer les Core Web Vitals, à réduire les temps de démarrage à froid lambda et à révéler les dépendances inutiles qui alourdissent le système. Bundle Analyzer en est encore à un stade précoce de développement et sera encore perfectionné.<br />
<br />
Pour le débogage, les développeurs peuvent désormais activer le débogueur Node.js dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">next dev</span> en passant simplement le drapeau <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--inspect</span>. Cette modification applique l'inspecteur uniquement au processus concerné, éliminant ainsi le besoin de solutions de contournement globales <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">NODE_OPTIONS=--inspect</span>. <br />
<br />
En ce qui concerne la gestion des dépendances, Turbopack résout et externalise désormais correctement les dépendances transitives lors de l'utilisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">serverExternalPackages</span>, ce qui réduit les frictions liées à la configuration et évite les conflits de version.<br />
<br />
<b><font size="3">Mise en cache du système de fichiers Turbopack pour <i>next dev</i></font></b><br />
<br />
La mise en cache du système de fichiers Turbopack pour next dev est désormais stable et activée par défaut. Les artefacts du compilateur sont stockés sur le disque, ce qui accélère considérablement les temps de compilation lors du redémarrage du serveur de développement, en particulier dans les projets de grande envergure.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p672720d1766433701/javascript/general-javascript/next-js-16-1-framework-open-source-developpement-web-full-stack-desormais-disponible/next.js-16.1-fig-1.png/" border="0" alt="Nom : next.js 16.1 fig 1.PNG
Affichages : 20766
Taille : 15,8 Ko"  style="float: CONFIG" /></div><br />
Les applications internes chez Vercel ont testé cette fonctionnalité au cours de l'année écoulée. <br />
<br />
L'équipe de Next.js a indiqué qu'elle stabilisera la mise en cache du système de fichiers pour la prochaine version. <br />
<br />
<b><font size="3">Analyseur de bundle Next.js (expérimental)</font></b><br />
<br />
Next.js 16.1 inclut un nouvel outil expérimental, Bundle Analyzer, qui fonctionne avec Turbopack. Il facilite l'optimisation de la taille des bundles pour le code serveur et client, ce qui contribue à améliorer les Core Web Vitals, à réduire les temps de démarrage à froid de lambda et à identifier les dépendances trop lourdes.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">next experimental-analyze</code><hr />
</div><br />
L'exécution de cette commande lance une interface utilisateur interactive permettant d'inspecter les paquets de production, d'identifier les modules volumineux et de voir pourquoi ils sont inclus.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p672721d1766433716/javascript/general-javascript/next-js-16-1-framework-open-source-developpement-web-full-stack-desormais-disponible/next.js-16.1-fig-2.png/" border="0" alt="Nom : next.js 16.1 fig 2.PNG
Affichages : 3903
Taille : 108,8 Ko"  style="float: CONFIG" /></div><br />
Le Bundle Analyzer est profondément intégré à Next.js, ce qui permet de :<br />
<br />
<ul><li style=""> Filtrer les bundles par route</li><li style=""> Afficher la chaîne d'importation complète indiquant pourquoi un module est inclus</li><li style=""> Tracer les importations entre les composants serveur-client et les importations dynamiques</li><li style=""> Afficher la taille des fichiers CSS et autres ressources importées</li><li style=""> Basculer entre les vues client et serveur</li></ul><br />
Le Bundle Analyzer en est encore à ses débuts et sera amélioré dans les prochaines versions.<br />
<br />
<b><font size="3">Débogage simplifié avec <i>next dev --inspect</i></font></b><br />
<br />
Les développeurs peuvent désormais activer le débogueur Node.js en passant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--inspect</span> à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">next dev</span>. Auparavant, cela nécessitait de passer <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">NODE_OPTIONS=--inspect</span> et attachait l'inspecteur à tous les processus générés par Next.js au lieu de seulement au processus exécutant le code.<br />
<br />
<b><font size="3">Amélioration de la gestion de <i>serverExternalPackages</i></font></b><br />
<br />
Next.js permet aux utilisateurs de garder les dépendances dégroupées à l'aide de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">serverExternalPackages</span>. Auparavant, cela ne fonctionnait de manière fiable que pour les dépendances directes. Si un développeur utilisait une bibliothèque qui dépendait en interne de quelque chose comme <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">sqlite</span> et devait externaliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">sqlite</span>, il fallait l'ajouter à son propre <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">package.json</span>, même si ce n'était pas une dépendance directe. Cette solution de contournement divulguait des détails d'implémentation internes, créait une charge de maintenance et pouvait entraîner des conflits de versions impossibles à résoudre lorsque plusieurs paquets nécessitaient différentes versions de la même dépendance.<br />
<br />
Next.js 16.1 corrige ce problème pour Turbopack, qui résout et externalise désormais correctement les dépendances transitives dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">serverExternalPackages</span> sans configuration supplémentaire.<br />
<br />
Parmi les autres améliorations, on peut citer une réduction de 20 Mo de la taille des installations, une nouvelle commande de mise à niveau et d'autres améliorations.<br />
<br />
Exécutez les commandes ci-dessous pour mettre à jour votre installation vers la dernière version de 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"># Use the automated upgrade CLI
npx @next/codemod@canary upgrade latest
&nbsp;
# ...or upgrade manually
npm install next@latest react@latest react-dom@latest
&nbsp;
# ...or start a <span style="color: #0000ff;">new</span> project
npx create-next-app@latest</pre></td></tr></table></code><hr />
</div><br />
<b>Source :</b> <a rel="nofollow" href="https://nextjs.org/" target="_blank">Next.js</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Que pensez-vous des nouveautés proposées par cette version de Next.js ? Les trouvez-vous utiles et intéressantes ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://securite.developpez.com/actu/378373/Une-faille-de-securite-critique-dans-React-Server-Components-React2Shell-affecte-la-bibliotheque-JavaScript-React-et-le-framework-Next-js-et-expose-les-serveurs-a-l-execution-de-code-a-distance/" target="_blank">Une faille de sécurité critique dans React Server Components, &quot;React2Shell&quot;, affecte la bibliothèque JavaScript React et le framework Next.js et expose les serveurs à l'exécution de code à distance</a><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/349994/Next-js-le-framework-de-developpement-web-open-source-devoile-Next-js-14-la-nouvelle-version-offre-un-compilateur-ameliore-Next-js-Turbopack-et-un-apercu-de-la-fonctionnalite-Pre-rendu-partiel/" target="_blank">Next.js, le framework de développement web open-source, dévoile Next.js 14, la nouvelle version offre un compilateur amélioré Next.js Turbopack et un aperçu de la fonctionnalité Pré-rendu partiel</a><br />
<br />
:fleche: <a href="https://javascript.developpez.com/actu/338029/Next-js-13-est-disponible-elle-apporte-Turbopack-le-nouveau-successeur-de-Webpack-base-sur-Rust-sur-une-application-comportant-3-000-modules-le-demarrage-de-Turbopack-prend-1-8-seconde/" target="_blank">Next.js 13 est disponible, elle apporte Turbopack, le nouveau successeur de Webpack basé sur Rust, sur une application comportant 3 000 modules, le démarrage de Turbopack prend 1,8 seconde</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/p672720d1766433701/javascript/general-javascript/next-js-16-1-framework-open-source-developpement-web-full-stack-desormais-disponible/next.js-16.1-fig-1.png/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p672721d1766433716/javascript/general-javascript/next-js-16-1-framework-open-source-developpement-web-full-stack-desormais-disponible/next.js-16.1-fig-2.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/d2181116/javascript/general-javascript/next-js-16-1-framework-open-source-developpement-web-full-stack-desormais-disponible/</guid>
		</item>
		<item>
			<title>Affichage progression pendant calcul long</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180903&amp;goto=newpost</link>
			<pubDate>Tue, 09 Dec 2025 12:23:44 GMT</pubDate>
			<description>Je cherche à défiger ma page....</description>
			<content:encoded><![CDATA[<div>Je cherche à défiger ma page.<br />
Je veux réaliser de long calculs et je veux pouvoir afficher la progression. Pour cela j'ai utilisé setTimeout qui me permet de voir le texte d'information renseigné par le code en cours d'exécution.<br />
par exemple : <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 /></div></td><td valign="top"><pre style="margin: 0">  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 1&quot;</span>;
  <span style="color: #0080ff;">calcul1</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 2&quot;</span>;
  <span style="color: #0080ff;">calcul2</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 3&quot;</span>;
  <span style="color: #0080ff;">calcul3</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 4&quot;</span>;
  <span style="color: #0080ff;">calcul4</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 5&quot;</span>;
  <span style="color: #0080ff;">calcul5</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul termin&eacute;s&quot;</span></pre></td></tr></table></code><hr />
</div>Cela n'affiche rien tant que les calculs ne sont pas terminés et affiche directement &quot;Calcul terminés&quot; à  la fin.<br />
J'ai donc utilisé le code suivant :<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 /></div></td><td valign="top"><pre style="margin: 0">imgage.src = <span style="color: #FF0000;">&quot;PhotoLoading.png&quot;</span>;
<span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span>init,<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">function</span>  <span style="color: #0080ff;">init</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 1&quot;</span>;<span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>=&gt;<span class="br0">&#123;</span>
  <span style="color: #0080ff;">calcul1</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 2&quot;</span>;<span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>=&gt;<span class="br0">&#123;</span>
  <span style="color: #0080ff;">calcul2</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 3&quot;</span>;<span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>=&gt;<span class="br0">&#123;</span>
  <span style="color: #0080ff;">calcul3</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 4&quot;</span>;<span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>=&gt;<span class="br0">&#123;</span>
  <span style="color: #0080ff;">calcul4</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul 5&quot;</span>;<span style="color: #0080ff;">setTimeout</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>=&gt;<span class="br0">&#123;</span>
  <span style="color: #0080ff;">calcul5</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
  txtLoadingInfo.innerHTML= <span style="color: #FF0000;">&quot;Calcul termin&eacute;s&quot;</span>
  <span class="br0">&#125;</span>,<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>;<span class="br0">&#125;</span>,<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>;<span class="br0">&#125;</span>,<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>;<span class="br0">&#125;</span>,<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>;<span class="br0">&#125;</span>,<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>;<span class="br0">&#125;</span>,<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>Résultat: ca fonctionne mais le code n'est pas beau, de plus l'image dont src est renseignée par &quot;PhotoLoading.png&quot; n'apparaît que après le 2ème calcul sauf si je met le premier setTimeout à 100 ms.<br />
Est-il possible de faire plus élégant en utilisant Async Await ?<br />
J'ai un peu testé et je n'ai pas réussi.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f23/javascript/general-javascript/">Général JavaScript</category>
			<dc:creator>seroze</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180903/javascript/general-javascript/affichage-progression-pendant-calcul-long/</guid>
		</item>
	</channel>
</rss>
