Índice
- Introdução
- Por que escolhemos Astro
- Estratégia de entrega CSS: Inline vs Arquivo externo
- Ao usar CSS inline
- Ao usar CSS externo
- Solução: Arquivo externo + cache immutable
- Otimização de fontes: Verificar a entrega real
- Comparar entrega externa e local
- Estado atual do repositório
- Otimização de imagens: Cloudflare Images + srcset + sizes
- Transformações do Cloudflare Images
- Configuração de srcset e sizes
- Precisão do sizes
- Melhoria do LCP: preload
- Prevenção de CLS (Layout Shift)
- Controle de carga de anúncios e analytics diferido
- AdSense
- GA4
- Estratégia de cache
- Checklist de otimização de performance
- Conclusão
- Série que inclui este artigo

Introdução
O site oficial da Acecore é construído com Astro 7.1.3 + UnoCSS + Cloudflare Pages. Este artigo reúne configurações de otimização verificadas no repositório em 29 de julho de 2026.
Os resultados do PageSpeed Insights variam conforme data, dispositivo e rede. Por isso, não publicamos uma pontuação fixa: compare as mudanças nas mesmas condições usando Core Web Vitals e tamanho transferido.
Por que escolhemos Astro
O Astro oferece geração de sites estáticos (SSG) e permite adicionar JavaScript no cliente apenas onde necessário. O site atual também entrega scripts de ClientRouter, busca, anúncios e analytics; portanto, não assuma uma página sem JavaScript: meça o volume entregue e as métricas de renderização.
O site usa UnoCSS com presetWind3(). Ele gera CSS com base nos utilitários detectados no build, o que pode reduzir o volume entregue, mas não garante um tamanho mínimo. Inspecione o CSS gerado e as classes realmente usadas.
Estratégia de entrega CSS: Inline vs Arquivo externo
A entrega de CSS afeta o tamanho do HTML, solicitações adicionais e o cache do navegador.
Ao usar CSS inline
Configurando build.inlineStylesheets: 'always' no Astro, todo o CSS é embutido no HTML. Isso remove a solicitação de CSS externo e pode melhorar o FCP (First Contentful Paint), conforme a página.
As condições favoráveis dependem do tamanho do CSS e da página; um limite fixo não é suficiente.
Ao usar CSS externo
Arquivos externos permitem reutilizar CSS compartilhado e com hash pelo cache do navegador.
O site atual usa build.inlineStylesheets: 'auto' e verifica a saída gerada ao ajustar esse comportamento.
Solução: Arquivo externo + cache immutable
Altere a configuração do Astro para build.inlineStylesheets: 'auto'. O Astro julga automaticamente com base no tamanho do CSS e entrega CSS grande como arquivo externo.
// astro.config.mjs
export default defineConfig({
build: {
inlineStylesheets: 'auto',
},
})
Os arquivos CSS externos são gerados no diretório /_astro/, então adicione cache immutable nas configurações de cabeçalhos do Cloudflare Pages.
/_astro/*
Cache-Control: public, max-age=31536000, immutable
Depois da mudança, inspecione o HTML gerado, os arquivos CSS e o comportamento do cache e execute novamente o PageSpeed Insights nas mesmas condições.
Otimização de fontes: Verificar a entrega real
Comparar entrega externa e local
Fontes externas podem adicionar uma conexão ao caminho crítico. A entrega local também envia CSS e arquivos de fonte pelo site; compare as duas abordagens nas mesmas condições.
Use o painel de rede para verificar solicitações, cache e tamanho transferido, e Rendered Fonts para ver quais fontes o navegador realmente usou.
Estado atual do repositório
package.json inclui @fontsource/noto-sans-jp, mas em 29 de julho de 2026 ele não é importado por nenhum arquivo em src. A dependência sozinha não comprova que a fonte é entregue.
A pilha de fontes atual do UnoCSS é:
// uno.config.ts
theme: {
fontFamily: {
sans: "'Noto Sans JP', 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Yu Gothic UI', 'Yu Gothic', 'Meiryo', system-ui, sans-serif",
},
}
Essa declaração sozinha não baixa uma webfont. Se o self-hosting for adotado, verifique em conjunto o import explícito, o CSS e os arquivos de fonte gerados e o resultado renderizado.
Otimização de imagens: Cloudflare Images + srcset + sizes
Transformações do Cloudflare Images
O utilitário atual envia apenas imagens externas pela transformação /cdn-cgi/image/ do Cloudflare Images. Arquivos root-relative /uploads/... e imagens gerenciadas em asv.acecore.net/uploads/... são servidos diretamente.
- Conversão de formato:
output=autoseleciona automaticamente AVIF / WebP conforme o suporte do navegador - Ajuste de qualidade: O utilitário atual usa
quality=75por padrão; verifique a imagem real antes de alterar - Redimensionamento: Redimensiona para a largura especificada com parâmetro
w=
Configuração de srcset e sizes
Para imagens externas com entrega responsiva, gere srcset e defina sizes pelo utilitário.
---
import { generateSrcSet, optimizeImage } from '../utils/image'
const remoteImage =
'https://images.unsplash.com/photo-1515879218367-8466d910aaa4?w=800&h=400&fit=crop'
---
<img
src={optimizeImage(remoteImage, { width: 800, height: 400, quality: 75 })}
srcset={generateSrcSet(remoteImage, [480, 640, 960, 1280, 1600], {
quality: 75,
aspectRatio: 2,
})}
sizes="(max-width: 768px) calc(100vw - 2rem), 800px"
width="800"
height="400"
loading="lazy"
decoding="async"
/>
Precisão do sizes
Se o atributo sizes for deixado como 100vw (largura total da tela), o navegador seleciona uma imagem maior do que o necessário. Especifique conforme o layout real, como calc(100vw - 2rem) ou (max-width: 768px) 100vw, 50vw.
Melhoria do LCP: preload
Faça preload apenas da imagem que é realmente candidata a LCP. Em imagens responsivas, mantenha href, imagesrcset e imagesizes do layout alinhados com a imagem e defina fetchpriority="high". Preloads extras podem competir entre si; confirme a escolha por medição.
<link
rel="preload"
as="image"
href="..."
imagesrcset="..."
imagesizes="(max-width: 768px) calc(100vw - 2rem), 800px"
fetchpriority="high"
/>
Prevenção de CLS (Layout Shift)
Defina valores exatos de width e height cuja proporção corresponda à imagem original. Valores corretos permitem reservar espaço, mas os atributos sozinhos não garantem a eliminação do CLS. Os caminhos atuais de hero e rewrite de Markdown também adicionam dimensões fixas; compare a proporção com cada original e meça o CLS.
Particularmente fáceis de esquecer são imagens de avatar (32×32, 48×48, 64×64px) e thumbnails do YouTube (480×360px).
Controle de carga de anúncios e analytics diferido
AdSense
O runtime atual, ativo em /blog/ japonês, registra IntersectionObserver (rootMargin: 200px) e ResizeObserver, verifica se o bloco pode ser exibido e executa um attemptInit() inicial. Esse primeiro intento não espera a interseção; com largura utilizável, pode solicitar um anúncio imediatamente. Os observers permitem novas tentativas por interseção ou mudança de tamanho. URLs traduzidas com prefixo de locale recebem slots, mas atualmente não carregam o runtime.
const retry = () => void attemptInit()
const intersectionObserver = new IntersectionObserver(
(entries) => {
if (entries.some((entry) => entry.isIntersecting)) {
retry()
}
},
{ rootMargin: '200px' },
)
const resizeObserver = new ResizeObserver(retry)
intersectionObserver.observe(container)
resizeObserver.observe(container)
void attemptInit() // o primeiro intento não espera a interseção
attemptInit() verifica largura e visibilidade, e atributos de estado evitam solicitações duplicadas.
GA4
O Google Analytics 4 é agendado por pointerdown, keydown, touchstart ou scroll. Usa requestIdleCallback quando disponível e setTimeout caso contrário; sem interação, um temporizador agenda o carregamento após 12 segundos na página inicial ou 4 segundos nas demais páginas.
Estratégia de cache
O bloco a seguir registra as configurações atuais de _headers no Cloudflare Pages. Esses valores não são uma recomendação geral para todos os arquivos.
# Saída do build (nomes de arquivo com hash)
/_astro/*
Cache-Control: public, max-age=31536000, immutable
# Índice de busca
/pagefind/*
Cache-Control: public, max-age=604800, stale-while-revalidate=86400
# HTML
/*
Cache-Control: public, max-age=0, must-revalidate
/_astro/*contém hash no nome do arquivo, então cache immutable de 1 ano é seguro/pagefind/*tem atualmente cache de 1 semana + 1 dia de stale-while-revalidate. Como opagefind-entry.jsonde nome fixo referencia metadata com hash, revalide os arquivos entry/bootstrap para evitar gerações desencontradas e reserve cache longo para chunks com hash- HTML usa
max-age=0, must-revalidatee é revalidado antes de reutilizar o cache
Checklist de otimização de performance
- A estratégia de entrega CSS é adequada?: Verificar a saída de
autoe medir nas mesmas condições - A entrega das fontes foi comparada?: Medir self-hosting e CDN externo nas mesmas condições
- A entrega real das fontes foi verificada?: Conferir solicitações de rede e Rendered Fonts
- As imagens de entrega responsiva têm srcset + sizes?: Prepare especialmente tamanhos menores para mobile
- Apenas o candidato real a LCP tem preload?: Alinhar srcset, sizes e priority responsivos
- Os valores width / height são exatos?: Igualar a proporção original e medir CLS
- O controle de AdSense/GA4 é adequado?: Verificar primeiro intento e novas tentativas do AdSense, interações e fallback do GA4
- Os cabeçalhos de cache estão configurados?: Limitar immutable a assets com hash
Conclusão
O princípio da otimização de performance se resume a “não enviar o que não é necessário”. A entrega do CSS deve ser verificada na saída real, e o self-hosting é uma opção de fonte quando se adequa à medição e à operação do site.
Não trate uma pontuação fixa como resultado. Meça novamente Core Web Vitals e tamanho transferido em condições consistentes, incluindo o comportamento de anúncios e Analytics.
Série que inclui este artigo
Este artigo faz parte da série “Guia de melhoria de qualidade do site Astro”. Melhorias de SEO, acessibilidade e UX também são apresentadas em artigos individuais.
Fluxo de otimização
Estratégia de entrega CSS
Entender o trade-off entre inline e arquivo externo.
Otimização de fontes
Verificar quais fontes são carregadas e usadas na renderização.
Otimização de imagens
Otimizar imagens externas com Cloudflare Images + srcset + sizes.
Controle de carregamento
Verificar tentativa inicial e novas tentativas do AdSense e o carregamento diferido do GA4.
Antes da otimização
- Conexões de fontes e resultado renderizado sem verificação
- Saída CSS e cache sem verificação
- Imagens entregues em tamanho fixo
- Script do AdSense carregado imediatamente
- Acompanhar pontuações fixas sem registrar as condições do teste
Depois da otimização
- Solicitações e fontes renderizadas verificadas
- CSS maior externalizado e assets com hash em cache immutable
- Tamanho ideal entregue conforme a largura da tela com srcset + sizes
- AdSense verifica a possibilidade de exibição no primeiro intento e tenta novamente via observers; GA4 carrega após interação ou temporizador
- PageSpeed Insights repetido em condições equivalentes
CSS inline ou arquivo externo, qual é mais rápido?
Por que o Google Fonts CDN é lento?
O que fazer se o Cloudflare Images estiver lento?
O controle de carga do AdSense afeta a receita?
Comentários
Gui
CEO da Acecore. Lidera sistemas de negócio, web, bancos de dados e infraestrutura, qualidade e adoção de IA da definição de problemas de negócio ao design, implantação e melhoria após o lançamento. Parte de capacidade prática em C#/.NET e também cobre PHP/JavaScript, SQL Server/PostgreSQL/MySQL e Linux/Windows Server, desenhando requisitos, escolhas tecnológicas, padrões de qualidade e operações de desenvolvimento baseadas em GitHub como um fluxo único. Incorpora IA generativa a processos de desenvolvimento, verificação e organização de informações, como uma base prática para que equipes pequenas entreguem mais rápido e com maior confiabilidade.
Quer saber mais sobre nossos serviços?
Oferecemos suporte abrangente em desenvolvimento de sistemas, design web, operações de servidores e design gráfico.
Artigos relacionados
Guia de melhoria de qualidade de sites Astro, continuação - Ajustes finais para alcançar 100 em todos os itens do PageSpeed Insights29 de março de 2026 às 02:30
Guia de melhoria de qualidade de sites Astro — Caminho até 99 pontos no PageSpeed Mobile25 de março de 2026
Como projetar um site Astro + Cloudflare que cresce por funcionalidade7 de junho de 2026 às 19:00
Como adicionar comentários a um blog Astro usando apenas Cloudflare7 de junho de 2026 às 18:00