nuxt打包后文件过大的优化

2023-10-29

在使用nuxt.js来做项目的时候,遇到了加载缓慢的问题。解决思路如下

1、大文件拆分

2、文件压缩

大文件拆分

通过nuxt build --analyze或者nuxt build -a命令来启用

在package.json中 添加–analyze,然后执行npm run build

企业微信截图_16784321483171.png

打包后如下:

拆分前的

image.png

在实际应用中,加载较大体积的资源耗费的时间也会相对较大,尤其在网速不给力的时候,会对页面性能造成很大的影响。因此,将这些模块拆分成更小的模块是非常必要的。

拆分后的

image.png

在nuxt.config.js中配置optimization

build: {
    optimization: {
      minimize: true,
      minimizer: [
        // new CssMinimizerPlugin(),
      ],
      splitChunks: { // 生成 chunk 的最小体积(以 bytes 为单位)
        chunks: "all",
        automaticNameDelimiter: "-",
        maxSize: 102400,
        cacheGroups: {
          vendors: {
            test: /[\\/]node_modules[\\/]/,
            priority: -10, //优先级
            reuseExistingChunk: true,
          },
          common: {
            minChunks: 2,
            priority: -20, //优先级
            reuseExistingChunk: true,
          },
        },
      },
    },
}

可以通过配置nuxt.config.js以提取大体积模块

在项目中的nuxt.config.js中添加cacheGroups选项,将一些体积较大的模块过滤出来生成单独的文件。我在nuxt.config.js中增加了两个cacheGroups分别打包vuetify和common。由于vendors的cacheGroups的priority是-10,高于commons,所以某一模块即使符合commons的test的正则表达式,也会优先被打包进去vuetify中。

在实际项目中,可以根据项目中依赖模块的实际情况,进行分组,使得打包出来的模块尽可能小。

文件压缩,使用gzip压缩

GNU zip 压缩格式,也是互联网上最流行的压缩格式。

HTTP 协议为此定义了两个 Accept 请求头字段和两个 Content 实体头字段,用于客户端和服务器进行“内容协商”。也就是说,客户端用 Accept 头告诉服务器希望接收什么样的数据,而服务器用 Content 头告诉客户端实际发送了什么样的数据。

image.png

Accept字段标记的是客户端可理解的 MIME type,可以用“,”做分隔符列出多个类型,让服务器有更多的选择余地,例如下面的这个头:
Accept-Encoding字段标记的是客户端支持的压缩格式,例如上面说的 gzip、deflate 等,同样也可以用“,”列出多个,服务器可以选择其中一种来压缩数据,实际使用的压缩格式放在响应头字段Content-Encoding里。

Accept-Encoding: gzip, deflate, br
Content-Encoding: gzip

不过这两个字段是可以省略的,如果请求报文里没有 Accept-Encoding 字段,就表示客户端不支持压缩数据;如果响应报文里没有 Content-Encoding 字段,就表示响应数据没有被压缩。

安装compression-webpack-plugin

npm install --save-dev compression-webpack-plugin@4.0.1

使用compression-webpack-plugin

//nuxt.config.js

const CompressionWebpackPlugin = require('compression-webpack-plugin')

module.exports = {
 build: {
    extend(config, { isDev, isClient }) {
      if (!isDev && isClient) {
        config.plugins.push(
          new CompressionWebpackPlugin({
            filename: '[path].gz', 
            algorithm: 'gzip',
            test: /\.(js|css|html|svg)$/,  // 匹配文件名
            threshold: 10240, // 对超过10kb的数据进行压缩
            minRatio: 0.8,
            deleteOriginalAssets: false, // 是否删除原文件
          })
        )
      }
    },
  }
}

这样设置以后,npm run build打包完基本上整个dist文件夹里全是gz压缩包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nuxt打包后文件过大的优化 的相关文章

