Preços
PRODUTO
SOLUÇÕES
por casos de uso
AI Gestão de leadsFacturaçãoMídia socialGestão de ProjetosGestão de dadospor setor
saber mais
BlogModelosVídeosYoutubeRECURSOS
COMUNIDADES E MÍDIAS SOCIAIS
PARCEIROS
Quer mais rápido Marionetista automação? Gerenciar o cache do navegador é essencial. Este guia aborda como desabilitar, limpar e otimizar o cache para melhor desempenho.
setCacheEnabled(false)
ou sinalizadores de inicialização do navegador como --disable-cache
para simular novos carregamentos de páginas.Network.clearBrowserCache
via Protocolo Chrome DevTools (CDP) para ambientes de teste limpos.O gerenciamento eficiente de cache pode reduzir drasticamente o uso de dados, melhorar a precisão dos testes e acelerar os fluxos de trabalho de automação. Mergulhe para saber como!
Desabilitar o cache no Puppeteer pode ser útil para tarefas de teste e automação onde são necessários novos carregamentos de página. Veja como você pode fazer isso e o que ter em mente.
setCacheEnabled()
FormaVocê pode desativar o cache no Puppeteer com o setCacheEnabled()
método:
await page.setCacheEnabled(false);
Execute este comando antes de navegar para qualquer página. Por padrão, o cache está ativado, então você precisa desativá-lo quando seus testes exigirem uma carga limpa de recursos. Para uma solução mais ampla para o navegador, confira a próxima seção.
Para desabilitar o cache no nível do navegador, inicie Chromium com sinalizadores específicos:
const browser = await puppeteer.launch({
args: ['--disable-cache']
});
Este método funciona bem quando você precisa controlar o cache de toda a sessão do navegador, complementando o setCacheEnabled()
abordagem.
Quando o cache está desligado, todos os recursos são baixados frescos, o que pode tornar as coisas mais lentas e aumentar o uso de dados. Por exemplo, testes em CNNO site da mostrou um salto de 88% na transferência de dados quando o cache foi desabilitado. Para encontrar um equilíbrio entre precisão e desempenho, considere estas dicas:
Desabilitar o cache é ótimo para simular o comportamento do usuário iniciante, mas pondere as compensações com base nos seus objetivos de teste.
Testes automatizados geralmente precisam de um cache limpo para manter resultados consistentes.
setCacheEnabled()
Você pode limpar dados de cache usando comandos do Chrome DevTools Protocol (CDP):
const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCache');
await page.setCacheEnabled(false);
Essa abordagem limpa o cache do navegador e desabilita o armazenamento em cache, garantindo um novo começo para suas tarefas de automação.
Você também pode limpar o cache e os cookies juntos:
const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCache');
await client.send('Network.clearBrowserCookies');
Às vezes, você pode precisar limpar dados armazenados específicos em vez de todo o cache. Veja como você pode gerenciar cookies:
// Clear all cookies
const cookies = await page.cookies();
await page.deleteCookie(...cookies);
// To delete a specific cookie, use:
// await page.deleteCookie({ name: 'cookie_name', url: 'https://example.com' });
// Set cookies to expire
const cookies = await page.cookies();
for (let cookie of cookies) {
cookie.expires = -1;
}
await page.setCookies(...cookies);
Isso permite um controle preciso sobre o gerenciamento de cookies durante seus testes.
Ao trabalhar com várias abas, é uma boa ideia isolar os dados do cache usando contextos de navegador separados. Veja como:
const browser = await puppeteer.launch();
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage();
const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCache');
// Close the context after tasks are done
await context.close();
O uso de contextos separados evita a interferência de cache entre as guias, o que o torna ideal para executar testes paralelos.
Gerenciar o cache de forma eficaz no Puppeteer pode reduzir a transferência de dados em até 92%, tornando a automação muito mais rápida.
Para equilibrar velocidade e dados atualizados, você pode interceptar solicitações e respostas para implementar um cache mais inteligente. Aqui está um exemplo:
const cache = new Map();
async function handleRequest(request) {
const url = request.url();
if (cache.has(url)) {
const cachedResponse = cache.get(url);
if (isFresh(cachedResponse)) {
return request.respond(cachedResponse);
}
}
// Continue the request if it's not cached
request.continue();
}
async function handleResponse(response) {
const headers = response.headers();
if (headers['cache-control'] && headers['cache-control'].includes('max-age')) {
const responseData = {
status: response.status(),
headers: headers,
body: await response.buffer()
};
cache.set(response.url(), responseData);
}
}
Esta configuração minimiza solicitações de rede desnecessárias, mantendo os dados essenciais atualizados, validando o cache-control
cabeçalho.
Adapte o cache às suas necessidades criando regras específicas. Por exemplo:
const customCacheRules = {
shouldCache: (response) => {
const headers = response.headers();
return headers['cache-control'] &&
headers['cache-control'].includes('max-age') &&
Number(headers['cache-control'].match(/max-age=(\d+)/)[1]) > 0;
},
getExpirationTime: (headers) => {
const maxAge = headers['cache-control'].match(/max-age=(\d+)/)[1];
return Date.now() + (parseInt(maxAge) * 1000);
}
};
Essas regras ajudam a determinar quais respostas armazenar em cache e por quanto tempo mantê-las.
Depois que suas regras de cache estiverem definidas, avalie seu impacto usando métricas de desempenho:
const metrics = {
totalRequests: 0,
cachedResponses: 0,
dataSaved: 0
};
async function trackCacheMetrics(request, response) {
metrics.totalRequests++;
if (response.fromCache()) {
metrics.cachedResponses++;
metrics.dataSaved += parseInt(response.headers()['content-length'] || 0);
}
}
Rastreie métricas-chave como solicitações totais, respostas em cache e dados salvos. Aqui está uma comparação com base em testes:
Tipo de métrica | Sem Cache | Com Cache | Melhoria |
---|---|---|---|
Transferência De Dados | 177 MB | 13.4 MB | Redução de 92% |
Esses resultados destacam como um cache bem projetado pode melhorar drasticamente o desempenho do Puppeteer.
Ao usar o Puppeteer, habilitar a interceptação de requisição desabilita o cache nativo do navegador. Isso pode levar a uma transferência de dados maior e tempos de carregamento de página mais lentos. Para resolver isso, você pode implementar o cache personalizado com a seguinte abordagem:
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Initialize cache storage
const responseCache = new Map();
await page.setRequestInterception(true);
page.on('request', async request => {
const url = request.url();
if (responseCache.has(url)) {
await request.respond(responseCache.get(url));
return;
}
request.continue();
});
page.on('response', async response => {
const url = response.url();
const headers = response.headers();
if (headers['cache-control'] && headers['cache-control'].includes('max-age')) {
responseCache.set(url, {
status: response.status(),
headers: headers,
body: await response.buffer()
});
}
});
Para evitar possíveis vazamentos de memória, certifique-se de limpar os recursos de forma eficaz:
async function cleanupResources(page) {
await page.removeAllListeners();
const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCache');
await client.detach();
await page.close();
}
Ao combinar essas técnicas, você pode reduzir a sobrecarga e melhorar o desempenho do Puppeteer.
Aqui estão algumas dicas práticas para gerenciar o cache de forma mais eficaz, com base em testes e análises:
Questão | Solução | Impacto |
---|---|---|
Alta transferência de dados | Usar cache na memória | Reduz o tráfego em até 92% |
Vazamentos de recursos | Aplicar procedimentos de limpeza | Ajuda a prevenir o esgotamento da memória |
Carregamentos de página lentos | Bloquear recursos desnecessários | Melhora significativamente a velocidade de renderização |
Para melhor desempenho, você pode bloquear certos recursos, como imagens ou folhas de estilo, para acelerar o carregamento da página:
const browserOptions = {
userDataDir: './cache-directory',
args: [
'--disable-background-timer-throttling',
'--disable-extensions'
]
};
await page.setRequestInterception(true);
page.on('request', request => {
if (request.resourceType() === 'image' || request.resourceType() === 'stylesheet') {
request.abort();
} else {
request.continue();
}
});
Usar essas estratégias pode otimizar seus fluxos de trabalho do Puppeteer e, ao mesmo tempo, manter o uso de recursos sob controle.
O gerenciamento eficiente de cache no Puppeteer pode melhorar drasticamente o desempenho enquanto reduz o uso de recursos. Este guia abordou como desabilitar, limpar e ajustar as configurações de cache para obter melhores resultados. Abaixo está um resumo conciso das principais estratégias e seus efeitos.
Os testes mostraram o quão eficaz o gerenciamento adequado de cache pode ser, enfatizando a importância de manuseá-lo com cuidado.
Aqui está uma rápida olhada em algumas estratégias principais e seus resultados:
Estratégia | Implementação | Impacto no desempenho |
---|---|---|
Cache na memória | Respostas de cache com max-age > 0 |
Redução de 92% na transferência de dados |
Bloqueio de recursos | Desativar anúncios e scripts de rastreamento | Melhoria notável no carregamento da página |
Tempo de captura de tela inteligente | Use waitForSelector() |
Conclusão de renderização mais rápida |
Cache entre sessões | configurar userDataDir |
Mantém ativos CSS/JS/imagem |
"Ao otimizar o Puppeteer, lembre-se de que há apenas algumas maneiras de acelerar o desempenho de inicialização/desligamento do próprio Puppeteer. Provavelmente, os maiores ganhos de velocidade virão de obter seu páginas de destino para renderizar mais rápido." - Jon Yongfook, Fundador, Bannerbear