Vue3+vite 加载优化

公司项目,技术栈:vue3+vite+elementPLus+echarts。首屏加载有点慢,针对这个做了一些优化措施,记录一下。之前写过关于vue2版本的优化,有兴趣的可以了解下

定位问题

f12打开控制台,然后Network看下那些包占比大。这个项目是:字体包>背景图>js主包。简单看了之后开始进行优化

1、字体处理

字体处理,如果对于系统优化要求不严格,可以在@font-face引用时,设置font-display

@font-face {font-family: "Source Han Sans CN";src: url("@/assets/fonts/SourceHanSansCN-Regular.otf");font-display: swap;
}

gpt解释:
在这里插入图片描述
如果是静态网站,并且对于系统优化要求严格,可以尝试借助类似glyphhanger之类的工具,对字体文件进行删减。只保留项目使用到的字体。

2、图片优化

  • 首选肯定本地图片调整为cdn方式加载,但是对于没有cdn的项目就需要静态处理了

  • 小图片,vite其实已经内置了对于小图片的处理

    较小的资源体积小于 assetsInlineLimit 选项值 则会被内联为 base64 data URL。

  • 大图片,推荐一个无损压缩网站,基本大的图片,在网站上过滤一边,能减少20-50%的体积.

3、js主包优化

主包这里的优化,需要明确具体是那些模块大,我这里是使用插件(rollup-plugin-visualizer)分析,类似webpack的插件:webpack-bundle-analyze

// vite.config.ts
import { visualizer } from "rollup-plugin-visualizer"export default ({ command, mode }: ConfigEnv): UserConfigExport => {...plugins:[visualizer({gzipSize: true,brotliSize: true,filename: "stats.html", // 默认在项目根目录下生成stats.html文件,可自定义open: true //生成后自动打开浏览器查看}),]
}

然后执行build命令,打包完成就会直接打开页面分析内容。我这里没记录最开始的分析记录图,就不展示了。然后按照从大到小进行优化。我这边主要是几个三方包的优化

  • echarts、vue-echarts
    echarts的包,基本是No.1,1M+的占用,异常恐怖。所以是头号优化目标,方法也比较简单,参考echarts官方文档,将全量引入修改为按需引入即可

    import { type App } from "vue"
    import { use } from "echarts/core"
    import { CanvasRenderer } from "echarts/renderers"
    import { PieChart, LineChart, BarChart, MapChart, GaugeChart } from "echarts/charts"
    import { TitleComponent, TooltipComponent, LegendComponent, GridComponent, GeoComponent } from "echarts/components"
    import VChart from "vue-echarts"// 按需引入echarts 和 vue-charts
    export function loadCharts(app: App) {use([CanvasRenderer,PieChart,MapChart,GaugeChart,LineChart,BarChart,TitleComponent,TooltipComponent,LegendComponent,GridComponent,GeoComponent])app.component("v-chart", VChart)
    }

    注意,内部使用到的渐变色,也要调整为按需引入,此处让我疑惑了很久

    // 旧
    import * as echarts from "echarts"options = {...color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{offset: 0,color: '#00FFE0',},{offset: 1,color: '#ab4141',},]);
    }
    // 新
    import { graphic } from "echarts/core"options = {...color: new graphic.LinearGradient(0, 0, 1, 0, [{offset: 0,color: '#00FFE0',},{offset: 1,color: '#ab4141',},]);
    }
    
  • elementPlus、@element-plus/icons-vue

    • elementPlus的按需导入比较简单,官网已经有了示例,直接照抄就行,
      在这里插入图片描述
    • @element-plus/icons-vue的按需导入,只要不是官网的这种全量导入就行,用到那些引入哪些
      // main.ts
      // 这个方式会导致 icon全量注册
      import * as ElementPlusIconsVue from '@element-plus/icons-vue'const app = createApp(App)
      for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component)
      }// 用到哪个导入哪个
      import {Plus} from '@element-plus/icons-vue'<template><Plus />
      </template>
      
  • 业务代码

    • 这部分基本可以参照gpt的回答了
      *在这里插入图片描述
  • 部署方面优化

    • 开启gzip,其实这里才是最简单粗暴的优化,强烈建议开启,未开启到开启,起码40%的优化空间

