chunk-vendors.js 优化

问题背景

在 App.vue 加入 web-vitals 性能监控指标并打印

import {onLCP, onINP, onCLS, onTTFB} from 'web-vitals/attribution';// Measure and log LCP as soon as it's available.
onLCP(console.log);
onINP(console.log);
onCLS(console.log);
onTTFB(console.log);

在这里插入图片描述
网页的FCP指数降到poor的水平

chunk-vendors.js 简介

chunk-vendors.js 顾名思义 chunk (块 / 包) - vendors (供应商),即为:不是自己写的模块包,也就是/node_modules项目目录的所有模块包,它们称为第三方模块或供应商模块。

chunk-vendors.js 文件大小分析

Chrome Dev Tools的 Network 标签页请求 chunk-vendors.js 文件,大小是4.5MB
在这里插入图片描述
虽然Time显示只有793毫秒,但这是内网本机访问快,如果到了外网就跟服务器带宽,性能有关了。文件这么大,加载又慢,那就需要拆开来进行分块加载,或者压缩打包后的文件

方案一:拆分分块加载

附带还未进行分块分包加载时,打包得到的文件目录

在这里插入图片描述
修改 vue.config.jsconfigureWebpack.optimization.splitChunks 选项如下

// 看这里:把chunk-vendors.js进行分包,提升资源加载速度,很有必要
module.exports = {// 其他配置configureWebpack: {plugins: [],optimization: {/*** runtimeChunk可选值有:true或'multiple'或'single'* true或'multiple'会有每个入口对应的chunk。不过一般情况下* 考虑到要模块初始化,设置为single就够多数情况下使用啦。* 详情见官网:https://webpack.docschina.org/configuration/optimization/#optimizationruntimechunk* */runtimeChunk: 'single',/*** 以前是CommonsChunkPlugin,现在换成optimization.splitChunks。普通项目下方的配置就足够用啦* 详情见官网:https://webpack.docschina.org/configuration/optimization/#optimizationsplitchunks* */splitChunks: {chunks: 'all', // 可选值:all,async 和 initial。all功能最强大,所以咱们就使用allmaxInitialRequests: Infinity, // 最大并行请求数,为了以防万一,设置无穷大即可minSize: 20000, // 引入的模块大于20kb才做代码分割,官方默认20000,这里不用修改了maxSize: 60000, // 若引入的模块大于60kb,则告诉webpack尝试再进行拆分cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/, // 使用正则匹配node_modules中引入的模块priority: -10, // 优先级值越大优先级越高,默认-10,不用修改name(module) { // 设定分包以后的文件模块名字,按照包名字替换拼接一下const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]return `npm.${packageName.replace('@', '')}`},},},}}}
}

打包后的目录如下:
在这里插入图片描述

方案二:压缩

compression-webpack-plugin 插件压缩

安装 compression-webpack-plugin

yarn add compression-webpack-plugin --save-dev

遇到报错 "compression-webpack-plugin@11.1.0: The engine "node" is incompatible with this module."
在这里插入图片描述

安装报错解决方案
方案一:安装与当前项目的node版本适配的 compression-webpack-plugin@6.1.1,提示安装成功

在这里插入图片描述

方案二:升级node版本

未采取

方案三:忽略引擎版本检查

设置 ignore-engines=true 修复版本不兼容的问题。

yarn config set ignore-engines true

未采取

配置 compression-webpack-plugin

修改vue.config.js的configureWebpack.plugins选项,如下:

const CompressionPlugin = require('compression-webpack-plugin'); //引入gzip压缩插件module.exports = {// 其他配置configureWebpack: {plugins: [new CompressionPlugin({ //此插件不能使用太高的版本,否则报错:TypeError: Cannot read property 'tapPromise' of undefined// filename: "[path][base].gz", // 这种方式是默认的,多个文件压缩就有多个.gz文件,建议使用下方的写法filename: '[path].gz[query]', //  使得多个.gz文件合并成一个文件,这种方式压缩后的文件少,建议使用algorithm: 'gzip', // 官方默认压缩算法也是gziptest: /\.js$|\.css$|\.html$|\.ttf$|\.eot$|\.woff$/, // 使用正则给匹配到的文件做压缩,这里是给html、css、js以及字体(.ttf和.woff和.eot)做压缩threshold: 10240, //以字节为单位压缩超过此大小的文件,使用默认值10240吧minRatio: 0.8, // 最小压缩比率,官方默认0.8//是否删除原有静态资源文件,即只保留压缩后的.gz文件,建议这个置为false,还保留源文件。以防:// 假如出现访问.gz文件访问不到的时候,还可以访问源文件双重保障deleteOriginalAssets: false})]}
}

