chunk-vendors.js 优化

news2024/10/6 18:24:57

问题背景

在 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功能最强大,所以咱们就使用all
                maxInitialRequests: 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

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

module.exports = {
    // 其他配置
    configureWebpack: {
        plugins: [
            new CompressionPlugin({
                filename: '[path][base].gz',
                algorithm: 'gzip',
                test: /\.js$|\.css$|\.html$/,
                threshold: 10240,
                minRatio: 0.8
            }),
            // 压缩成 .br 文件,如果 zlib 报错无法解决,可以注释这段使用代码,一般本地没问题,需要注意线上服务器会可能发生找不到 zlib 的情况。
            new CompressionPlugin({
                filename: '[path][base].br',
                algorithm: 'brotliCompress',
                test: /\.(js|css|html|svg)$/,
                compressionOptions: {
                    params: {
                        [zlib.constants.BROTLI_PARAM_QUALITY]: 11
                    }
                },
                threshold: 10240,
                minRatio: 0.8
            })
        ]
    }
}

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

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

相关文章

linux开发常用工具和命令

文章目录 服务器文件挂载服务器终端挂载vscode编辑服务器代码linux开发常用命令dulnllobjdump 服务器文件挂载 在本地操作服务器文件。 在文件夹右侧‘其他位置‘’—>‘链接到服务器s’ sftp://usernameip/目录,回车后输入密码即可在左侧看到映射的服务器文件夹…

网络基础-RIP协议