随机推荐

  • 2023更新阿里云服务器租用价格表(超详细)

    阿里云服务器分为云服务器ECS和轻量应用服务器 云服务器u1公网带宽可选1M到5M 系统盘为ESSD云盘40GB起 CPU内存配置可选2核2G 2核4G 4核8G 8核16G等配置 云服务器s6公网带宽可选1M到5M 系统盘40G起可选高效
  • 运放单的电源供电和双电源供电

    我们经常看到很多非常经典的运算放大器应用图集 但是他们都建立在双电源的基 础上 很多时候 电路的设计者必须用单电源供电 但是他们不知道该如何将双电源 的电路转换成单电源电路 在设计单电源电路时需要比双电源电路更加小 1 1 电源供电和单电源
  • vue后台管理动态路由-页面刷新之后跳转到默认页面的问题

    路由我们是用公共路由 动态路由 写的过程中发现 在动态路由的页面刷新页面后跳转到了默认页面 也就是我们设置的 path pathMatch redirect dashboard hidden true 本来这行代码我是写到公共路由里面了 就
  • 技术爆炸已至,AIGC(AI-Generated Content)带来内容产业全新格局

    公众号 做棵大树 欢迎关注一起进步 最近 在元宇宙概念大火的同时 人工智能技术也正在迎来新一轮的爆发 Chat GPT AIGC AI Generated Content 人工智能生成内容 正在成为一个新的风口 AIGC 即人工智能生成内容
  • Proteus元件库元件名称及中英对照表

    以下是具体内容 AND 与门 ANTENNA 天线 BATTERY 直流电源 BELL 铃 钟 BVC 同轴电缆接插件 BRIDEG 1 整流桥 二极管 BRIDEG 2 整流桥 集成块 BUFFER 缓冲器 BUZZER 蜂鸣器 CAP
  • 改进YOLO系列:4.添加ACmix注意力机制

    添加ACmix注意力机制 1 ACmix注意力机制论文 ACmix注意力机制原理 ACmix注意力机制的配置 common py配置 yolo py配置 yaml文件配置 1 ACmix注意力机制论文 论文题目 On the Integra
  • 上帝掷骰子吗--量子物理史话

    上帝掷骰子吗 量子物理史话 第一章黄金时代 一 我们的故事要从1887年的德国开始 位于莱茵河边的卡尔斯鲁厄是一座风景秀丽的城市 在它的城中心 矗立着著名的18世纪的宫殿 郁郁葱葱的森林和温暖的气候也使得这座小城成为了欧洲的一个旅游名胜 然
  • C++智能指针简单剖析

    转自 https www cnblogs com lanxuezaipiao p 4132096 html 导读 最近在补看 C Primer Plus 第六版 这的确是本好书 其中关于智能指针的章节解析的非常清晰 一解我以前的多处困惑 C
  • 如何有效地进行代码 Review

    前言 作为公司代码委员会 golang 分会的理事 我 review 了很多代码 看了很多别人的 review 评论 发现不少同学 code review 与写出好代码的水平有待提高 在这里 想分享一下我的一些理念和思路 为什么技术人员包括
  • select下拉框赋值和取值

    jq的select常用的方法 一 下拉框赋值 1 已创建select的下拉框 选中option的value为jquery 例 szfs val jquery 选中option的text为jquery 例 select id option t
  • 五分钟搭建Jetbrains家族IDE授权服务器

    作为Java码农 IntelliJ IDEA可谓是N0 1的开发环境了 对框架的支持 界面 插件都是比较方便的 大大加快了开发的速度以及开发的乐趣 酷炫的界面也能大大的装一个逼 虽然这里教大家搭建授权服务器 但是月入1狗的同志还是支持一下人
  • LVGL学习笔记

    文章目录 前言 一 软件安装 1 VSCode安装 2 MSYS2安装 二 配置环境 1 添加环境变量 2 配置msys2环境 3 配置VSCode 三 运行lvgl示例 前言 最近需要使用LittlevGL 以下简称lvgl 做ARM开发
  • 比较C Sharp和Java

    本文对比C 与Java编程语言 因为这两种语言都具有自动垃圾回收以及运行时编译执行的特点 并且他们的语法都是继承自C语言 C 因此二者有个很多相似之处 但由于C 也被描述为一个C 和Java的混合体 并添加了一些新特性 引入了一些变化 因此
  • 记录el-form+el-dialog表单重置问题

    问题1 使用this refs formName resetFields 方法 表单无法重置 原因 resetField 方法不是将表单重置为空 而是重置为初始值 所以当我们打开新建表单的时候 表单项绑定的属性值为空 在提交表单后 表单项绑
  • 病毒分析教程第三话--静态逆向分析(上)

    静态逆向分析 上 教程参考自 恶意代码分析实战 程序来自 http www nostarch com malware htm 使用上两话静态特征分析和动态行为分析的方法只能从宏观的角度分析样本 但由于无法得到源代码 所以我们无法确凿地判定这
  • marquee 和JS 滚动效果

    一 marquee标签的几个重要属性 1 direction 滚动方向 包括4个值 up down left right 说明 up 从下向上滚动 down 从上向下滚动 left 从右向左滚动 right 从左向右滚动 语法
  • 解决LocalDateTime传值JSON格式化问题

    LocalDateTime是JDK8中提供的新功能 极大的优化了原生日期时间类的使用 但是第一次使用该类可能会在传值过程中出现格式化的小问题 如 JSON无法解析前端所传格式 序列化时LocalDateTime成为数组等 以下提供简单的解决
  • 移动开发 - Android - 实现两个页面(Activity)的简单跳转(Intent)

    我们要实现的页面跳转如下图所示 第一个页面 通过点击第一个按钮 实现跳转 通过点击第二个按钮实现跳转后 点击返回按钮 结束界面 因为之前的界面还没有结束 当第二个界面结束后 露出第一个界面 使用Intent实现页面的跳转有两种方式 1 无返
  • intel cpu 漏洞 linux,Intel CPU架构漏洞越捅越大:打补丁将损失30%性能

    还记得前不久那个被曝光影响大面积Intel Core CPU产品的安全漏洞吗 这貌似只是冰山一角 就在今天人们发现了Intel处理器里一个更为致命的漏洞 从最底端的Pentium 到最新的Coffee Lake Core 无一幸免 现在全球
  • nuxt打包后文件过大的优化

    在使用nuxt js来做项目的时候 遇到了加载缓慢的问题 解决思路如下 1 大文件拆分 2 文件压缩 大文件拆分 通过nuxt build analyze或者nuxt build a命令来启用 在package json中 添加 analy