Em 2021, a equipe do Chrome Aurora introduziu o Script componente para melhorar a ao carregar o desempenho de scripts de terceiros no Next.js. Desde o lan�amento, expandiu suas capacidades para facilitar o carregamento de recursos de terceiros e mais rapidamente para os desenvolvedores.
Esta postagem do blog fornece uma vis�o geral dos recursos mais recentes que lan�amos, especialmente a @next/third-parties , bem como um esbo�o de iniciativas futuras em nosso roteiro.
Implica��es no desempenho de scripts de terceiros
41% de todas as solicita��es de terceiros nos sites Next.js s�o scripts. Ao contr�rio de outros conte�dos tipos, o download e a execu��o dos scripts pode levar um tempo consider�vel, o que pode bloquear a renderiza��o e atrasar a interatividade do usu�rio. Dados do Chrome O Relat�rio de experi�ncia do usu�rio (CrUX, na sigla em ingl�s) mostra que os sites do Next.js que carregam mais sites de terceiros os scripts t�m menor Intera��o com a Pr�xima Paint (INP) e Maior exibi��o de conte�do (LCP).
A correlação observada neste gráfico não implica causalidade. No entanto, as campanhas locais os experimentos fornecem evidências adicionais de que scripts de terceiros afetar o desempenho da página. Por exemplo, a tabela abaixo compara vários laboratórios quando um contêiner do Gerenciador de tags do Google, composto por 18 itens selecionados aleatoriamente, é adicionada à Taxonomy, um exemplo conhecido do Next.js. app.
Documentação do WebPageTest fornece detalhes sobre como esses tempos são medidos. Olhando rapidamente, é que todas essas métricas do laboratório são afetadas pelo contêiner do GTM. Para exemplo, Total Blocking Time (TBT), um laboratório útil que se aproxime do INP, teve um aumento de quase 20 vezes.
Componente de script
Quando enviamos o componente <Script>
no Next.js, introduzimos
por uma API fácil de usar que se assemelha ao <script>
tradicional.
. Com ele, os desenvolvedores podem colocalizar um script de terceiros em qualquer
no aplicativo, e o Next.js fará o sequenciamento
script após o carregamento dos recursos críticos.
<!-- By default, script will load after page becomes interactive -->
<Script src="https://example.com/sample.js" />
<!-- Script is injected server-side and fetched before any page hydration occurs -->
<Script strategy=”beforeInteractive” src="https://example.com/sample.js" />
<!-- Script is fetched later during browser idle time -->
<Script strategy=”lazyOnload” src="https://example.com/sample.js" />
Dezenas de milhares de aplicativos Next.js, incluindo sites populares como
Patreon, Target e
No��o: use o componente <Script>
. Apesar da
da efic�cia, alguns desenvolvedores levantaram preocupa��es sobre os seguintes
coisas:
- Onde colocar o componente
<Script>
em um app Next.js enquanto obedece as instru��es de instala��o variadas de provedores terceirizados (experi�ncia do desenvolvedor). - Qual estrat�gia de carregamento � a ideal para casos diferentes scripts de terceiros (experi�ncia do usu�rio).
Para lidar com essas duas preocupa��es, lan�amos o @next/third-parties
, um
biblioteca especializada que oferece um conjunto de componentes e utilit�rios otimizados
personalizado para terceiros conhecidos.
Experi�ncia do desenvolvedor: como facilitar o gerenciamento de bibliotecas de terceiros
Muitos scripts de terceiros s�o usados em uma porcentagem significativa dos sites Next.js, com
o Gerenciador de tags do Google � o mais usado,
66% dos sites, respectivamente.
O @next/third-parties
se baseia no <Script>
.
introduzindo wrappers de n�vel superior projetados para simplificar o uso para
esses casos de uso comuns.
import { GoogleAnalytics } from "@next/third-parties/google";
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
<GoogleTagManager gtmId="GTM-XYZ" />
</html>
);
}
Google Analytics, outro script de terceiros amplamente utilizado (52% dos sites do Next.js) tamb�m tem um componente dedicado.
import { GoogleAnalytics } from "@next/third-parties/google";
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
<GoogleAnalytics gaId="G-XYZ" />
</html>
);
}
O @next/third-parties
simplifica o processo de carregamento de scripts usados com frequ�ncia.
mas tamb�m amplia nossa capacidade de desenvolver utilit�rios para
categorias, como incorpora��es. Por exemplo, as incorpora��es do Google Maps e do YouTube s�o
usado em
8%
e
4%
de sites Next.js, e tamb�m enviamos componentes para torn�-los
mais f�ceis de carregar.
import { GoogleMapsEmbed } from "@next/third-parties/google";
import { YouTubeEmbed } from "@next/third-parties/google";
export default function Page() {
return (
<>
<GoogleMapsEmbed
apiKey="XYZ"
height={200}
width="100%"
mode="place"
q="Brooklyn+Bridge,New+York,NY"
/>
<YouTubeEmbed videoid="ogfYd705cRs" height={400} params="controls=0" />
</>
);
}
Experi�ncia do usu�rio: carregamento mais r�pido de bibliotecas de terceiros
Em um mundo perfeito, toda biblioteca terceirizada amplamente adotada seria otimizados, tornando desnecess�rias todas as abstra��es que melhoram o desempenho. No entanto, at� que isso se torne realidade, podemos tentar melhorar integrada com frameworks conhecidos, como Next.js. Podemos testar diferentes t�cnicas de carregamento, garantir que os scripts sejam sequenciados da maneira correta e, por fim, compartilhar nossos feedbacks com terceiros provedores para incentivar mudan�as upstream.
Veja as incorpora��es do YouTube, por exemplo. Em que algumas implementa��es alternativas
desempenho muito melhor
do que a incorpora��o nativa. No momento, a vers�o <YouTubeEmbed>
o componente exportado por @next/third-parties
usa
lite-youtube-embed, que,
quando demonstrado em uma demonstra��o com o Next.js, carrega consideravelmente
mais r�pido.
Da mesma forma, para o Google Maps, inclu�mos loading="lazy"
como um atributo padr�o para
o incorporado para garantir que o mapa s� carregue quando estiver a uma determinada dist�ncia do
na janela de visualiza��o. Isso pode parecer um atributo �bvio a ser inclu�do, especialmente
j� que o SDK do Google Maps
documenta��o
inclu�-lo no snippet de c�digo de exemplo, mas apenas
45% dos sites da Next.js que incorporam o Google Maps usam o loading="lazy"
.
Como executar scripts de terceiros em um worker da Web
Uma t�cnica avan�ada que estamos explorando no @next/third-parties
� torn�-la
descarregar os scripts de terceiros em um web worker. Popularizado por
bibliotecas, como Partytown, isso pode reduzir
o impacto de scripts de terceiros no desempenho da p�gina de forma significativa,
realocando-os totalmente da linha de execu��o principal.
O GIF animado a seguir mostra as varia��es nas tarefas longas e na linha de execu��o principal
tempo de bloqueio ao aplicar diferentes estrat�gias do <Script>
a um cont�iner do GTM
em um site do Next.js. Enquanto voc� alterna apenas entre as op��es de estrat�gia,
atrasa o tempo de execu��o desses scripts, realocando-os para um web worker
elimina completamente o tempo que eles t�m na linha de execu��o principal.
Neste exemplo espec�fico, mover a execu��o do cont�iner do GTM e seu scripts de tags associados a um worker da Web reduziu o TBT em 92%.
� importante ressaltar que, se n�o for administrada com cuidado, essa t�cnica pode
quebrar muitos scripts de terceiros, o que dificulta a depura��o. Nos pr�ximos
meses, vamos validar se h� componentes de terceiros oferecidos pela
@next/third-parties
funcionem corretamente quando executados em um web worker. Nesse caso, vamos
trabalham para oferecer aos desenvolvedores uma maneira f�cil e opcional de usar
t�cnica.
Pr�ximas etapas
No processo de desenvolvimento desse pacote, ficou evidente que havia
precisam centralizar recomenda��es de carregamento de terceiros para que outras estruturas
tamb�m podem se beneficiar
das mesmas t�cnicas usadas. Isso nos levou a
criar servi�os de
Capital: uma biblioteca.
que usa JSON para descrever t�cnicas de carregamento de terceiros, que atualmente
serve como base para @next/third-parties
.
Nas pr�ximas etapas, continuaremos a nos concentrar na melhoria dos componentes fornecidos para Next.js, al�m de expandir nossos esfor�os para incluir utilit�rios semelhantes em outros estruturas e plataformas de CMS conhecidas. No momento, estamos em colabora��o com a Nuxt mantenedores e planejam lan�ar utilit�rios de terceiros semelhantes ao ecossistema em breve.
Se um dos terceiros que voc� usa no seu app Next.js tiver suporte da
@next/third-parties
,
instalar o pacote
e tente! Gostar�amos de receber seu feedback sobre
GitHub.