Next.js 项目生产构建优化

Next.js 项目生产构建优化的完整教程,涵盖配置、工具链和性能调优技巧,助你显著加速 npm run build

注:学习阶段请先测试环境使用!

文章目录

    • @[toc]
      • 一、基础优化
        • 1. 确保使用最新版本
        • 2. 清理无用依赖和代码
        • 3. 配置 `next.config.js` 基础优化项
      • 二、Webpack 优化
        • 1. 启用多线程压缩(TerserPlugin)
        • 2. 启用持久化缓存
      • 三、环境与构建参数优化
        • 1. 增加 Node.js 内存限制
        • 2. 选择性生成静态页面
      • 四、使用分析工具
        • 1. 构建产物分析
        • 2. 构建时间分析
      • 五、硬件级优化
        • 1. 使用 SSD 磁盘
        • 2. 增加 CPU 核心
        • 3. 使用 SWC 替代 Babel(Next.js 13+ 默认)
      • 六、高级技巧
        • 1. 模块联邦(微前端场景)
        • 2. 增量构建(仅限 monorepo)
      • 七、优化效果验证
        • 1. 构建时间对比
        • 2. 产物大小检查
      • 优化前后对比示例
      • 注意事项

一、基础优化

1. 确保使用最新版本
npm update next react react-dom --save
2. 清理无用依赖和代码
# 分析包大小
npx depcheck
npx npm-check-unused
3. 配置 next.config.js 基础优化项
// next.config.js
module.exports = {productionBrowserSourceMaps: false, // 关闭生产环境 SourceMapcompress: true, // 启用 Gzip/Brotli 压缩images: {formats: ['image/webp'], // 优先生成 WebP 格式minimumCacheTTL: 3600, // 图片缓存时间},
};

二、Webpack 优化

