<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Novità Archivi - RD Tech</title>
	<atom:link href="https://www.rdtech.it/category/novita/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.rdtech.it/category/novita/</link>
	<description>Ricerca e Sviluppo messi a disposizione delle Imprese Italiane</description>
	<lastBuildDate>Wed, 09 Apr 2025 13:09:12 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>Nuovo Percorso Formativo avviato tra RD Tech e Istituto di Istruzione Superiore &#8220;Carlo Rambaldi&#8221; di Lamezia Terme</title>
		<link>https://www.rdtech.it/pcto-istituto-carlo-rambaldi-lamezia/</link>
					<comments>https://www.rdtech.it/pcto-istituto-carlo-rambaldi-lamezia/#respond</comments>
		
		<dc:creator><![CDATA[publisher]]></dc:creator>
		<pubDate>Mon, 26 Feb 2024 16:52:42 +0000</pubDate>
				<category><![CDATA[Novità]]></category>
		<guid isPermaLink="false">https://www.rdtech.it/?p=2007</guid>

					<description><![CDATA[<p>Nuovo Percorso Formativo avviato tra RD Tech e Istituto di Istruzione Superiore &#8220;Carlo Rambaldi&#8221; di Lamezia TermeLa RD Tech ha ospitato oggi la classe 5H del Polo Tecnologico nella sede sita in Caraffa di Catanzaro per dare avvio al Percorso per le Competenze Trasversali e di Orientamento (PCTO). La collaborazione tra RD Tech e Polo Tecnologico per lo svolgimento dei percorsi formativi ha avuto inizio nel 2019 e ogni anno permette agli studenti coinvolti l&#8217;acquisizione di competenze nell&#8217;ambito informatico attraverso un&#8217;esperienza diretta in azienda. La RD Tech ringrazia il Dirigente Scolastico Anna Primavera e il Prof. Roberto Bennardo per la…</p>
<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/pcto-istituto-carlo-rambaldi-lamezia/">Nuovo Percorso Formativo avviato tra RD Tech e Istituto di Istruzione Superiore &#8220;Carlo Rambaldi&#8221; di Lamezia Terme</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="2007" class="elementor elementor-2007">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-ac6a33c elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="ac6a33c" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fe36c88" data-id="fe36c88" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-02c692a elementor-widget elementor-widget-gallery" data-id="02c692a" data-element_type="widget" data-settings="{&quot;columns&quot;:2,&quot;aspect_ratio&quot;:&quot;1:1&quot;,&quot;lazyload&quot;:&quot;yes&quot;,&quot;gallery_layout&quot;:&quot;grid&quot;,&quot;columns_tablet&quot;:2,&quot;columns_mobile&quot;:1,&quot;gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;link_to&quot;:&quot;file&quot;,&quot;overlay_background&quot;:&quot;yes&quot;,&quot;content_hover_animation&quot;:&quot;fade-in&quot;}" data-widget_type="gallery.default">
				<div class="elementor-widget-container">
			<style>/*! elementor-pro - v3.12.0 - 29-03-2023 */
.elementor-gallery__container{min-height:1px}.elementor-gallery-item{position:relative;overflow:hidden;display:block;text-decoration:none;border:solid var(--image-border-width) var(--image-border-color);border-radius:var(--image-border-radius)}.elementor-gallery-item__content,.elementor-gallery-item__overlay{height:100%;width:100%;position:absolute;top:0;left:0}.elementor-gallery-item__overlay{mix-blend-mode:var(--overlay-mix-blend-mode);transition-duration:var(--overlay-transition-duration);transition-property:mix-blend-mode,transform,opacity,background-color}.elementor-gallery-item__image.e-gallery-image{transition-duration:var(--image-transition-duration);transition-property:filter,transform}.elementor-gallery-item__content{display:flex;flex-direction:column;justify-content:var(--content-justify-content,center);align-items:center;text-align:var(--content-text-align);padding:var(--content-padding)}.elementor-gallery-item__content>div{transition-duration:var(--content-transition-duration)}.elementor-gallery-item__content.elementor-gallery--sequenced-animation>div:nth-child(2){transition-delay:calc(var(--content-transition-delay) / 3)}.elementor-gallery-item__content.elementor-gallery--sequenced-animation>div:nth-child(3){transition-delay:calc(var(--content-transition-delay) / 3 * 2)}.elementor-gallery-item__content.elementor-gallery--sequenced-animation>div:nth-child(4){transition-delay:calc(var(--content-transition-delay) / 3 * 3)}.elementor-gallery-item__description{color:var(--description-text-color,#fff);width:100%}.elementor-gallery-item__title{color:var(--title-text-color,#fff);font-weight:700;width:100%}.elementor-gallery__titles-container{display:flex;flex-wrap:wrap;justify-content:var(--titles-container-justify-content,center);margin-bottom:20px}.elementor-gallery__titles-container:not(.e--pointer-framed) .elementor-item:after,.elementor-gallery__titles-container:not(.e--pointer-framed) .elementor-item:before{background-color:var(--galleries-pointer-bg-color-hover)}.elementor-gallery__titles-container:not(.e--pointer-framed) .elementor-item.elementor-item-active:after,.elementor-gallery__titles-container:not(.e--pointer-framed) .elementor-item.elementor-item-active:before{background-color:var(--galleries-pointer-bg-color-active)}.elementor-gallery__titles-container.e--pointer-framed .elementor-item:before{border-color:var(--galleries-pointer-bg-color-hover);border-width:var(--galleries-pointer-border-width)}.elementor-gallery__titles-container.e--pointer-framed .elementor-item:after{border-color:var(--galleries-pointer-bg-color-hover)}.elementor-gallery__titles-container.e--pointer-framed .elementor-item.elementor-item-active:after,.elementor-gallery__titles-container.e--pointer-framed .elementor-item.elementor-item-active:before{border-color:var(--galleries-pointer-bg-color-active)}.elementor-gallery__titles-container.e--pointer-framed.e--animation-draw .elementor-item:before{border-left-width:var(--galleries-pointer-border-width);border-bottom-width:var(--galleries-pointer-border-width);border-right-width:0;border-top-width:0}.elementor-gallery__titles-container.e--pointer-framed.e--animation-draw .elementor-item:after{border-left-width:0;border-bottom-width:0;border-right-width:var(--galleries-pointer-border-width);border-top-width:var(--galleries-pointer-border-width)}.elementor-gallery__titles-container.e--pointer-framed.e--animation-corners .elementor-item:before{border-left-width:var(--galleries-pointer-border-width);border-bottom-width:0;border-right-width:0;border-top-width:var(--galleries-pointer-border-width)}.elementor-gallery__titles-container.e--pointer-framed.e--animation-corners .elementor-item:after{border-left-width:0;border-bottom-width:var(--galleries-pointer-border-width);border-right-width:var(--galleries-pointer-border-width);border-top-width:0}.elementor-gallery__titles-container .e--pointer-double-line .elementor-item:after,.elementor-gallery__titles-container .e--pointer-double-line .elementor-item:before,.elementor-gallery__titles-container .e--pointer-overline .elementor-item:before,.elementor-gallery__titles-container .e--pointer-underline .elementor-item:after{height:var(--galleries-pointer-border-width)}.elementor-gallery-title{--space-between:10px;cursor:pointer;color:#6d7882;font-weight:500;position:relative;padding:7px 14px;transition:all .3s}.elementor-gallery-title--active{color:#495157}.elementor-gallery-title:not(:last-child){margin-right:var(--space-between)}.elementor-gallery-item__title+.elementor-gallery-item__description{margin-top:var(--description-margin-top)}.e-gallery-item.elementor-gallery-item{transition-property:all}.e-gallery-item.elementor-animated-content .elementor-animated-item--enter-from-bottom,.e-gallery-item.elementor-animated-content .elementor-animated-item--enter-from-left,.e-gallery-item.elementor-animated-content .elementor-animated-item--enter-from-right,.e-gallery-item.elementor-animated-content .elementor-animated-item--enter-from-top,.e-gallery-item:hover .elementor-gallery__item-overlay-bg,.e-gallery-item:hover .elementor-gallery__item-overlay-content,.e-gallery-item:hover .elementor-gallery__item-overlay-content__description,.e-gallery-item:hover .elementor-gallery__item-overlay-content__title{opacity:1}a.elementor-item.elementor-gallery-title{color:var(--galleries-title-color-normal)}a.elementor-item.elementor-gallery-title.elementor-item-active,a.elementor-item.elementor-gallery-title.highlighted,a.elementor-item.elementor-gallery-title:focus,a.elementor-item.elementor-gallery-title:hover{color:var(--galleries-title-color-hover)}a.elementor-item.elementor-gallery-title.elementor-item-active{color:var(--gallery-title-color-active)}.e-con-inner>.elementor-widget-gallery,.e-con>.elementor-widget-gallery{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}</style>		<div class="elementor-gallery__container">
							<a class="e-gallery-item elementor-gallery-item elementor-animated-content" href="https://www.rdtech.it/wp-content/uploads/2024/02/IMG_20240226_104705-1-scaled.jpg" data-elementor-open-lightbox="yes" data-elementor-lightbox-slideshow="all-02c692a" data-elementor-lightbox-title="IMG_20240226_104705 (1)" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjAyMCwidXJsIjoiaHR0cHM6XC9cL3d3dy5yZHRlY2guaXRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjRcLzAyXC9JTUdfMjAyNDAyMjZfMTA0NzA1LTEtc2NhbGVkLmpwZyIsInNsaWRlc2hvdyI6ImFsbC0wMmM2OTJhIn0%3D">
					<div class="e-gallery-image elementor-gallery-item__image" data-thumbnail="https://www.rdtech.it/wp-content/uploads/2024/02/IMG_20240226_104705-1-1024x578.jpg" data-width="1024" data-height="578" aria-label="" role="img" ></div>
											<div class="elementor-gallery-item__overlay"></div>
														</a>
							<a class="e-gallery-item elementor-gallery-item elementor-animated-content" href="https://www.rdtech.it/wp-content/uploads/2024/02/DSC05045.png" data-elementor-open-lightbox="yes" data-elementor-lightbox-slideshow="all-02c692a" data-elementor-lightbox-title="DSC05045" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjAxNywidXJsIjoiaHR0cHM6XC9cL3d3dy5yZHRlY2guaXRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjRcLzAyXC9EU0MwNTA0NS5wbmciLCJzbGlkZXNob3ciOiJhbGwtMDJjNjkyYSJ9">
					<div class="e-gallery-image elementor-gallery-item__image" data-thumbnail="https://www.rdtech.it/wp-content/uploads/2024/02/DSC05045-1024x683.png" data-width="1024" data-height="683" aria-label="" role="img" ></div>
											<div class="elementor-gallery-item__overlay"></div>
														</a>
							<a class="e-gallery-item elementor-gallery-item elementor-animated-content" href="https://www.rdtech.it/wp-content/uploads/2024/02/DSC05043.png" data-elementor-open-lightbox="yes" data-elementor-lightbox-slideshow="all-02c692a" data-elementor-lightbox-title="DSC05043" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjAxOCwidXJsIjoiaHR0cHM6XC9cL3d3dy5yZHRlY2guaXRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjRcLzAyXC9EU0MwNTA0My5wbmciLCJzbGlkZXNob3ciOiJhbGwtMDJjNjkyYSJ9">
					<div class="e-gallery-image elementor-gallery-item__image" data-thumbnail="https://www.rdtech.it/wp-content/uploads/2024/02/DSC05043-1024x683.png" data-width="1024" data-height="683" aria-label="" role="img" ></div>
											<div class="elementor-gallery-item__overlay"></div>
														</a>
							<a class="e-gallery-item elementor-gallery-item elementor-animated-content" href="https://www.rdtech.it/wp-content/uploads/2024/02/DSC05051.png" data-elementor-open-lightbox="yes" data-elementor-lightbox-slideshow="all-02c692a" data-elementor-lightbox-title="DSC05051" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjAxMSwidXJsIjoiaHR0cHM6XC9cL3d3dy5yZHRlY2guaXRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjRcLzAyXC9EU0MwNTA1MS5wbmciLCJzbGlkZXNob3ciOiJhbGwtMDJjNjkyYSJ9">
					<div class="e-gallery-image elementor-gallery-item__image" data-thumbnail="https://www.rdtech.it/wp-content/uploads/2024/02/DSC05051-1024x683.png" data-width="1024" data-height="683" aria-label="" role="img" ></div>
											<div class="elementor-gallery-item__overlay"></div>
														</a>
							<a class="e-gallery-item elementor-gallery-item elementor-animated-content" href="https://www.rdtech.it/wp-content/uploads/2024/02/DSC05047.png" data-elementor-open-lightbox="yes" data-elementor-lightbox-slideshow="all-02c692a" data-elementor-lightbox-title="DSC05047" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjAxNSwidXJsIjoiaHR0cHM6XC9cL3d3dy5yZHRlY2guaXRcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjRcLzAyXC9EU0MwNTA0Ny5wbmciLCJzbGlkZXNob3ciOiJhbGwtMDJjNjkyYSJ9">
					<div class="e-gallery-image elementor-gallery-item__image" data-thumbnail="https://www.rdtech.it/wp-content/uploads/2024/02/DSC05047-1024x683.png" data-width="1024" data-height="683" aria-label="" role="img" ></div>
											<div class="elementor-gallery-item__overlay"></div>
														</a>
					</div>
			</div>
				</div>
					</div>
		</div>
							</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-256239a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="256239a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fde5768" data-id="fde5768" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-19952bd elementor-widget elementor-widget-text-editor" data-id="19952bd" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style>				<p>Nuovo Percorso Formativo avviato tra RD Tech e Istituto di Istruzione Superiore &#8220;Carlo Rambaldi&#8221; di Lamezia Terme<br />La RD Tech ha ospitato oggi la classe 5H del Polo Tecnologico nella sede sita in Caraffa di Catanzaro per dare avvio al Percorso per le Competenze Trasversali e di Orientamento (PCTO).<br /><span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);"><br />La collaborazione tra RD Tech e Polo Tecnologico per lo svolgimento dei percorsi formativi ha avuto inizio nel 2019 e ogni anno permette agli studenti coinvolti l&#8217;acquisizione di competenze nell&#8217;ambito informatico attraverso un&#8217;esperienza diretta in azienda.</span></p><p>La RD Tech ringrazia il Dirigente Scolastico Anna Primavera e il Prof. Roberto Bennardo per la fiducia riposta nel nostro team di lavoro.</p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/pcto-istituto-carlo-rambaldi-lamezia/">Nuovo Percorso Formativo avviato tra RD Tech e Istituto di Istruzione Superiore &#8220;Carlo Rambaldi&#8221; di Lamezia Terme</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.rdtech.it/pcto-istituto-carlo-rambaldi-lamezia/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Le novità di Angular 17</title>
		<link>https://www.rdtech.it/novita-angular-17/</link>
					<comments>https://www.rdtech.it/novita-angular-17/#respond</comments>
		
		<dc:creator><![CDATA[Matteo Veraldi]]></dc:creator>
		<pubDate>Mon, 13 Nov 2023 16:39:11 +0000</pubDate>
				<category><![CDATA[Angular]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[Novità]]></category>
		<category><![CDATA[Senza categoria]]></category>
		<category><![CDATA[Web]]></category>
		<guid isPermaLink="false">https://www.rdtech.it/?p=1912</guid>

					<description><![CDATA[<p>Angular si è rinnovato con un sito completamente nuovo ed un insieme di funzionalità che danno una ventata d&#8217;aria fresca al framework, sia dal punto di vista di Developer Experience che di User Experience. In questo articolo vedremo alcuni tra i principali cambiamenti. Angular Signals Signals è un sistema che permette ad Angular di gestire uno stato applicativo in maniera granulare.&#160; Questo sistema reattivo di gestione dello stato permette al change detector di ottimizzare la re-renderizzazione dei componenti coinvolti, permettendo allo sviluppatore di massimizzare le performances dei componenti che sviluppa. Un signal è un wrapper che rende &#8220;osservabile&#8221;&#160;un attributo di…</p>
<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/novita-angular-17/">Le novità di Angular 17</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1912" class="elementor elementor-1912">
									<main class="elementor-section elementor-top-section elementor-element elementor-element-cedf3fc ct-section-stretched elementor-section-full_width elementor-section-height-default elementor-section-height-default" data-id="cedf3fc" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-93e4dd4" data-id="93e4dd4" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-8c175f3 elementor-widget elementor-widget-text-editor" data-id="8c175f3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Angular si è rinnovato con <a href="https://angular.dev/">un sito completamente nuovo</a> ed un insieme di funzionalità che danno una ventata d&#8217;aria fresca al framework, sia dal punto di vista di Developer Experience che di User Experience.</p><p>In questo articolo vedremo alcuni tra i principali cambiamenti.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-de597b6 elementor-widget elementor-widget-heading" data-id="de597b6" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}</style><h2 class="elementor-heading-title elementor-size-default">Angular Signals</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-3c6b36a elementor-widget elementor-widget-text-editor" data-id="3c6b36a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Signals è un sistema che permette ad Angular di gestire uno stato applicativo in maniera granulare. <br />Questo sistema reattivo di gestione dello stato permette al change detector di ottimizzare la re-renderizzazione dei componenti coinvolti, permettendo allo sviluppatore di massimizzare le performances dei componenti che sviluppa.</p><p>Un signal è un wrapper che rende <a href="https://www.google.it/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwjVzuvRisGCAxUNhP0HHTz8BpMQFnoECBIQAw&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FObserver_pattern%23%3A~%3Atext%3DThe%2520observer%2520design%2520pattern%2520is%2C%252C%2520change%252C%2520test%2520and%2520reuse.&amp;usg=AOvVaw0CPdsmiZCtU8Ieqf7LxIQn&amp;opi=89978449">&#8220;osservabile&#8221;</a> un attributo di classe.</p><p><span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);">L&#8217;API di Signals rende il </span><a style="font-size: inherit; text-align: inherit; font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);" href="https://en.wikipedia.org/wiki/Reactive_programming">paradigma di programmazione reattiva</a><span style="font-size: inherit; text-align: inherit; color: var(--color); font-style: var(--fontStyle, inherit); font-weight: var(--fontWeight); letter-spacing: var(--letterSpacing); text-transform: var(--textTransform);"> più semplice da applicare grazie alla sua API minimale:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-1ea20a6 elementor-widget elementor-widget-code-highlight" data-id="1ea20a6" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-typescript line-numbers">
				<code readonly="true" class="language-typescript">
					<xmp>@Component({
  selector: 'my-app',
  standalone: true,
  template: `
    {{ fullName() }} <button (click)="setName('John')">Click</button>
  `,
})
export class App {
  firstName = signal('Jane');
  lastName = signal('Doe');
  fullName = computed(() => `${this.firstName()} ${this.lastName()}`);

  constructor() {
    effect(() => console.log('Name changed:', this.fullName()));
  }

  setName(newName: string) {
    this.firstName.set(newName);
  }
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-dfdb743 elementor-widget elementor-widget-text-editor" data-id="dfdb743" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per creare un Signal, è sufficiente dichiarare un attributo di classe assegnandogli un valore iniziale &#8220;wrappato&#8221; dalla funzione <code>signal</code> .</p><p>Per leggere il valore corrente di un Signal si invoca l&#8217;attributo di classe come funzione.</p><p>Per modificare il valore di un Signal bisogna passare il nuovo valore coma argomento del metodo <code>set</code> . Il Change Detector di Angular verrà così segnalato e provvederà a notificare tutti gli osservatori, nel nostro caso l&#8217;aggiornamento del template e dell&#8217;attributo <code>computed</code>.</p><p>Per &#8220;reagire&#8221; ai cambiamenti di valore di un Signal, si usa <code>effect</code>, una funzione che accetta una callback come argomento, e la invoca ad ogni cambiamento di stato.</p><p>Un Signal può essere di diversa natura: read-only, scrivibile, composto ecc. Grazie a dei metodi di utilità, un Signal è compatibile con gli Observables della libreria <code>rxjs</code> . Per approfondimenti lasciamo il <a href="https://angular.dev/guide/signals">link alla documentazione dedicata</a> e al nostro <a href="https://www.rdtech.it/contatti/">form di contatto.</a></p><p> </p>						</div>
				</div>
				<div class="elementor-element elementor-element-e6088c1 elementor-widget elementor-widget-spacer" data-id="e6088c1" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
.elementor-column .elementor-spacer-inner{height:var(--spacer-size)}.e-con{--container-widget-width:100%}.e-con-inner>.elementor-widget-spacer,.e-con>.elementor-widget-spacer{width:var(--container-widget-width,var(--spacer-size));--align-self:var(--container-widget-align-self,initial);--flex-shrink:0}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container,.e-con-inner>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer,.e-con>.elementor-widget-spacer>.elementor-widget-container,.e-con>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer{height:100%}.e-con-inner>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer>.elementor-spacer-inner,.e-con>.elementor-widget-spacer>.elementor-widget-container>.elementor-spacer>.elementor-spacer-inner{height:var(--container-widget-height,var(--spacer-size))}</style>		<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-94684ba elementor-widget elementor-widget-heading" data-id="94684ba" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Control flow (Developer Preview)</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-16d289b elementor-widget elementor-widget-text-editor" data-id="16d289b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>I template Angular supportano il &#8220;control flow&#8221; come alternativa alle direttive <code>ngIf</code>, <code>ngFor.</code></p><p>Un esempio:</p>						</div>
				</div>
				<section class="elementor-section elementor-inner-section elementor-element elementor-element-d6d16c6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="d6d16c6" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-d9da2e7" data-id="d9da2e7" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-5866475 elementor-widget elementor-widget-heading" data-id="5866475" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Control flow</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-1e76ecb elementor-widget elementor-widget-code-highlight" data-id="1e76ecb" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <h2>Todos</h2>
    <input #text />
    <button (click)="add(text.value)">Add</button>

    @for (todo of todos; track $index) {
    <p>
      <input type="checkbox" (change)="toggle($index)" />
      @if (todo.done) {
      <s>{{ todo.text }}</s>
      } @else {
      <span>{{ todo.text }}</span>
      }
    </p>
    } @empty {
    <p>No todos</p>
    }
  `,
})
export class TodosComponent {
  todos: Array<{done: boolean; text: string}> = [];

  add(text: string) {
    this.todos.push({text, done: false});
  }

  toggle(index: number) {
    this.todos[index].done = !this.todos[index].done;
  }
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
		</div>
				<div class="elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-a5f4db5" data-id="a5f4db5" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-d514fd2 elementor-widget elementor-widget-heading" data-id="d514fd2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Common Module</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-d078fbd elementor-widget elementor-widget-code-highlight" data-id="d078fbd" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule],
  template: `
    <h2>Todos</h2>
    <input #text />
    <button (click)="add(text.value)">Add</button>
    <div *ngIf="todos.length; else empty"></div>
    <p *ngFor="let todo of todos; let index = index">
      <input type="checkbox" (change)="toggle(index)" />
      <s *ngIf="todo.done; else pending">{{ todo.text }}</s>
      <ng-template #pending>
        <span>{{ todo.text }}</span>
      </ng-template>
    </p>
    <ng-template #empty>
      <p>No todos</p>
    </ng-template>
  `,
})
export class TodosComponent {
  todos: Array<{ done: boolean; text: string }> = [];

  add(text: string) {
    this.todos.push({ text, done: false });
  }

  toggle(index: number) {
    this.todos[index].done = !this.todos[index].done;
  }
}
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
		</div>
							</div>
		</section>
				<div class="elementor-element elementor-element-1ff106e elementor-widget elementor-widget-spacer" data-id="1ff106e" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-4715064 elementor-widget elementor-widget-heading" data-id="4715064" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Hydration SSR</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-ef107ea elementor-widget elementor-widget-text-editor" data-id="ef107ea" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Angular è cambiato anche nella gestione dello stato in Server Side Rendering: dopo che il client riceve l&#8217;FCP e il bundle js, non viene renderizzata nuovamente l&#8217;intera pagina ma soltanto alcuni nodi specifici. Questo permette di:</p><ul><li>Non avere artefatti visivi dopo il <a href="https://web.dev/articles/fcp?hl=it">first contentful paint.</a></li><li>Ottenere migliori prestazioni Web Core Vitals</li><li>User Experience più fluida</li></ul><div>In aggiunta a tutti i benefici che il Server Side Rendering offre già.</div>						</div>
				</div>
				<div class="elementor-element elementor-element-998a5c1 elementor-widget elementor-widget-spacer" data-id="998a5c1" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-a57436a elementor-widget elementor-widget-heading" data-id="a57436a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Deferrable views</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-f2c0f4b elementor-widget elementor-widget-text-editor" data-id="f2c0f4b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Analizziamo il caso in cui si utilizza Angular in Server Side Rendering: bisogna essere consapevoli di cosa si renderizza lato server, e cosa si renderizza lato client.</p><p>Questo comportamento si può gestire in diversi modi, ad esempio dichiarando una variabile di stato booleana inizializzata a <code>false</code> che diventa <code>true</code> dopo il ciclo di vita di <code>mount</code> (gestito quindi lato client). Questo stato usato come binding in un <code>ngIf</code> vincola una porzione di template ad essere gestita solo dal client e non dal server.</p><p>In Angular 17 nulla di ciò è più necessario. E&#8217; sufficiente usare il blocco <code>@defer</code> direttamente sul template e un attributo di utilità <code>isBrowser</code> nel Component. Angular gestirà il flusso di stato</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c15fa4b elementor-widget elementor-widget-code-highlight" data-id="c15fa4b" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-typescript line-numbers">
				<code readonly="true" class="language-typescript">
					<xmp>@Component(
    selector: "my-app",
    template: `
    @defer(when isBrowser) {
        <p>Hi, I am the client.</p>
    }
    <p>Hi, I am the server.</p>
    `
)
export class AppComponent {
  isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-5153409 elementor-widget elementor-widget-text-editor" data-id="5153409" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Un altro caso d&#8217;uso importante è quello in cui il browser deve renderizzare un componente che per qualche motivo impiega molto a comparire sulla pagina.</p><p>Una buona User Experience si basa anche su quanto velocemente una pagina risponde ad un input utente. Un caso standard di &#8220;loading spinner&#8221; si potrebbe descrivere in questo modo:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-45d66be elementor-widget elementor-widget-code-highlight" data-id="45d66be" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>@defer {
  <large-component />
} @loading (after 100ms; minimum 1s) {
  <img decoding="async" alt="loading..." src="loading.gif" />
}
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-eef612f elementor-widget elementor-widget-spacer" data-id="eef612f" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-9d07d06 elementor-widget elementor-widget-heading" data-id="9d07d06" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Migrazioni per la standalone API</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-eb79fdc elementor-widget elementor-widget-text-editor" data-id="eb79fdc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per supportare gli sviluppatori nella migrazione da <code>NgModules</code> a standalone api, il team di Angular ha creato un tool che permette di automatizzare il processo. Il requisito è di avere installato almeno la versione 15.2.0, la build deve essere pulita senza errori di compilazione ed il branch sul tuo vcs deve essere pulito.</p><p>Per lanciare l&#8217;automatismo basta scrivere questo comando su terminale dalla root del progetto:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d4c2f65 elementor-widget elementor-widget-code-highlight" data-id="d4c2f65" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>ng generate @angular/core:standalone</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-10485fe elementor-widget elementor-widget-text-editor" data-id="10485fe" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Per i nuovi progetti basta usare il flag <code>--standalone</code> dopo <code>ng new</code>,</p>						</div>
				</div>
				<div class="elementor-element elementor-element-71fa5fc elementor-widget elementor-widget-spacer" data-id="71fa5fc" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-88c3493 elementor-widget elementor-widget-heading" data-id="88c3493" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Esbuild e Vite (Developer Preview)</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-a957d06 elementor-widget elementor-widget-text-editor" data-id="a957d06" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><code>ng serve</code> ora supporta<code>esbuild</code> per generare le build di produzione e di sviluppo e di produzione, e <code>vite</code> per il server di sviluppo. Questo significa che le performances di build in fase di sviluppo saranno sensibilmente più veloci. E&#8217; una funzionalità opt-in essendo ancora in &#8220;developer preview&#8221;, per attivarla bisogna modificare <code>angular.json</code> come segue:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-0c62cb2 elementor-widget elementor-widget-code-highlight" data-id="0c62cb2" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-json line-numbers">
				<code readonly="true" class="language-json">
					<xmp>...
"architect": {
  "build": {                     /* Add the esbuild suffix  */
    "builder": "@angular-devkit/build-angular:browser-esbuild",
...</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-b078757 elementor-widget elementor-widget-spacer" data-id="b078757" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-f5eb5e6 elementor-widget elementor-widget-heading" data-id="f5eb5e6" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Jest come test runner (Developer Preview)<br></h2>		</div>
				</div>
				<div class="elementor-element elementor-element-d0df76a elementor-widget elementor-widget-text-editor" data-id="d0df76a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><code>Jest</code> è uno dei framework di testing più diffusi e amati nell&#8217;ecosistema JavaScript. Da questa versione di angular in poi è possibile usarlo:</p><p><code>npm install --save-dev jest</code></p>						</div>
				</div>
				<div class="elementor-element elementor-element-a08e12d elementor-widget elementor-widget-code-highlight" data-id="a08e12d" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-json line-numbers">
				<code readonly="true" class="language-json">
					<xmp>{
  "projects": {
    "my-app": {
      "architect": {
        "test": {
          "builder": "@angular-devkit/build-angular:jest",
          "options": {
            "tsConfig": "tsconfig.spec.json",
            "polyfills": ["zone.js", "zone.js/testing"]
          }
        }
      }
    }
  }
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-e9fe08f elementor-widget elementor-widget-spacer" data-id="e9fe08f" data-element_type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
					<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-dba34a1 elementor-widget elementor-widget-heading" data-id="dba34a1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Conclusioni</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-548f6b1 elementor-widget elementor-widget-text-editor" data-id="548f6b1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Con queste novità il team di Google dimostra non solo di ascoltare le richieste degli sviluppatori (vedi Jest, Esbuild + Vite) e un&#8217;attenzione particolare alla Developer Experience (vedi Control Flow, @defer), ma dimostra soprattutto che Angular è un Framework che tiene stretto il proprio posto nel mercato dell&#8217;industria Web e lo terrà ancora per lungo tempo.</p><p>Personalmente ho molto apprezzato l&#8217;introduzione dei <code>Signal</code> ed il lavoro fatto per semplificare e migliorare il <code>Server Side Rendering</code>. </p><p>Il nuovo sito di Angular <a href="https://github.com/angular/angular/tree/main/adev">sarà completamente open-source e disponibile su GitHub</a>, non vediamo l&#8217;ora di poterlo studiare e condividere le nostre scoperte con voi.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9179035 elementor-widget elementor-widget-heading" data-id="9179035" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Vuoi approfondire uno di questi argomenti?</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-d1890af elementor-widget elementor-widget-text-editor" data-id="d1890af" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Contattaci tramite <a href="https://angular.dev/">il form su questo sito web</a> o <a href="https://tr.ee/aTQIIRlpWV">tramite i nostri canali social</a>!</p>						</div>
				</div>
				<div class="elementor-element elementor-element-ecd13b7 elementor-widget elementor-widget-text-editor" data-id="ecd13b7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
													</div>
				</div>
				<div class="elementor-element elementor-element-8467b12 elementor-widget elementor-widget-text-editor" data-id="8467b12" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
													</div>
				</div>
					</div>
		</div>
							</div>
		</main>
							</div>
		<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/novita-angular-17/">Le novità di Angular 17</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.rdtech.it/novita-angular-17/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Alla scoperta di Bun: l’ecosistema JavaScript veloce, moderno e innovativo</title>
		<link>https://www.rdtech.it/scopri-bun/</link>
					<comments>https://www.rdtech.it/scopri-bun/#respond</comments>
		
		<dc:creator><![CDATA[Matteo Veraldi]]></dc:creator>
		<pubDate>Wed, 20 Sep 2023 13:29:53 +0000</pubDate>
				<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[Novità]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[bun]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[informatica]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[novità]]></category>
		<guid isPermaLink="false">https://www.rdtech.it/?p=1762</guid>

					<description><![CDATA[<p>Introduzione In questi ultimi 14 anni, gli strumenti richiesti per sviluppare in NodeJS sono diventati sempre più lenti e complessi (vedi: webpack, babel, lerna, ecc…).&#160; Bun è un toolkit all-in-one gratuito e open source che mira a risolvere questo problema: permette di gestire, eseguire, costruire, testare e debuggare singoli file o complesse applicazioni full-stack scritte in JavaScript e TypeScript in maniera semplice. E’ stato sviluppato da “Oven”, un&#8217;azienda di sviluppo software con sede a San Francisco fondata con l’unico obiettivo di trasformare lo sviluppo in JavaScript rendendolo veloce e performante. Dalla versione 1.0 diventa ufficialmente adatto ad essere utilizzato in…</p>
<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/scopri-bun/">Alla scoperta di Bun: l’ecosistema JavaScript veloce, moderno e innovativo</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1762" class="elementor elementor-1762">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-5a62b9d elementor-section-full_width elementor-section-height-default elementor-section-height-default" data-id="5a62b9d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-no">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-459185b" data-id="459185b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-57100dc elementor-widget elementor-widget-heading" data-id="57100dc" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Introduzione</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-44cbc80 elementor-widget elementor-widget-text-editor" data-id="44cbc80" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">In questi ultimi 14 anni, gli strumenti richiesti per sviluppare in <a href="https://www.rdtech.it/cambiare-versione-di-nodejs/">NodeJS</a> sono diventati sempre più lenti e complessi (vedi: webpack, babel, lerna, ecc…). </span></p><p><span style="font-weight: 400;">Bun è un toolkit all-in-one gratuito e open source che mira a risolvere questo problema: permette di gestire, eseguire, costruire, testare e debuggare singoli file o complesse applicazioni full-stack scritte in JavaScript e TypeScript in maniera semplice.</span></p><p><span style="font-weight: 400;">E’ stato sviluppato da “Oven”, un&#8217;azienda di sviluppo software con sede a San Francisco fondata con l’unico obiettivo di trasformare lo sviluppo in JavaScript rendendolo veloce e performante.</span></p><p><span style="font-weight: 400;">Dalla versione 1.0 </span><span style="font-weight: 400;">diventa ufficialmente adatto ad essere utilizzato in produzione</span><span style="font-weight: 400;">.</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-d5e6281 elementor-widget elementor-widget-heading" data-id="d5e6281" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Ne avevamo davvero bisogno?
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-6ad2e5c elementor-widget elementor-widget-text-editor" data-id="6ad2e5c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Dalla prima versione di Node JS, diversi strumenti sono stati sviluppati ed interconnessi tra loro per dare luce ai frameworks e alle librerie popolari che utilizziamo ogni giorno.</span></p><p><span style="font-weight: 400;">Ogni strumento aggiunto porta con sé un contributo di complessità</span><span style="font-weight: 400;"> in termini di configurazioni e performances, e viene accumulato con tutti gli altri strumenti già presenti e configurati all’interno del progetto.</span></p><p><span style="font-weight: 400;">Ad esempio, per sviluppare una “semplice” libreria di componenti <a href="https://react.dev/">React</a> in TypeScript con NodeJS devi ALMENO introdurre e configurare:</span></p><ul><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Il package.json</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un gestore di pacchetti</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Una runtime JavaScript</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un traspilatore per convertire TypeScript a JavaScript moderno </span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un traspilatore per convertire JavaScript Moderno a CommonJS</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un test runner e una libreria per far girare i test automatici</span></li><li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Un bundler per creare l’entry point delle applicazioni di esempio</span></li></ul><p><span style="font-weight: 400;">Per sviluppare una semplice libreria di componenti React in TypeScript con Bun devi solo configurare il package.json.</span></p><p><span style="font-weight: 400;">Non potrebbe essere più semplice di così!</span></p><p><span style="font-weight: 400;">Maggiore è la complessità della libreria o dell’applicazione, maggiore è la probabilità che verranno utilizzati strumenti aggiuntivi o che ci sia la necessità di ritoccare quelli già presenti.</span></p><p><span style="font-weight: 400;">L’obiettivo di Bun in questi termini è semplice: </span><span style="font-weight: 400;">ridurre al minimo la complessità e massimizzare la performances dei progetti JavaScript moderni</span><span style="font-weight: 400;">. Le librerie e i frameworks che funzionano con Node JS dovrebbero continuare a funzionare con Bun come al solito, senza che lo sviluppatore debba imparare o configurare nulla di nuovo.</span></p><p><span style="font-weight: 400;">Nonostante non servano tutti gli strumenti esterni utilizzati nei progetti NodeJS, Bun non è un collo di bottiglia per lo sviluppo! è stato sviluppato in maniera da essere </span><span style="font-weight: 400;">altamente personalizzabile</span><span style="font-weight: 400;"> per soddisfare la maggior parte dei requisiti progettuali.</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-4314944 elementor-widget elementor-widget-heading" data-id="4314944" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Velocità – Bun vs NodeJS</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-0bea7e3 elementor-widget elementor-widget-text-editor" data-id="0bea7e3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Ecco qualche dato di comparazione tra Bun e NodeJS:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-5354444 elementor-widget elementor-widget-heading" data-id="5354444" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Come package manager</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-5eee8b6 elementor-widget elementor-widget-text-editor" data-id="5eee8b6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">usare “bun” al posto di “npm” per l’installazione dei pacchetti aumenta le performances di </span><b>29 volte.</b></p>						</div>
				</div>
				<div class="elementor-element elementor-element-aef5e9e elementor-widget elementor-widget-image" data-id="aef5e9e" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.12.0 - 29-03-2023 */
.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=".svg"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}</style>												<img fetchpriority="high" decoding="async" width="1024" height="506" src="https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-1024x506.png" class="attachment-large size-large wp-image-1769" alt="" srcset="https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-1024x506.png 1024w, https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-300x148.png 300w, https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-768x380.png 768w, https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager-1536x759.png 1536w, https://www.rdtech.it/wp-content/uploads/2023/09/packagemanager.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" />															</div>
				</div>
				<div class="elementor-element elementor-element-ea21a32 elementor-widget elementor-widget-heading" data-id="ea21a32" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Come bundler</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-783a94f elementor-widget elementor-widget-text-editor" data-id="783a94f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">usare “bun” al posto di webpack per il bundling del codice aumenta la velocità di costruzione degli artefatti di </span><b>224 volte</b><span style="font-weight: 400;">.</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-1492b38 elementor-widget elementor-widget-image" data-id="1492b38" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="1024" height="408" src="https://www.rdtech.it/wp-content/uploads/2023/09/bundler-1024x408.png" class="attachment-large size-large wp-image-1768" alt="" srcset="https://www.rdtech.it/wp-content/uploads/2023/09/bundler-1024x408.png 1024w, https://www.rdtech.it/wp-content/uploads/2023/09/bundler-300x120.png 300w, https://www.rdtech.it/wp-content/uploads/2023/09/bundler-768x306.png 768w, https://www.rdtech.it/wp-content/uploads/2023/09/bundler-1536x612.png 1536w, https://www.rdtech.it/wp-content/uploads/2023/09/bundler.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" />															</div>
				</div>
				<div class="elementor-element elementor-element-31b42d7 elementor-widget elementor-widget-heading" data-id="31b42d7" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Come transpiler</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-fe66386 elementor-widget elementor-widget-text-editor" data-id="fe66386" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">La conversione di TypeScript in JavaScript con bun al posto di tsc aumenta la velocità di di </span><b>44 volte</b><span style="font-weight: 400;">:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-7e2dee2 elementor-widget elementor-widget-image" data-id="7e2dee2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="1024" height="442" src="https://www.rdtech.it/wp-content/uploads/2023/09/transpiler-1024x442.png" class="attachment-large size-large wp-image-1770" alt="" srcset="https://www.rdtech.it/wp-content/uploads/2023/09/transpiler-1024x442.png 1024w, https://www.rdtech.it/wp-content/uploads/2023/09/transpiler-300x130.png 300w, https://www.rdtech.it/wp-content/uploads/2023/09/transpiler-768x332.png 768w, https://www.rdtech.it/wp-content/uploads/2023/09/transpiler.png 1394w" sizes="(max-width: 1024px) 100vw, 1024px" />															</div>
				</div>
				<div class="elementor-element elementor-element-23c2b45 elementor-widget elementor-widget-heading" data-id="23c2b45" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Come runtime</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-8ae9842 elementor-widget elementor-widget-text-editor" data-id="8ae9842" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Un WebSocket in Bun è più veloce rispetto ad un Web Socket in Node JS di </span><b>6 volte</b><span style="font-weight: 400;">:</span></p>						</div>
				</div>
				<div class="elementor-element elementor-element-5b8bacf elementor-widget elementor-widget-image" data-id="5b8bacf" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="475" height="386" src="https://www.rdtech.it/wp-content/uploads/2023/09/websocker.png" class="attachment-large size-large wp-image-1771" alt="" srcset="https://www.rdtech.it/wp-content/uploads/2023/09/websocker.png 475w, https://www.rdtech.it/wp-content/uploads/2023/09/websocker-300x244.png 300w" sizes="auto, (max-width: 475px) 100vw, 475px" />															</div>
				</div>
				<div class="elementor-element elementor-element-57c2b75 elementor-widget elementor-widget-heading" data-id="57c2b75" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Conclusioni</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-4713ded elementor-widget elementor-widget-text-editor" data-id="4713ded" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span style="font-weight: 400;">Al momento della scrittura di questo articolo Bun è stato dichiarato stabile e production-ready da pochi giorni; La community è molto attiva e non ci sono progetti molto grossi che lo utilizzano.</span></p><p><span style="font-weight: 400;">E’ una novità imperdibile per tutti gli sviluppatori Backend o Frontend che usano Node JS, e vale la pena attendere ancora un po di tempo prima di cominciare a introdurlo nei prossimi progetti di ricerca e sviluppo.</span></p><p><span style="font-weight: 400;">Se vuoi saperne di più, consulta il <a href="https://bun.sh/">sito ufficiale di Bun</a> o <a href="https://www.rdtech.it/contatti/">contattaci tramite il form!</a></span></p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>L'articolo <a rel="nofollow" href="https://www.rdtech.it/scopri-bun/">Alla scoperta di Bun: l’ecosistema JavaScript veloce, moderno e innovativo</a> proviene da <a rel="nofollow" href="https://www.rdtech.it">RD Tech</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.rdtech.it/scopri-bun/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