打包后,出现了.zip文件,目录列表如下
在这里插入图片描述

后端配置之nginx配置

server {listen       80;server_name  localhost;location / {try_files $uri $uri/ /index.html;root C:/nginx-1.18.0/html/gzip/dist;index  index.html index.htm;}location /api/ {proxy_pass http://localhost:6666/;}# 主要是下方的gizp配置哦,直接复制粘贴就可以使用啦,亲测有效哦gzip on; # 开启gzip压缩gzip_min_length 4k; # 小于4k的文件不会被压缩,大于4k的文件才会去压缩gzip_buffers 16 8k; # 处理请求压缩的缓冲区数量和大小,比如8k为单位申请16倍内存空间;使用默认即可,不用修改gzip_http_version 1.1; # 早期版本http不支持,指定默认兼容,不用修改gzip_comp_level 2; # gzip 压缩级别,1-9,理论上数字越大压缩的越好,也越占用CPU时间。实际上超过2的再压缩,只能压缩一点点了,但是cpu确是有点浪费。因为2就够用了# 压缩的文件类型 MIME类型,百度一下,一大把                                    # css             # xml             # 识别php     # 图片gzip_types text/plain application/x-javascript application/javascript text/javascript text/css application/xml application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/x-woff font/ttf;# text                   # 早期js                 # js        # js的另一种写法                                                                                 # .eot字体                   # woff字体  # ttf字体gzip_vary on; # 是否在http header中添加Vary: Accept-Encoding,一般情况下建议开启       
}

和后端确认了,nginx配置是开启了gzip压缩的

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

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

相关文章

Redis 7.x 系列【14】数据类型之流(Stream)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 XADD2.2 XRANGE2.3 XREVRANGE2.4 XDEL2.5 XLEN2.6 XREAD2.7 XG…

【自用】CentOS7.6 安装 node-RED 4.0.2 教程(各种坑都摆脱的版本)

步骤总览 1.下载安装 nodejs 2.安装并配置 node-RED 3.重启服务器,验证 node-RED 是否安装 and 配置成功 一、下载安装 nodejs 1.下载 nodejs 18 为什么要下载 nodejs 18 呢? 因为 node-RED 4.0.1 支持的最低 nodejs 版本就是 nodejs 18。 当然了&a…

实在智能对话钉钉:宜搭+实在Agent,AI时代的工作方式

比起一个需求需要等产品、技术排期,越来越多的人开始追求把自己武装成「全能战士」,通过低代码工具一搭,一个高效的工作平台便产生了。 宜搭是钉钉自研的低代码应用构建平台,无论是专业开发者还是没有代码基础的业务人员&#xf…

不知几DAY的Symfony---RCE复现

感谢红队大佬老流氓的供稿,此篇文章是针对Symfony框架的一个RCE漏洞复现 ​框架简介 Symfony是一个开源的PHP Web框架,它现在是许多知名 CMS 的核心组件,例如Drupal、Joomla!、eZPlatform(以前称为 eZPublish)或Bolt。…

和鲸“101”计划领航!和鲸科技携手北中医,共话医学+AI 实验室建设及创新人才培养

为进一步加强医学院校大数据管理与应用、信息管理与信息系统,医学信息工程等专业建设,交流实验室建设、专业发展与人才培养经验,6 月 22 日,由北京中医药大学(简称“北中医”)主办,上海和今信息…

短剧系统开发:如何让你的创意变成现实

短剧系统开发是一个将创意转化为现实的过程,它涉及多个方面,包括需求分析、系统设计、开发环境搭建、前后端开发、测试与发布等。 1. 需求分析 (1)明确目标:首先,明确短剧系统的目标和定位,包括…

APP逆向 day9 安卓开发基础1

一.前言 app逆向当然要学安卓基础啦!今天我们来教安卓基础当然,安卓基础不会教的很多,比java还要少,还是那句话,了解就好。 二.安卓环境搭建 2.1 安卓介绍 如果做安卓开发 需要会java代码安卓SDK(安卓提供的内置…

Hack The Box-Blazorized

总体思路 Blazor JWT->SPN劫持->登录脚本劫持->DCSync 信息收集&端口利用 nmap -sSVC blazorized.htbStarting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-01 02:37 EDT Nmap scan report for blazorized.htb (10.10.11.22) Host is up (0.30s latency). N…

编译调试swift5.7源码

环境: 电脑:apple m1 pro系统:macOS13Xcode: 14.2Cmake: 3.25.1Ninja: 1.11.1sccache: 0.3.3python: 3.10 (如果你的mac不是这个版本,可以通过 brew install python3.10下载,然后看这篇文章切换到该python版本)swift代…

RK3568驱动指南|第十五篇 I2C-第176章 通过逻辑分析仪认识I2C波形

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

甄选版“论软件系统架构评估”,软考高级论文,系统架构设计师论文

论文真题 对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,…

mac软件卸载后的残留文件删除 mac如何卸载应用程序

很多人都不知道,mac使用系统方式卸载后会有残留文件未被删除,久而久之就会占用大量的磁盘空间。今天小编就来教大家如何删除mac软件卸载后的残留文件,如果你想不留痕迹的删除,mac又该如何正确卸载应用程序,本文将一一为…

Python 获取字典中的值(八种方法)

Python 字典(dictionary)是一种可变容器模型,可以存储任意数量的任意类型的数据。字典通常用于存储键值对,每个元素由一个键(key)和一个值(value)组成,键和值之间用冒号分隔。 以下是 Python 字典取值的几…

嵌入式软件工程应该学些什么?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!毕业后相当嵌入式软件工程…

从理论到实践的指南:企业如何建立有效的EHS管理体系?

企业如何建立有效的EHS管理体系?对于任何企业,没有安全就谈不上稳定生产和经济效益,因此建立EHS管理体系是解决企业长期追求的建立安全管理长效机制的最有效手段。良好的体系运转,可以最大限度地减少事故发生。 这篇借着开头这个…

C++ (第二天下午---面向对象之类与对象)

一、面向过程与面向对象 1、面向过程 面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。 举个例子,下五子棋,面向过程…

LLM大模型工程师面试经验宝典--进阶版2(2024.7月最新)

目录 1 大模型怎么评测? 2 大模型的honest原则是如何实现的?模型如何判断回答 的知识是训练过的已知的知识,怎么训练这种能力? 3 如何衡量大模型水平? 4 大模型评估方法 有哪些? 5 大模型评估工具 有哪…

解锁数据资产的无限潜能:深入探索创新的数据分析技术,挖掘其在实际应用场景中的广阔价值,助力企业发掘数据背后的深层信息,实现业务的持续增长与创新

目录 一、引言 二、创新数据分析技术的发展 1、大数据分析技术 2、人工智能与机器学习 3、可视化分析技术 三、创新数据分析技术在实际应用场景中的价值 1、市场洞察与竞争分析 2、客户细分与个性化营销 3、业务流程优化与风险管理 4、产品创新与研发 四、案例分析 …

Python处理Excel文件的实用技巧使用详解

概要 在数据分析和处理的过程中,Excel 是一种广泛使用的数据存储和交换格式。Python 提供了多个强大的库来处理 Excel 文件,如 pandas、openpyxl 和 xlrd 等。本文将详细介绍如何使用这些库进行 Excel 文件的常用操作,包括读取、写入、修改和格式化等。 使用 pandas 处理 E…

仪器校准的概念与定义,计量校准是什么?

仪器校准的定义,在之前所颁布的《国际计量学词汇 基础和通用概念及相关术语》文件中,已经有了明确说明,而该文件做了修改以后,在后续新的定义中,仪器校准具体被分为两部分,第一步是将被计量仪器和计量校准的…