--- allowed-tools: Read, Edit, Bash argument-hint: [--build] [--analyze] [--report] description: Analyze and optimize Next.js bundle size with detailed recommendations --- ## Next.js Bundle Analyzer **Analysis Mode**: $ARGUMENTS ## Current Project Analysis ### Build Configuration - Next.js config: @next.config.js - Package.json: @package.json - TypeScript config: @tsconfig.json (if exists) - Build output: !`ls -la .next/ 2>/dev/null || echo "No build found"` ### Dependencies Analysis - Production dependencies: !`npm list --prod --depth=0 2>/dev/null || echo "Run npm install first"` - Development dependencies: !`npm list --dev --depth=0 2>/dev/null || echo "Run npm install first"` - Package vulnerabilities: !`npm audit --audit-level=moderate 2>/dev/null || echo "No audit available"` ## Bundle Analysis Setup ### 1. Install Bundle Analyzer ```bash # Install webpack-bundle-analyzer npm install --save-dev @next/bundle-analyzer # Or use built-in Next.js analyzer npm install --save-dev cross-env ``` ### 2. Configure Next.js Bundle Analyzer ```javascript // next.config.js const withBundleAnalyzer = require('@next/bundle-analyzer')({ enabled: process.env.ANALYZE === 'true', }); /** @type {import('next').NextConfig} */ const nextConfig = { // Your existing config experimental: { optimizePackageImports: [ 'lucide-react', '@heroicons/react', 'date-fns', 'lodash', ], }, webpack: (config, { buildId, dev, isServer, defaultLoaders, webpack }) => { // Bundle analysis optimizations if (!dev && !isServer) { config.optimization.splitChunks = { chunks: 'all', cacheGroups: { default: false, vendors: false, // Vendor chunk for common libraries vendor: { name: 'vendors', chunks: 'all', test: /node_modules/, priority: 20, }, // Common chunk for shared code common: { name: 'commons', minChunks: 2, chunks: 'all', priority: 10, reuseExistingChunk: true, enforce: true, }, // UI libraries chunk ui: { name: 'ui-libs', chunks: 'all', test: /node_modules\/(react|react-dom|@radix-ui|@headlessui)/, priority: 15, }, // Utility libraries chunk utils: { name: 'utils', chunks: 'all', test: /node_modules\/(lodash|date-fns|clsx|classnames)/, priority: 15, }, }, }; } return config; }, }; module.exports = withBundleAnalyzer(nextConfig); ``` ### 3. Package.json Scripts ```json { "scripts": { "analyze": "cross-env ANALYZE=true next build", "analyze:server": "cross-env BUNDLE_ANALYZE=server next build", "analyze:browser": "cross-env BUNDLE_ANALYZE=browser next build", "build:analyze": "npm run build && npm run analyze" } } ``` ## Bundle Analysis Execution ### 1. Generate Analysis Report ```bash # Full bundle analysis ANALYZE=true npm run build # Server-side bundle analysis BUNDLE_ANALYZE=server npm run build # Client-side bundle analysis BUNDLE_ANALYZE=browser npm run build # Production build with analysis npm run analyze ``` ### 2. Bundle Size Check ```bash # Check current bundle size ls -lah .next/static/chunks/ | head -20 # Check bundle sizes with details find .next/static/chunks -name "*.js" -exec ls -lah {} \; | sort -k5 -hr # Gzipped size analysis find .next/static/chunks -name "*.js" -exec gzip -c {} \; | wc -c ``` ## Bundle Analysis Results ### 1. Bundle Size Breakdown Analyze the generated webpack-bundle-analyzer report for: #### Client Bundles - **Main bundle**: Core application code - **Framework bundle**: Next.js runtime and React - **Vendor bundles**: Third-party libraries - **Page bundles**: Individual page chunks - **Shared bundles**: Common code between pages #### Server Bundles - **API routes**: Server-side API handlers - **Middleware**: Edge and server middleware - **Server components**: RSC bundles ### 2. Size Thresholds and Recommendations ```javascript // Bundle size thresholds const bundleThresholds = { // First Load JS (critical) firstLoadJS: { warning: 200 * 1024, // 200KB error: 300 * 1024, // 300KB }, // Individual chunks chunk: { warning: 150 * 1024, // 150KB error: 250 * 1024, // 250KB }, // Total bundle size total: { warning: 1024 * 1024, // 1MB error: 2048 * 1024, // 2MB } }; ``` ## Bundle Optimization Strategies ### 1. Code Splitting Optimization ```typescript // Dynamic imports for large components import dynamic from 'next/dynamic'; const HeavyComponent = dynamic(() => import('./HeavyComponent'), { loading: () =>

Loading...