RIP(Routing Information Protocol)是一个基于距离矢量的动态路由协议,常用于小型到中型网络。RIP是较早的路由协议之一,具有简单易用的特点。以下是关于RIP协议的详细介绍: RIP的主要特点 ①使用跳数(ho…

自己分析的逆向案例八——中国新烟商盟登录密码加密

网址:会员登录 - 新商盟 登陆界面分析,找到登录接口,跟栈分析。 没有异步,也没有webpack,很简单的跟栈 打上断点,逐步网上找,找到$ajax老朋友 上面就有对密码加密的部分,是一个RSA加密。 b 被…

认识100种电路之耦合电路

在电子电路的世界中,耦合电路宛如一座精巧的桥梁,连接着各个功能模块,发挥着至关重要的作用。 【为什么电路需要耦合】 在复杂的电子系统中,不同的电路模块往往需要协同工作,以实现特定的功能。然而,这些模…

C++ STL unique_ptr智能指针源码剖析

由于上一篇博客将shared_ptr,weak_ptr,enable_shared_form_this的源码实现整理了一遍,想着cpp智能指针还差个unique_ptr故写下此篇博客,以供学习 源码剖析 一,模板参数 首先,我们先看unique_ptr的模板参数,第一个参数_TP自是不用说表示对象类型,第二个模板参数定义了unique_p…

新书速览|Adobe Firefly:萤火虫:AI绘画快速创意设计

《Adobe Firefly:萤火虫:AI绘画快速创意设计》 本书内容 人工智能(Artificial Intelligence,AI)浪潮的席卷已经变成不可阻挡的趋势,伴随着这种变化,在图形设计、图像制作、绘画领域也相应发生了…

程序员鱼皮的写简历指南(保姆级)1、基本写法

大家好,我是程序员鱼皮。做知识分享这些年来,我看过太多简历、也帮忙修改过很多的简历,发现很多同学是完全不会写简历的、会犯很多常见的问题,不能把自己的优势充分展示出来,导致错失了很多面试机会,实在是…

一篇搞懂!LinuxCentos中部署KVM虚拟化平台(文字+图片)

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年6月28日15点11分 🀄️文章质量:94分 目录 ————前言———— KVM的优点 KVM…

人脸特征68点识别 C++

1、加载一张图片 main函数&#xff1a; cv::Mat img cv::imread("5.jpg");vector<Point2f> points_vec dectectFace68(img);2、人脸68特征识别函数 在这里vector<Point2f> dectectFace68(Mat src) {vector<Point2f> points_vec;int* pResults …

数据开源|GigaSpeech 2:三万小时东南亚多语种语音识别开源数据集发布

“Giga”一词源于“gigantic”&#xff0c;互联网上具有海量音频资源&#xff0c;但语音质量良莠不齐&#xff0c;高质量音频文本对数据十分稀缺且标注成本高昂&#xff0c;特别是在小语种领域。GigaSpeech 是一个非常成功的英文开源数据集&#xff0c;以 YouTube 和 Podcast 为…

JavaScript——数组的应用内排序

目录 任务描述 相关知识 冒泡排序 一趟冒泡排序 冒泡排序全过程 选择排序 一趟选择排序 选择排序全过程 编程要求 任务描述 本关任务&#xff1a;掌握冒泡排序和选择排序。 相关知识 所谓排序是指将一组数据按照从小到大&#xff08;或从大到小&#xff09;的顺序重…

windows USB 驱动开发-URB结构

通用串行总线 (USB) 客户端驱动程序无法直接与其设备通信。 相反&#xff0c;客户端驱动程序会创建请求并将其提交到 USB 驱动程序堆栈进行处理。 在每个请求中&#xff0c;客户端驱动程序提供一个可变长度的数据结构&#xff0c;称为 USB 请求块 (URB) &#xff0c;URB 结构描…

C# 验证PDF数字签名的有效性

数字签名作为PDF文档中的重要安全机制&#xff0c;不仅能够验证文件的来源&#xff0c;还能确保文件内容在传输过程中未被篡改。然而&#xff0c;如何正确验证PDF文件的数字签名&#xff0c;是确保文件完整性和可信度的关键。本文将详细介绍如何使用免费.NET控件通过C#验证PDF签…

【TS】TypeScript 入门指南:强大的JavaScript超集

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript 入门指南&#xff1a;强大的JavaScript超集一、TypeScript 简介1.1 …

【ARM系列】1 of N SPI

1 of N模式 SPI 概述配置流程 概述 GIC-600AE支持1 of N模式SPI。在此模式下可以将SPI target到多个core&#xff0c;并且GIC-600AE可以选择哪些内核接收SPI。 GIC-600AE只向处于powered up 并且使能中断组的core发送SPI。 GIC-600AE会优先考虑那些被认为是active的核&#xf…

零成本、高收益!我是怎么通过Stable Diffusion做副业的,AI绘画助你轻松开启副业!

通过Stable Diffusion赚钱的方法 人工智能&#xff08;AI&#xff09;已经在创意领域取得了重大进展。特别是Stable Diffusion为各行各业提供了创新解决方案。从播客标志到生日蛋糕设计&#xff0c;由AI生成的艺术呈现了个人和企业的无限可能性。以下是您可以通过Stable Diffu…

利用MATLAB绘制傅里叶变换后的图形

题目如下&#xff0c;其中周期是 2 π 2\pi 2π y { 1 0 < x < π 0 x 0 − 1 − π < x < 0 y\begin{cases} 1 \ 0<x<\pi\\ 0 \ x0\\ -1 \ -\pi <x<0\\ \end{cases} y⎩ ⎨ ⎧​1 0<x<π0 x0−1 −π<x<0​ 计算可得 a n 1 π ∫ −…

linux中的进程以及进程管理

程序和进程的区别和联系 程序&#xff08;Program&#xff09;&#xff1a; 程序是一组指令的集合&#xff0c;通常存储在磁盘或其他存储设备上&#xff0c;是一种静态的概念。程序本身并没有运行&#xff0c;它只是一个可执行的文件或脚本&#xff0c;包含了一系列的指令和数…

气象监测仪:现代气象观测的利器与未来展望

在科技日新月异的今天&#xff0c;气象监测仪作为气象观测的重要工具&#xff0c;以其独特的功能优势&#xff0c;为气象预报、灾害预警以及科学研究等领域提供了强有力的支持。本文将从气象监测仪的功能优势出发&#xff0c;探讨其在现代气象观测中的应用及未来发展。 一、气象…

如何实现公网环境远程连接本地局域网宝塔FTP服务远程管理文件

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 &#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…