Analyse et optimisation des bundles avec Claude Code
Apprenez l'analyse et l'optimisation des bundles avec Claude Code. Inclut des exemples de code pratiques.
Reduire la taille de l’application grace a l’analyse des bundles
L’expansion des bundles JavaScript impacte directement la vitesse de chargement de la page. Avec Claude Code, vous pouvez progresser efficacement de l’analyse des bundles a l’implementation de mesures d’optimisation.
Visualisation de la taille du bundle
> Analyse la taille du bundle et identifie les dependances a optimiser.
> Ajoute aussi la configuration pour visualiser avec un treemap.
// vite.config.ts
import { defineConfig } from 'vite';
import { visualizer } from 'rollup-plugin-visualizer';
export default defineConfig({
plugins: [
visualizer({
filename: 'dist/bundle-stats.html',
open: true,
gzipSize: true,
brotliSize: true,
template: 'treemap',
}),
],
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
router: ['react-router-dom'],
ui: ['@radix-ui/react-dialog', '@radix-ui/react-dropdown-menu'],
},
},
},
},
});
Verification automatique de la taille du bundle
// scripts/check-bundle-size.ts
import { readFileSync, readdirSync, statSync } from 'fs';
import path from 'path';
import { gzipSync, brotliCompressSync } from 'zlib';
interface BundleReport {
file: string;
raw: number;
gzip: number;
brotli: number;
}
function analyzeBundles(dir: string): BundleReport[] {
const files = readdirSync(dir, { recursive: true }) as string[];
return files
.filter(f => /\.(js|css)$/.test(f))
.map(file => {
const filePath = path.join(dir, file);
const content = readFileSync(filePath);
return {
file,
raw: content.length,
gzip: gzipSync(content).length,
brotli: brotliCompressSync(content).length,
};
})
.sort((a, b) => b.gzip - a.gzip);
}
function formatSize(bytes: number): string {
if (bytes < 1024) return `${bytes}B`;
return `${(bytes / 1024).toFixed(1)}kB`;
}
const reports = analyzeBundles('dist/assets');
console.log('\nRapport de taille du bundle\n');
console.log('Fichier | Raw | Gzip | Brotli');
console.log('--- | --- | --- | ---');
let totalGzip = 0;
for (const r of reports) {
totalGzip += r.gzip;
console.log(`${r.file} | ${formatSize(r.raw)} | ${formatSize(r.gzip)} | ${formatSize(r.brotli)}`);
}
console.log(`\nTotal (gzip) : ${formatSize(totalGzip)}`);
// Verification de la limite de taille
const LIMIT = 200 * 1024; // 200kB
if (totalGzip > LIMIT) {
console.error(`\nLa taille du bundle depasse la limite (${formatSize(LIMIT)}) !`);
process.exit(1);
}
Identification et remplacement des dependances lourdes
> Suggere des remplacements de dependances lourdes par des alternatives legeres.
// Patterns de remplacement courants
const replacements = {
// moment.js (300kB) -> dayjs (2kB)
'moment': 'dayjs',
// lodash (70kB) -> lodash-es (compatible tree-shaking)
'lodash': 'lodash-es',
// axios (13kB) -> fetch API (integre)
'axios': 'native fetch',
// uuid (3.5kB) -> crypto.randomUUID() (integre)
'uuid': 'crypto.randomUUID()',
};
// Importation individuelle de lodash
// Non : import _ from 'lodash';
// Oui : import debounce from 'lodash-es/debounce';
Division de code avec les importations dynamiques
// Division basee sur les routes
const routes = [
{
path: '/dashboard',
component: lazy(() => import('./pages/Dashboard')),
},
{
path: '/settings',
component: lazy(() => import('./pages/Settings')),
},
];
// Importation conditionnelle
async function loadEditor() {
const { EditorModule } = await import('./modules/heavy-editor');
return new EditorModule();
}
// Chargement paresseux des bibliotheques
async function highlightCode(code: string, lang: string) {
const { highlight } = await import('prismjs');
return highlight(code, lang);
}
Surveillance de la taille du bundle en CI/CD
# .github/workflows/bundle-check.yml
name: Bundle Size Check
on: [pull_request]
jobs:
bundle-size:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- run: npx tsx scripts/check-bundle-size.ts
- uses: actions/upload-artifact@v4
with:
name: bundle-report
path: dist/bundle-stats.html
Summary
L’analyse et l’optimisation des bundles sont etroitement liees au tree shaking. Avec Claude Code, vous pouvez realiser efficacement l’analyse des dependances et leur remplacement par des alternatives legeres. Integrer la verification de la taille du bundle dans le CI/CD previent la degradation des performances. Pour l’optimisation du build Vite, consultez la documentation officielle de Vite.
PDF gratuit : aide-mémoire Claude Code en 5 minutes
Laissez simplement votre e-mail et nous vous enverrons immédiatement l'aide-mémoire A4 en PDF.
Nous traitons vos données avec soin et n'envoyons jamais de spam.
À propos de l'auteur
Masa
Ingénieur passionné par Claude Code. Il gère claudecode-lab.com, un média tech en 10 langues avec plus de 2 000 pages.
Articles similaires
Agent Harness securise pour Claude Code et Codex : permissions, verification et rollback
Construisez un Agent Harness pratique pour Claude Code et Codex avec politiques, plan, verification et recuperation.
10 puissants patterns de sous-agents pour Claude Code
Maîtrisez la fonctionnalité sous-agent de Claude Code avec 10 patterns pratiques. Apprenez à utiliser le traitement parallèle, la spécialisation et l'isolation de contexte.
Introduction au Claude Code Agent SDK — Construisez des agents autonomes rapidement
Apprenez à construire des agents IA autonomes avec le Claude Code Agent SDK. Configuration, définition d'outils et exécution multi-étapes avec des exemples pratiques.