结语

基本做的优化就这些了,这一套组合拳下载项目从30M+,缩减到了3M,一般项目够用了。

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

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

相关文章

Nvidia突袭AI江湖!悄悄发布新模型,完爆OpenAI和Anthropic?

你以为Nvidia只会造芯片&#xff1f;太天真了&#xff01;这家GPU巨头刚刚在AI语言模型领域上演了一出惊天逆袭&#xff0c;让OpenAI和Anthropic都措手不及。 没有轰轰烈烈的发布会&#xff0c;没有铺天盖地的宣传&#xff0c;Nvidia就这么静悄悄地在Hugging Face平台上扔出了一…

【Unity Shader】Special Effects(十)Change 变换(UI)

源码:[点我获取源码] 索引 Change 变换思路分析变换进度噪声纹理闪烁闪烁时机闪烁颜色闪烁动画Change 变换 变换的效果为图像间的切换带来动感过程,使用动画播放器: 思路分析 首先,从原始图像变换到目标图像是一个从0到1的过程,这个过程我们命名为变换进度(0为完全显…

jQuery选择器

目录 一、基本选择器 1. 标签选择器&#xff08;元素选择器&#xff09; 2. ID 选择器 3. 类选择器 4. 通配符选择器 二、层次选择器 1. 后代选择器 2. 子选择器 3. 相邻兄弟选择器 4. 一般兄弟选择器 三、属性选择器 1. 简单属性选择器 2. 属性值等于选择器 3.属…

kafka如何获取 topic 主题的列表?

大家好&#xff0c;我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka如何获取 topic 主题的列表&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;可以…

π0——用于通用机器人控制的流匹配VLA模型:一套框架控制7种机械臂(基于PaliGemma和ACT的3B模型)

前言 在此文之前&#xff0c;我花了一天半&#xff0c;详细解读了清华一研究团队发布的机器人扩散大模型RDT&#xff0c;包括其每一个附录&#xff0c;并在该文中预告说&#xff1a;​下一篇是一个3B的机器人大模型打通7种不同品牌的机械臂&#xff0c;这几个工作宣告机器人真…

Golang--运算符

1、算术运算符 算术运算符&#xff1a; &#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%&#xff0c;&#xff0c;--&#xff0c;对数值类型的变量进行运算 package mainimport ("fmt" )func main() {//算术运算符// - * / % --//号在golang中表示正号&…

论文阅读:DynamicDet: A Unified Dynamic Architecture for Object Detection

论文地址&#xff1a;[2304.05552] DynamicDet: A Unified Dynamic Architecture for Object Detection 代码地址&#xff1a;GitHub - VDIGPKU/DynamicDet: [CVPR 2023] DynamicDet: A Unified Dynamic Architecture for Object Detection 概要 本文提出了一种名为 DynamicD…

Flutter 正在切换成 Monorepo 和支持 workspaces

其实关于 Monorepo 和 workspaces 相关内容在之前《Dart 3.5 发布&#xff0c;全新 Dart Roadmap Update》 和 《Flutter 之 ftcon24usa 大会&#xff0c;创始人分享 Flutter 十年发展史》 就有简单提到过&#xff0c;而目前来说刚好看到 flaux 这个新进展&#xff0c;所以就再…

expand,None索引,permute【pytorch】

torch.expand 输入必须是一个向量或等价形式&#xff0c;扩展的最后一个维度与输入大小一致 当输入形状为&#xff08;1&#xff0c;1,1,1,1&#xff0c;……&#xff0c;3&#xff09;_4时。 expand的最后一位输入向量的元素个数&#xff08;长度&#xff09;&#xff08;3&…

GEE | 对Landsat 8 影像进行缨帽变换

基于Landsat 8 影像的缨帽变换 var roi ee.FeatureCollection(users/yongweicao11/Dongguan2022); // Landsat 8 的缨帽变换系数矩阵var Landsat8TC ee.Array([[0.3029, 0.2786 , 0.4733, 0.5599, 0.5082, 0.1872],[-0.2941, -0.2435, -0.5424, 0.7276, 0.0713, -0.1608],[0.…

Obsidian的Vim插件设置配置全流程 -- 脱离鼠标拥抱Vim神教

Obsidian的Vim插件设置配置全流程 -- 脱离鼠标拥抱Vim神教 参考文章引言1. vim 及 vimrc 介绍2. 开启 Obsidian 内置的 Vim3. vimrc 插件的获取和安装4. vimrc 插件的设置5. vimrc 配置文件的设置附件 参考文章 vim 常见操作 Obsidian插件安装教程 引言 vim 很好用&#xff…

6.《双指针篇》---⑥和为S的两个数字(中等但简单)(牛客)

题目传送门 方法一&#xff1a;暴力解法。双循环 方法二&#xff1a;双指针&#xff08;推荐&#xff09; 1.定义一个顺序表&#xff0c;定义左右双指针 2.while循环。判断array[left] array[right] 的值。 3.若等于则将这两个值加入数组。并break 4.若大于则right-- 5.若小于…

LeetCode994. 腐烂的橘子(2024秋季每日一题 54)

在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中没有…

【51蛋骗鸡一个独立按键控制流水灯开关】2022-1-18

缘由一个独立按键控制流水灯开关-编程语言-CSDN问答 #include<reg52.h>//头文件 sbit k1P3^7;// void main() //主函数 {unsigned char sj0, ls0;unsigned int ys0;P00;/*P0255;*/while(1){if(!k1&&!sj){if(!ls){ls1;/*P00;*/}else ls0;while(!k1);}if(…

shodan(五)连接Mongodb数据库Jenkinsorg、net、查看waf命令

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人一律不承担一切后果 引言&#xff1a; 1.Shodan 是一个专门用于搜索连…

lvgl白屏问题(LCD长时间白屏)和优化lvgl

开机白屏时间过长 -- 这里我们不考虑是lvgl占的内存太大的问题&#xff0c;这里考虑的是为什么lcd屏幕启动后会有长时间的白屏。 首先我们要了解lvgl的相关操作&#xff0c;主要集中在一个函数中。只有程序执行到了这个函数&#xff0c;lvgl的屏幕才会显现出来 总结来说就是l…

公网ip和弹性公网ip有什么区别?哪个更好

公网ip和弹性公网ip有什么区别&#xff1f;公网IP和弹性公网IP都是用于互联网通信的IP地址&#xff0c;但它们在灵活性、成本和管理方式上有所不同。公网IP是直接分配给设备的静态IP地址&#xff0c;适用于需要固定外部访问的场景&#xff0c;但可能面临安全风险和设置复杂性。…

DevOps-课堂笔记

各种 aaS 类比于计算机网络的 OSI 参考模型&#xff0c;一个软件应用项目需要不同的支撑层&#xff0c;例如从下至上大概需要&#xff1a; 硬件层面的服务器针对硬件做弹性分配的虚拟化机制&#xff0c;例如虚拟机在虚拟化环境内运行的 OS支撑软件应用的中间件&#xff0c;例…

游戏想实习但定位不清的问题

国内的游戏大厂包括腾讯、网易、盛趣游戏、西山居、米哈游、莉莉丝、完美世界、游族、心动、叠纸、三七、TapTap、Tap4fun、字节跳动、哔哩哔哩、funplus、巨人、IGG、沐瞳等。而国外的游戏大厂则有育碧、EA、拳头、supercell、暴雪、R星、卡普空、任天堂、波兰蠢驴等。 一般来…

Dubbo使用Nacos作为注册中心

使用 Nacos 作为注册中心实现自动服务发现 本示例演示 Nacos 作为注册中心实现自动服务发现&#xff0c;示例基于 Spring Boot 应用展开&#xff0c;可在此查看 完整示例代码 1 基本配置 1.1 增加依赖 增加 dubbo、nacos-client 依赖&#xff1a; <dependencies><…