1. 启用多线程压缩(TerserPlugin)
npm install terser-webpack-plugin --save-dev
// next.config.js
const TerserPlugin = require('terser-webpack-plugin');module.exports = {webpack: (config) => {config.optimization.minimizer = [new TerserPlugin({parallel: true, // 启用多线程terserOptions: {compress: { drop_console: true }, // 移除 console},}),];return config;},
};
2. 启用持久化缓存
// next.config.js
module.exports = {webpack: (config, { dev, isServer }) => {if (!dev && !isServer) {config.cache = {type: 'filesystem',buildDependencies: {config: [__filename],},};}return config;},
};

三、环境与构建参数优化

1. 增加 Node.js 内存限制
# 在 package.json 中修改
"scripts": {"build": "NODE_OPTIONS='--max-old-space-size=4096' next build"
}
2. 选择性生成静态页面
# 仅构建必要页面(适用于部分静态站点)
next build --profile --debug

四、使用分析工具

1. 构建产物分析
npm install @next/bundle-analyzer --save-dev
// next.config.js
const withBundleAnalyzer = require('@next/bundle-analyzer')({enabled: process.env.ANALYZE === 'true',
});module.exports = withBundleAnalyzer({});
ANALYZE=true npm run build
2. 构建时间分析
npm install --save-dev speed-measure-webpack-plugin
// next.config.js
const SpeedMeasurePlugin = require('speed-measure-webpack-plugin');
const smp = new SpeedMeasurePlugin();module.exports = smp.wrap({// 原有配置
});

五、硬件级优化

1. 使用 SSD 磁盘
  • 机械硬盘 → SSD 可提升 50% 以上构建速度
2. 增加 CPU 核心
  • Webpack 并行处理能力与 CPU 核心数正相关
3. 使用 SWC 替代 Babel(Next.js 13+ 默认)
// next.config.js
module.exports = {experimental: {forceSwcTransforms: true, // 强制使用 SWC},
};

六、高级技巧

1. 模块联邦(微前端场景)
// next.config.js
const { ModuleFederationPlugin } = require('webpack').container;module.exports = {webpack: (config) => {config.plugins.push(new ModuleFederationPlugin({name: 'host',remotes: {app1: 'app1@http://localhost:3001/remoteEntry.js',},}));return config;},
};
2. 增量构建(仅限 monorepo)
# 使用 Turborepo 加速 monorepo 构建
npm install turbo --save-dev
// package.json
"scripts": {"build": "turbo run build"
}

七、优化效果验证

1. 构建时间对比
# 优化前
time npm run build# 优化后
time npm run build
2. 产物大小检查
ls -lh .next/static/chunks

优化前后对比示例

优化项构建时间 (s)产物大小 (MB)
默认配置12045
基础优化 + Webpack8538
全量优化5232

注意事项

  1. 部分优化(如 drop_console)需根据项目需求选择
  2. 缓存可能导致构建结果不一致,必要时清理 .next/cache
  3. 生产环境务必关闭 productionBrowserSourceMaps

按此方案优化后,多数项目构建速度可提升 30%~70%。建议逐步实施并验证效果!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【嵌入式学习3】多任务编程

目录 1、多任务 并发:在一段时间内交替去执行任务 并行: 2、线程 进程与线程 守护线程 1、多任务 在同一时间内执行多个任务,多任务分为并发和并行两种形式 并发:在一段时间内交替去执行任务 软件1执行0.01秒,切…

链路聚合(Link Aggregation)

目录 一. 链路聚合概述 1. 基本概念 2. 实现条件 3. 成员接口和成员链路 二. 链路聚合模式 1. 手工模式 2. LACP模式 三. 负载分担 1. 基于数据包的负载分担 2. 基于数据流的负载分担 一. 链路聚合概述 1. 基本概念 链路聚合(Link Aggregation&#xff…

QT图片轮播器(QT实操学习2)

1.项目架构 1.UI界面 2.widget.h​ #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#define TIMEOUT 1 * 1000 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent n…

【HTML5】02-列表 + 表格 + 表单

本文介绍 列表、表格、表单的具体使用。 目录 1. 列表 1.1 无序列表 1.2 有序列表 1.3 定义列表 2. 表格 2.1 基本使用 2.2 表格结构标签 2.3 合并单元格 3. 表单 3.1 input标签 3.2 input 标签占位文本 3.3 单选框 3.4 上传文件 3.5 多选框 3.6 下拉菜单 3.7…

【数据结构】导航

【数据结构】-CSDN博客 【数据结构】next数组、nextval数组-CSDN博客

开源项目里的 autogen.sh 是做什么?

./autogen.sh 是一个在基于 Autotools 构建系统的开源项目中常见的脚本。它的主要作用是准备构建环境&#xff0c;生成后续编译所需的关键文件。 更具体地说&#xff0c;./autogen.sh 通常会执行以下操作&#xff1a; 检查构建工具: 它会检查系统中是否安装了构建项目所需的工…

RabbitMQ高级特性--发送方确认

目录 1. confirm确认模式 1.配置RabbitMQ 2.设置确认回调逻辑并发送消息 2.Return退回模式 1.配置RabbitMQ 2.设置返回回调逻辑并发送消息 在使用RabbitMQ的时候, 可以通过消息持久化来解决因为服务器的异常崩溃而导致的消息丢失, 但是还有⼀个问题, 当消息的生产者将消息发送出…

Python的ASGI Web 服务器之uvicorn

文章目录 什么是uvicornUvicorn 和 uWSGI 对比区别安装 Uvicorn使用示例 什么是uvicorn 官网https://www.uvicorn.org/ Uvicorn 是一个用于 Python 的 ASGI Web 服务器实现。 Until recently Python has lacked a minimal low-level server/application interface for async…

MongoDB 创建数据库

MongoDB 创建数据库 引言 MongoDB 是一款高性能、可扩展的 NoSQL 数据库&#xff0c;广泛应用于大数据领域。在 MongoDB 中&#xff0c;创建数据库是进行数据存储的第一步。本文将详细介绍 MongoDB 数据库的创建方法&#xff0c;包括手动创建和自动创建两种方式。 MongoDB 数…

并发编程之最小化共享

文章目录 **什么是「最小化共享」&#xff1f;****为什么要最小化共享&#xff1f;****如何实现最小化共享&#xff1f;****1. 线程局部存储&#xff08;Thread-Local Storage&#xff09;****2. 消息传递&#xff08;Message Passing&#xff09;****3. 不可变数据&#xff08…

通信之光纤耦合器

以下是关于光纤耦合器的详细介绍&#xff1a; 定义与原理 - 定义&#xff1a;光纤耦合器是一种能使传输中的光信号在特殊结构的耦合区发生耦合&#xff0c;并进行再分配的器件&#xff0c;也叫分歧器、连接器、适配器、光纤法兰盘。 - 原理&#xff1a;利用不同光纤面紧邻光纤芯…

自然语言模型的演变与未来趋势:从规则到多模态智能的跨越

自然语言模型的演变与未来趋势&#xff1a;从规则到多模态智能的跨越 自然语言处理(NLP)作为人工智能领域最具挑战性的分支之一&#xff0c;在过去几十年经历了翻天覆地的变化。从最初基于规则的系统到如今拥有万亿参数的大型语言模型(LLMs)&#xff0c;这一技术革新不仅彻底改…

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

笔记本电脑更换主板后启动出现2203:System configuration is invalid,以及2201、2202系统错误的解决 自用的一台ThinkpadT490笔记本电脑 ,由于主板故障,不得不更换主板,通过某宝购置主板后进行了更换。 具体拆卸笔记本可搜索网络视频教程。 注意: 在更换主板时,注意先拍…

JavaScript中的观察者模式

以下是关于 观察者模式(Observer Pattern) 的全面梳理,涵盖核心概念、实现方式、应用场景及注意事项,帮助我们掌握这一解耦事件通知与处理的经典设计模式: 一、观察者模式基础 1. 核心概念 定义:定义对象间 一对多 的依赖关系,当被观察对象(Subject)状态变化时,自动…

RAG基建之PDF解析的“流水线”魔法之旅

将PDF文件和扫描图像等非结构化文档转换为结构化或半结构化格式是人工智能的关键部分。然而,由于PDF的复杂性和PDF解析任务的复杂性,这一过程显得神秘莫测。 在RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”中,我们介绍了PDF解析的主要任务,对现…

【Linux】GDB调试指南

一、GDB基础 1. 启动调试 gdb ./your_program # 启动调试 gdb --args ./prog arg1 # 带参数启动 gdb -p <pid> # 附加到正在运行的进程 2. 断点管理 b main # 在main函数设断点 b file.c:20 # 在file.c第20行设断点 b *0x4005a…

Android面试总结之Glide源码级理解

当你的图片列表在低端机上白屏3秒、高端机因内存浪费导致FPS腰斩时&#xff0c;根源往往藏在Glide的内存分配僵化、磁盘混存、网络加载无优先级三大致命缺陷中。 本文从阿里P8级缓存改造方案出发&#xff0c;结合Glide源码实现动态内存扩容、磁盘冷热分区、智能预加载等黑科技&…

驱动开发系列49 - 搭建 Vulkan 驱动调试环境(编译 mesa 3D)- Ubuntu24.04

一:搭建Vulkan运行环境 安装vulkan依赖包: 1. sudo apt install vulkan-tools 2. sudo apt install libvulkan-dev 3. sudo apt install vulkan-utility-libraries-dev spirv-tools 4. sudo apt install libglfw3-dev libglm-dev 5. sudo apt install libxxf86vm-dev libxi-…

深度学习——图像余弦相似度

计算机视觉是研究图像的学问&#xff0c;在图像的最终评价时&#xff0c;往往需要用到一些图像相似度的度量指标&#xff0c;因此&#xff0c;在本文中我们将详细地介绍原生和调用第三方库的计算图像余弦相似度的方法。 使用原生numpy实现 import numpy as npdef image_cosin…