, ssr: false, // Disable SSR for client-only components }); // Route-based code splitting const AdminDashboard = dynamic(() => import('./AdminDashboard'), { loading: () => , }); // Conditional loading const ChartComponent = dynamic( () => import('./ChartComponent'), { ssr: false, loading: () => } ); ``` ### 2. Library Optimization ```javascript // Optimize lodash imports // ❌ Imports entire lodash library import _ from 'lodash'; // ✅ Import only needed functions import { debounce, throttle } from 'lodash'; // ✅ Even better - use tree-shaking friendly alternatives import debounce from 'lodash/debounce'; import throttle from 'lodash/throttle'; ``` ```javascript // Date library optimization // ❌ Moment.js (large bundle) import moment from 'moment'; // ✅ date-fns (tree-shakable) import { format, parseISO } from 'date-fns'; // ✅ Day.js (smaller alternative) import dayjs from 'dayjs'; ``` ### 3. Next.js Specific Optimizations ```javascript // next.config.js optimizations const nextConfig = { // Optimize package imports experimental: { optimizePackageImports: [ 'react-icons', '@heroicons/react', 'lucide-react', 'date-fns', 'lodash', ], }, // Tree shaking for CSS experimental: { optimizeCss: true, }, // Minimize client-side JavaScript compiler: { removeConsole: process.env.NODE_ENV === 'production', }, // Webpack optimizations webpack: (config, { dev, isServer }) => { if (!dev && !isServer) { // Analyze bundle size config.optimization.concatenateModules = true; // Enable compression config.plugins.push( new (require('compression-webpack-plugin'))({ algorithm: 'gzip', test: /\.(js|css|html|svg)$/, threshold: 8192, minRatio: 0.8, }) ); } return config; }, }; ``` ### 4. Image Optimization ```typescript // Next.js Image component with optimization import Image from 'next/image'; // Optimize images with proper sizing Hero ``` ## Performance Impact Analysis ### 1. Core Web Vitals Impact Analyze bundle size impact on: - **Largest Contentful Paint (LCP)**: Large bundles delay content rendering - **First Input Delay (FID)**: JavaScript blocking main thread - **Cumulative Layout Shift (CLS)**: Dynamic imports causing layout shifts ### 2. Network Performance ```javascript // Simulate network conditions for testing const networkConditions = { 'Fast 3G': { downloadThroughput: 1500, uploadThroughput: 750, latency: 562.5 }, 'Slow 3G': { downloadThroughput: 500, uploadThroughput: 500, latency: 2000 }, 'Offline': { downloadThroughput: 0, uploadThroughput: 0, latency: 0 } }; ``` ### 3. Bundle Loading Strategies ```typescript // Preload critical chunks useEffect(() => { // Preload likely next page router.prefetch('/dashboard'); // Preload critical components import('./CriticalComponent'); }, []); // Lazy load non-critical features const LazyFeature = lazy(() => import('./LazyFeature').then(module => ({ default: module.LazyFeature })) ); ``` ## Optimization Recommendations ### 1. Immediate Actions - **Remove unused dependencies**: Audit and remove packages not in use - **Optimize imports**: Use tree-shaking friendly import patterns - **Enable compression**: Configure gzip/brotli compression - **Minimize polyfills**: Use modern JavaScript features with targeted polyfills ### 2. Medium-term Improvements - **Code splitting strategy**: Implement route and component-based splitting - **Library replacements**: Replace large libraries with smaller alternatives - **Bundle caching**: Implement long-term caching strategies - **Performance monitoring**: Set up bundle size monitoring in CI/CD ### 3. Long-term Optimization - **Micro-frontends**: Consider architecture changes for large applications - **Edge computing**: Move computation closer to users - **Progressive enhancement**: Implement progressive loading strategies - **Performance budgets**: Establish and enforce bundle size budgets ## Monitoring and Maintenance ### 1. Automated Bundle Monitoring ```yaml # GitHub Action for bundle monitoring name: Bundle Size Check on: [pull_request] jobs: bundle-analysis: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '18' - run: npm ci - run: npm run build - uses: nextjs-bundle-analysis/bundle-analyzer@v1 with: token: ${{ secrets.GITHUB_TOKEN }} ``` ### 2. Performance Budgets ```javascript // webpack.config.js performance budgets module.exports = { performance: { maxAssetSize: 250000, // 250KB maxEntrypointSize: 350000, // 350KB hints: 'error', }, }; ``` ### 3. Regular Audit Schedule - **Weekly**: Dependency updates and security audit - **Monthly**: Full bundle analysis and optimization review - **Quarterly**: Architecture review and major optimizations ## Analysis Report Generation Generate comprehensive report including: 1. **Current Bundle Sizes**: Detailed breakdown by chunk type 2. **Optimization Opportunities**: Specific recommendations with size impact 3. **Performance Metrics**: Core Web Vitals impact analysis 4. **Implementation Roadmap**: Prioritized optimization tasks 5. **Monitoring Setup**: Tools and processes for ongoing monitoring Provide specific, actionable recommendations for immediate and long-term bundle optimization.