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.pswp.cn/diannao/76012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76012.shtml
英文地址,請注明出處:http://en.pswp.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…