<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vitor Sanches</title>
    <description>The latest articles on DEV Community by Vitor Sanches (@vitorsanches).</description>
    <link>https://dev.to/vitorsanches</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F35121%2F025bb079-4e3d-4ad8-bd9f-2b7925516097.png</url>
      <title>DEV Community: Vitor Sanches</title>
      <link>https://dev.to/vitorsanches</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vitorsanches"/>
    <language>en</language>
    <item>
      <title>Scripts de terceiros em segundo-plano com PartyTown</title>
      <dc:creator>Vitor Sanches</dc:creator>
      <pubDate>Sat, 08 Mar 2025 18:20:42 +0000</pubDate>
      <link>https://dev.to/vitorsanches/scripts-de-terceiros-em-segundo-plano-com-partytown-10k</link>
      <guid>https://dev.to/vitorsanches/scripts-de-terceiros-em-segundo-plano-com-partytown-10k</guid>
      <description>&lt;p&gt;Um grande problema quando estamos trabalhando com aplicações web é o impacto no desempenho que scripts de terceiros podem causar no nosso site.  &lt;/p&gt;

&lt;p&gt;Quando o navegador executa scripts síncronos, ele por padrão o faz na thread principal, a mesma que fica responsável pela renderização do conteúdo da página.&lt;/p&gt;

&lt;p&gt;Compartilhar a thread responsável pela renderização da página com processos síncronos longos pode causar congelamentos e lentidões inesperadas no fluxo de renderização da nossa aplicação.&lt;/p&gt;

&lt;p&gt;Exemplo: Abra o console do navegador e digite&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execute (&lt;code&gt;Enter&lt;/code&gt;) e tente realizar alguma interação com a página. Toda a página e suas interações estarão congeladas porque a thread que processa os eventos da DOM está ocupada executando o seu loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Delegando para web workers
&lt;/h2&gt;

&lt;p&gt;Esses congelamentos podem ser contornados se delegarmos a execução desses scripts para web workers, que serão executados em threads separadas, deixando a thread principal livre para processar eventos e renderizações.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// workerService.js&lt;/span&gt;
&lt;span class="nx"&gt;onmessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;processedData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// index.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;worker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;workerService.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No entanto, trabalhar com web workers pode ser trabalhoso na maior parte dos casos, principalmente pelo fato de workers não possuírem acesso à DOM. Para acessar a DOM e, por exemplo, processar um input do usuário, faríamos algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.js&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#field&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;change&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;worker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas fazer isso em scripts de terceiros passa a ser bem mais penoso, já que teríamos que identificar esses acessos à DOM no código terceiro e executá-los na thread principal, delegando para os workers somente o que ele tem a capacidade de processar.&lt;/p&gt;

&lt;p&gt;É nesse contexto que surge o PartyTown 🎉  &lt;/p&gt;

&lt;h2&gt;
  
  
  PartyTown
&lt;/h2&gt;

&lt;p&gt;O PartyTown é uma biblioteca que possibilita executar os scripts de terceiros em worker threads, lidando com quaisquer acessos à DOM automaticamente.&lt;/p&gt;

&lt;p&gt;Basta adicionar "text/partytown” no atributo “type” do script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/partytown"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para configurarmos o gtag (Google Analytics e Tag Manager), por exemplo, adicionamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;script&lt;/span&gt;  
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/partytown"&lt;/span&gt;  
    &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.googletagmanager.com/gtag/js?id=SEU-ID-AQUI"&lt;/span&gt;  
&lt;span class="nt"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;  

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/partytown"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;  
    window.dataLayer = window.dataLayer || [];  
    window.gtag = function gtag() { window.dataLayer.push(arguments); };  
    window.gtag('js', new Date());  
    window.gtag('config', 'SEU-ID-AQUI');  
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como o gtag utiliza o &lt;code&gt;window.dataLayer&lt;/code&gt; para enviar eventos, precisamos dizer ao partytown que esses eventos precisam ser reencaminhados, já que ele será executado em um worker. Para isso, adicionamos dentro da tag &lt;code&gt;head&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​&lt;/span&gt;&lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    partytown = {
      forward: ['dataLayer.push']
    };
  &lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;​/&lt;/span&gt;&lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode verificar as &lt;a href="https://partytown.builder.io/common-services" rel="noopener noreferrer"&gt;configurações de forwarding para os serviços mais comuns na documentação do partytown&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simples assim. Agora temos nosso gtag sendo executado em segundo plano na nossa página, evitando que cause lentidões e problemas de desempenho.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Referências e links úteis:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://partytown.builder.io/how-does-partytown-work" rel="noopener noreferrer"&gt;Como o PartyTown Funciona?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=eP6Mti85HeQ" rel="noopener noreferrer"&gt;Vídeo: How Partytown allows you to run virtually any JS in the worker thread, in depth&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web</category>
      <category>performance</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Como atingir nota 100 em performance no Lighthouse utilizando o Astro.build?</title>
      <dc:creator>Vitor Sanches</dc:creator>
      <pubDate>Fri, 06 Sep 2024 17:58:22 +0000</pubDate>
      <link>https://dev.to/vitorsanches/como-atingir-nota-100-em-performance-no-lighthouse-utilizando-o-astrobuild-3een</link>
      <guid>https://dev.to/vitorsanches/como-atingir-nota-100-em-performance-no-lighthouse-utilizando-o-astrobuild-3een</guid>
      <description>&lt;h2&gt;
  
  
  01. O que é o Astro?
