nuxt打包后文件过大的优化

news2024/11/25 16:52:48

在使用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压缩包。

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

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

相关文章

MySQL数据库——事物

MySQL数据库——事物 一、事务的概念二、事务的ACID特点1.原子性2.一致性3.隔离性4.持久性5.事务隔离级别的作用范围 三、事务级别的查看与设置1.查询全局事务隔离级别2.查询会话事务隔离级别3.设置全局事务隔离级别4.设置会话事务隔离级别 四、事务控制语句1.测试提交事务2.测…

threeJs着色器

一、着色器 着色器(Shaders )是一种使用GLSL(OpenGL Shading Language)编写并在GPU上运行的程序。它们被用于定位几何体的每个顶点,并为该几何体的每个可见像素着色。使用“像素Pixel”来描述其实并不准确,因为渲染的每个点不一定…

神经网络小结:训练的全过程

这一节我们主要是将之前的知识穿起来,形成一个整体。如果之前的没看过可以回翻一下专栏。但是在整体回归之前,我们还需要学习一个小知识点——随机初始化 随机初始化 在神经网络中,我们大致的训练流程就是:通过前向传播得出当前…

指针和数组--指针和二维数组的关系

指针和二维数组的关系 目录 一、二维数组的行地址和列地址 二、通过二维数组的行指针和列指针来引用二维数组元素 一、二维数组的行地址和列地址 在C语言中,可将一个二维数组看成是由若干个一维数组构成的。例如若有下面的定义: int a[3][4]&#xf…

8、DuiLib创建子窗口

文章目录 1、创建子窗口2、创建子窗口 XML 配置文件 1、创建子窗口 一个大规模的应用不可能只有一个窗口,之前我们的案例都是在一个窗口实现的,接下来我们实现一个关于窗口,来介绍如何通过 DuiLib 实现子窗口管理。 2、创建子窗口 XML 配置…

小红书种草软文怎么写?教你几招

小红书种草软文写得好,能打消用户的疑虑,吸引更多的用户关注和购买你的产品,从而获得源源不断的流量和口碑,小红书种草软文怎么写?接下来伯乐网络传媒就来给大家讲解一下,教你几招超实用的方法!…

MMSegmentation V0.27.0官方问题(包含多尺度设置)(四)

1、在单个 GPU 上再现性能 #179(添加链接描述) 2、如何使用 PyTorch 的 WeightedRandomSampler 或编写自定义采样器添加链接描述 4、使用独立的分段器 #2931添加链接描述 5、How to change the training policy from Iter to Epoch based on the existin…

【产品运营】如何通过数据分析掌握用户行为?

对于运营来说,需要掌握用户行为来制定不同的运营策略。而用户行为是通过数据分析得出的,那么,具体的数据分析是哪些数据,不同的数据又有什么区别? 通过本文能够学到什么? 快速了解一款APP。行业趋势&#…

完美解决 ---latex运行正常,但是公式显示有问题,latex公式不显示等号 = 和加号 +

文章目录 一、问题展示二、分析原因三、 我的解决办法四、 \usepackage{txfonts}宏包是什么?五、\usepackage{amsmath}宏包是什么?总结 一、问题展示 latex运行正常,但是公式显示有问题,latex公式不显示等号 和加号 二、分析原…

C++基础(9)——文件操作

前言 本文主要介绍了C中文件操作基本知识 5.1:C语言使用标准C库函数读写文件复习 fgets、fputs(读写文本文件) int main(int argc, char *argv[]) {FILE *file;file fopen("a.txt", "a");if (file NULL){perror(&q…

flutter项目启动安卓模拟器不好使的问题

这里写自定义目录标题 一. 新建的flutter项目安卓模拟器不能使用二当上面操作完成以后,新建的flutter项目可以使用安卓模拟器,但是老项目不好使的解决方法 在flutter项目中,ios模拟器好使,安卓模拟器不好使. 分为2种情况: 一. 新建的flutter项目安卓模拟器不能使用 但是在and…

专业的性能测试工具都具备哪些特点?

在软件开发和系统运行过程中,性能是一个关键的指标,直接影响到用户体验和系统的可靠性。为了确保软件和系统的性能达到预期水平,专业的性能测试工具成为必不可少的一环。那专业的性能测试工具都具备哪些特点?探讨其在软件开发和系…

分享几个免费设计生成及参考工具(第三期)

今天来给大家分享几个国外免费的设计生成工具 Uxcrush https://www.uxcrush.com/ 一个收集优秀 Figma 资源的网站,包括网站模板、移动模板、UI套件、图标、设备模型、插画等等。希望为 Figma 用户提供一个方便找到最适合他们设计项目或学习目标的资源站。 unpromp…

用Python写了一个下载网站所有内容的软件,可见即可下

目录标题 前言效果展示环境介绍:代码实战获取数据获取视频采集弹幕采集评论 GUI部分尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 今天我们分享一个用Python写下载视频弹幕评论的代码。 顺便把这些写成GUI,把这些功能放到一起让朋友用起来更方便~ 效果…

FAQ页面在SaaS产品中的应用

随着云计算和软件即服务(SaaS)的快速发展,越来越多的企业选择将业务迁移到云端,以更好地管理和运营他们的业务。在这种背景下,SaaS产品的出现成为了企业管理和运营的新趋势。SaaS产品通过云端的方式,为企业…

【linux】不小心对整个/usr/目录执行了chmod 777命令,如何恢复故障的权限设定

一、问题背景 在安装ansys的时候,脑子抽风,以为/usr/目录是共享目录,直接把所有文件或目录的权限完全设置为全用户自由读写和执行即可。 但是没想到执行了命令sudo chmod -R 777 /usr/命令之后,出现了一大堆sudo权限错误。 较为…

基于AT89S52单片机的多功能电子万年历

1、 项目介绍(设计内容) 基于AT89S52单片机的多功能电子万年历的硬件结构和软硬件设计方法。本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。系统以AT89S52单片机为控制器,以串行时钟日历芯片DS1302记录日历…

小程序中各类二维码、小程序码,在各种场景下,长按识别支持情况验证结果

近期由于业务涉及到小程序长按识别加群、关注公众号等业务,各类场景下的支持情况,官方文档也没有特别具体的说明,所以整体做了一些测试。测试结果如下,如果有一些不准确或者未验证的情况,欢迎大家指正、补充哈~ 小程序…

Unity核心8——模型导入

一、模型导入概述 ​ Unity 支持很多模型格式。比如 .fbx /.dae /.3ds /.dxf /.obj 等等。 ​ 99%的模型都不是在 Unity 中制作的,都是美术人员在建模软件中制作,如 3DMax、Maya 等等。 ​ 当他们制作完模型后,虽然 Unity 支持很多模型格式…

公司内部资料!游戏上线前部署准备,就这新手都行

前言 游戏做的差不多了,是时候准备上线测试部署了,选一个靠谱的云服务器厂商还是很重要,这次准备尝试用下华为云的服务,为了在上线前做足准备,先做一次预演,省得到时候手忙脚乱。也给其他的同事做一个文档…