Abonnements
PRODUIT
SOLUTIONS
par cas d'utilisation
AI Gestion du leadFacturationRéseaux SociauxGestion de projetGestion des donnéespar industrie
en savoir plus
BlogGabaritsVidéosYoutubeRESSOURCES
COMMUNAUTÉS ET RÉSEAUX SOCIAUX
PARTENAIRES
Je veux plus vite Marionnettiste automatisation? La gestion du cache du navigateur est essentielle. Ce guide explique comment désactiver, vider et optimiser le cache pour de meilleures performances.
setCacheEnabled(false)
ou des indicateurs de lancement de navigateur comme --disable-cache
pour simuler de nouveaux chargements de pages.Network.clearBrowserCache
via Protocole Chrome DevTools (CDP) pour des environnements de test propres.Une gestion efficace du cache peut réduire considérablement l'utilisation des données, améliorer la précision des tests et accélérer les workflows d'automatisation. Découvrez comment !
Désactiver le cache dans Puppeteer peut s'avérer utile pour les tâches de test et d'automatisation nécessitant de nouveaux chargements de pages. Voici comment procéder et ce qu'il faut retenir.
setCacheEnabled()
MéthodeVous pouvez désactiver la mise en cache dans Puppeteer avec le setCacheEnabled()
méthode:
await page.setCacheEnabled(false);
Exécutez cette commande avant d'accéder à une page. Par défaut, la mise en cache est activée ; vous devez donc la désactiver lorsque vos tests nécessitent une charge de ressources propre. Pour une solution plus adaptée à l'ensemble du navigateur, consultez la section suivante.
Pour désactiver la mise en cache au niveau du navigateur, lancez Chromium avec des drapeaux spécifiques :
const browser = await puppeteer.launch({
args: ['--disable-cache']
});
Cette méthode fonctionne bien lorsque vous devez contrôler la mise en cache pour l'ensemble de la session du navigateur, en complément de la setCacheEnabled()
approche.
Lorsque le cache est désactivé, chaque ressource est téléchargée à nouveau, ce qui peut ralentir le processus et augmenter la consommation de données. Par exemple, les tests sur CNNLe site web de a montré une augmentation de 88 % du transfert de données lorsque la mise en cache était désactivée. Pour trouver le juste équilibre entre précision et performances, suivez ces conseils :
La désactivation du cache est idéale pour simuler le comportement d'un utilisateur novice, mais évaluez les compromis en fonction de vos objectifs de test.
Les tests automatisés nécessitent souvent un cache vidé pour maintenir des résultats cohérents.
setCacheEnabled()
Vous pouvez effacer les données du cache à l'aide des commandes du protocole Chrome DevTools (CDP) :
const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCache');
await page.setCacheEnabled(false);
Cette approche efface le cache du navigateur et désactive la mise en cache, garantissant ainsi une table rase pour vos tâches d’automatisation.
Vous pouvez également effacer le cache et les cookies simultanément :
const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCache');
await client.send('Network.clearBrowserCookies');
Il peut parfois être nécessaire de vider certaines données stockées plutôt que l'intégralité du cache. Voici comment gérer les 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);
Cela permet un contrôle précis sur la gestion des cookies lors de vos tests.
Lorsque vous travaillez avec plusieurs onglets, il est judicieux d'isoler les données du cache en utilisant des contextes de navigateur distincts. Voici comment :
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();
L'utilisation de contextes séparés empêche les interférences de cache entre les onglets, ce qui le rend idéal pour l'exécution de tests parallèles.
La gestion efficace du cache dans Puppeteer peut réduire le transfert de données jusqu'à 92%, rendant l'automatisation beaucoup plus rapide.
Pour équilibrer vitesse et actualité des données, vous pouvez intercepter les requêtes et les réponses afin de mettre en œuvre une mise en cache plus intelligente. Voici un exemple :
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);
}
}
Cette configuration minimise les requêtes réseau inutiles tout en gardant les données essentielles à jour en validant les cache-control
en-tête.
Adaptez la mise en cache à vos besoins en créant des règles spécifiques. Par exemple :
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);
}
};
Ces règles aident à déterminer quelles réponses mettre en cache et combien de temps les conserver.
Une fois vos règles de mise en cache en place, évaluez leur impact à l’aide de mesures de performance :
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);
}
}
Suivez des indicateurs clés comme le nombre total de requêtes, les réponses mises en cache et les données enregistrées. Voici une comparaison basée sur des tests :
Type de métrique | Sans cache | Avec cache | Formation |
---|---|---|---|
Transfert de données | 177 MB | 13.4 MB | 92% de réduction |
Ces résultats montrent à quel point une mise en cache bien conçue peut améliorer considérablement les performances de Puppeteer.
Lors de l'utilisation de Puppeteer, l'interception des requêtes désactive la mise en cache native du navigateur. Cela peut entraîner un transfert de données plus important et des temps de chargement des pages plus longs. Pour remédier à ce problème, vous pouvez implémenter une mise en cache personnalisée en suivant la méthode suivante :
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()
});
}
});
Pour éviter d’éventuelles fuites de mémoire, assurez-vous de nettoyer efficacement les ressources :
async function cleanupResources(page) {
await page.removeAllListeners();
const client = await page.target().createCDPSession();
await client.send('Network.clearBrowserCache');
await client.detach();
await page.close();
}
En combinant ces techniques, vous pouvez réduire les frais généraux et améliorer les performances de Puppeteer.
Voici quelques conseils pratiques pour gérer le cache plus efficacement, basés sur des tests et des analyses :
Question | Solution | Impact positif |
---|---|---|
Transfert de données élevé | Utiliser la mise en cache en mémoire | Réduit le trafic jusqu'à 92 % |
Fuites de ressources | Appliquer les procédures de nettoyage | Aide à prévenir l'épuisement de la mémoire |
Charge de page lente | Bloquer les ressources inutiles | Améliore considérablement la vitesse de rendu |
Pour de meilleures performances, vous pouvez bloquer certaines ressources comme les images ou les feuilles de style pour accélérer le chargement des pages :
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();
}
});
L’utilisation de ces stratégies peut rationaliser vos flux de travail Puppeteer tout en gardant l’utilisation des ressources sous contrôle.
Une gestion efficace du cache dans Puppeteer peut améliorer considérablement les performances tout en réduisant l'utilisation des ressources. Ce guide explique comment désactiver, vider et ajuster les paramètres du cache pour obtenir de meilleurs résultats. Vous trouverez ci-dessous un résumé concis des principales stratégies et de leurs effets.
Les tests ont montré à quel point une gestion appropriée du cache peut être efficace, soulignant l’importance de le gérer avec précaution.
Voici un aperçu rapide de certaines stratégies clés et de leurs résultats :
de Marketing | Implantation | Impact sur les performances |
---|---|---|
Mise en cache en mémoire | Mettre en cache les réponses avec max-age > 0 |
92 % de réduction du transfert de données |
Blocage des ressources | Désactiver les publicités et les scripts de suivi | Amélioration notable du chargement des pages |
Synchronisation intelligente des captures d'écran | Utilisez waitForSelector() |
Rendu plus rapide |
Mise en cache intersession | Configurez userDataDir |
Conserve les ressources CSS/JS/image |
Lors de l'optimisation de Puppeteer, n'oubliez pas qu'il existe un nombre limité de façons d'accélérer les performances de démarrage et d'arrêt de Puppeteer. Les gains de vitesse les plus importants proviendront probablement de l'optimisation de votre pages cibles à afficher plus rapidement." - Jon Yongfook, fondateur, Bannerbear