&lt;/h2&gt;

&lt;p&gt;Astro é um framework com foco em criação de websites orientados a conteúdo e web apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  02. Por que o Astro?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MPA
&lt;/h3&gt;

&lt;p&gt;O diferencial do Astro é que, ao invés de implementar o conceito de SPA (Single-Page Application) como outros frameworks, ele utiliza o conceito de Multi-Page Application. Por conta disso, ele tem um tempo de carregamento inicial reduzido por padrão, já que apenas a página acessada será carregada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agnóstico a plataformas
&lt;/h3&gt;

&lt;p&gt;Outra coisa muito interessante é que o astro é platform agnostic. Isso significa que ele possui várias integrações com vercel, netlify, cloudflare, entre outras, de forma a extrair o melhor de cada uma delas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agnóstico a bibliotecas de componentes
&lt;/h3&gt;

&lt;p&gt;Astro foi criado para também ser agnóstico a bibliotecas de componentes, então ele aceita componentes react, preact, vue, entre outros. Apesar disso, ele também tem seu próprio modelo de escrita de componentes, que é bem simples e costuma ser suficiente na maior parte dos casos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrações
&lt;/h3&gt;

&lt;p&gt;Isso, na minha opinião, é o que faz o astro ser extremamente avançado em termos de experiência do desenvolvedor (DX). A facilidade para adicionar funcionalidades e comportamentos no Astro é fora do comum. Você pode adicionar suporte ao tailwind, mdx, partytown, sitemap, entre outros. Basta executar um comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;astro add &amp;lt;nome da integração&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recomendo olhar a &lt;a href="//astro.build/integrations"&gt;página de Integrações do astro&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  03. Server-side Rendering
&lt;/h2&gt;

&lt;p&gt;O Astro utiliza server-side rendering por padrão. Ele se baseia no conceito de “interactive islands”, ou ilhas interativas. Isso significa que ele só irá enviar para o cliente o javascript que for realmente necessário para promover alguma interatividade. Isso faz com que o bundle da aplicação seja extremamente reduzido, tornando o site mais performático, e te dando alguns pontinhos no score do Lighthouse.&lt;/p&gt;

&lt;h2&gt;
  
  
  04. Cache de CDN
&lt;/h2&gt;

&lt;p&gt;Algumas integrações do astro possuem suporte para cache de CDN. Nesse caso, eu utilizei a vercel, mas o netlify também suporta cache, por exemplo.&lt;/p&gt;

&lt;p&gt;O cache de CDN possibilita que tenhamos uma cópia estática do site em um servidor fisicamente próximo ao usuário, reduzindo consideravelmente o tempo de requisição. Também podemos adicionar o tempo que esse cache permanecerá válido em segundos. Após esse tempo, a requisição será feita no servidor principal, e a versão atualizada da página será cacheada em CDN novamente.&lt;/p&gt;

&lt;p&gt;Para isso, basta adicionar a seguinte linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Astro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;CDN&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Control&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="kr"&gt;public&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;43200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;must&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;revalidate&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Onde max-age é o tempo em segundos que o cache continuará válido. Nesse caso, 12 horas.&lt;/p&gt;

&lt;p&gt;Para mais informações, recomendo ver &lt;a href="//docs.astro.build/pt-br/guides/server-side-rendering/"&gt;a página de Server-side Rendering da documentação do astro&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  05. Otimização de Imagens
&lt;/h2&gt;

&lt;p&gt;Muitas vezes você está buscando imagens de alguma integração externa em que você não tem controle se elas estão otimizadas, o que pode atrapalhar muito o desempenho do seu site ou aplicação.&lt;br&gt;
Para isso, o astro possui um componente de imagem que pode ser importado de &lt;code&gt;astro:assets&lt;/code&gt;, possibilitando a configuração de tamanhos diferentes de imagens para telas diferentes, além de automaticamente converter o formato da imagem para webp.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt;
  &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;
  &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;thumbnail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;widths&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;370&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;thumbnail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`
    (max-width: 370px): 300px,
    (max-width: 440px): 370px,
    &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;thumbnail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px
  `&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;thumbnail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;thumbnail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  06. Edge Middleware
&lt;/h2&gt;

&lt;p&gt;Este ponto é um pouco mais específico para as integrações com a Vercel,  Netlify e Cloudflare. Essas plataformas possuem o recurso de executar funções serverless na borda. Isso significa que o processamento que realiza a renderização do lado do servidor será executado, fisicamente falando, o mais próximo possível do usuário. Isso faz com que o tempo de resposta do servidor seja reduzido, já que a latência da transferência de dados é reduzida.&lt;br&gt;
Vale conferir a documentação para cada integração separadamente, mas o padrão é adicionar na configuração de adapter o atributo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;edgeMiddleware&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  07. Algumas considerações finais
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;É claro que, quanto mais interativo for seu site, mais javascript será enviado ao cliente, e menos performático ele será. É uma questão de entender o que é melhor para cada caso.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lembre-se sempre rodar o Lighthouse em uma guia anônima, pois, caso você tenha alguma extensão instalada no navegador, ela pode prejudicar muito o resultado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O Lighthouse é apenas um guia para encontrar pontos de melhoria. Não ter uma nota 100 não significa nada, assim como ter uma nota 100 também não significa muita coisa. No fim, o real objetivo é promover uma boa experiência do usuário.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>frontend</category>
      <category>performance</category>
      <category>lighthouse</category>
      <category>astro</category>
    </item>
  </channel>
</rss>
