vue项目前端优化处理方案整理

news2024/9/20 18:44:41

vue项目前端优化处理

目录

vue项目前端优化处理

路由懒加载

 按需引入模块

外部资源引入,cdn加载

移除项目中所有的console.log()控制台信息数据打印

是否在构建生产包时生成sourcdeMap 

上传图片文件压缩

开启gizp压缩

前端页面代码优化 


路由懒加载

路由懒加载其实很简单,大家都会想到,实现的方式推荐有两种用法:

1.在vue的路由配置文件时加上*webpackChunkName*,在引入组件时候,用chunkName来命名打包js文件的输出的名称 。

router.js文件路由引入:

const routes = [
  {
    path: '/',
    name: '',
    component: () => import(/* webpackChunkName: "login" */ '../components/login'),
    hidden: true,
    meta: {
        requireAuth: false,
        keepAlive: false
    },
  }, 
  {
    path: '/login',
    name: '登录',
    component: () => import(/* webpackChunkName: "login" */ '../components/login'),
    hidden: true,
    meta: {
      requireAuth: false,
      keepAlive: false
    }
  },
]

打包后的文件名称显示效果:

打包之后命名的login.js已显示

2.不加*webpackChunkName*   ,打包之后会显示chunk-后面的内容可通过配置自定义

router.js文件路由引入:

const routes = [
  {
    path: '/',
    name: '',
    component: resolve => require(['@/components/loginCode'], resolve),
    hidden: true,
    meta: {
        requireAuth: false,
        keepAlive: false
    },
  }, 
  {
    path: '/login',
    name: '登录',
    component: resolve => require(['@/components/login'], resolve),
    hidden: true,
    meta: {
      requireAuth: false,
      keepAlive: false
    }
  },
]

打包后显示效果:

 

 按需引入模块

vue使用vant-ui框架 项目示例:

新建vant.js文件:

1.按需引入vant ui组件模块,需要哪一个组件就引入哪一个(推荐

import Vue from 'vue'
import {
...
    Form,
    Field,
    Button,
    Toast,
    Icon,
    CellGroup,
    Cell,
    Tab,
    Tabs,
    Col,
    Row,
    NavBar,
    RadioGroup,
    Radio,
    ....
    
} from "vant";
import { Image as VanImage } from 'vant';
Vue.use(Toast).use(Form).use(Field).use(Button).use(Icon).use(CellGroup).use(Tab).use(Tabs).use(Col).use(Row).use(VanImage).use(NavBar).use(RadioGroup).use(Radio)
    .use(Checkbox).use(CheckboxGroup).use(NoticeBar).use(Uploader)
    .use(Swipe).use(SwipeItem).use(Lazyload).use(Tabbar).use(TabbarItem).use(Grid)
    .use(GridItem).use(Picker).use(Popup).use(Tag).use(Cell).use(Search).use(List)
    .use(PullRefresh).use(DatetimePicker).use(Panel).use(Rate).use(Cell).use(CellGroup)

 在main.js中导入vant.js

// 引入vant.js(共用的vant组件)
import './utils/vant.js'

2.直接在main.js 引入vant所有组件 

import Vue from 'vue';
import Vant from 'vant';
import 'vant/lib/index.css';

Vue.use(Vant);

如果要让vant生效,需要配置babel.config.js文件:

module.exports = {
	presets: ["@vue/cli-plugin-babel/preset"],
	plugins: [
		['import', {
			libraryName: 'vant',
			libraryDirectory: 'es',
			style: true
		}, 'vant']

	]
};

外部资源引入,cdn加载

可以通过以下免费 CDN 服务来使用 Vant:

  • jsdelivr
  • cdnjs
  • unpkg

注意:免费 CDN 一般用于制作原型或个人小型项目,不推荐在企业生产环境中使用免费 CDN。

对于企业开发者,建议使用以下方式:

  • 通过 npm 引入,并通过构建工具进行打包
  • 下载对应文件,并托管在你自己的服务器或 CDN 上

1.引入vant资源文件

<!-- 引入样式文件 -->
<link
  rel="stylesheet"
  href="https://unpkg.com/vant@2.12/lib/index.css"
/>

<!-- 引入 Vue 和 Vant 的 JS 文件 -->
<script src="https://unpkg.com/vue@2.6/dist/vue.min.js"></script>
<script src="https://unpkg.com/vant@2.12/lib/vant.min.js"></script>

 2.个人推荐使用,把下载好的需要使用的js库、css样式表,下载到本地,放在项目目录中,可以放在public中,或者其他新建文件中;或者放到服务器上,前端在index.html页面使用链接即可。

这里这样使用可以避免使用CDN引入资源不可定因素,比如网络原因........

<!-- 本地 -->
<script src="./static/vue.min.js"></script>
<script src="./static/vue-router.min.js"></script>
<script src="./static/vuex.min.js"></script>
<script src="./static/axios.min.js"></script>

 

 4.图片采用精灵图、雪碧图,减少图片的引入

 CSS Sprites通常被称为css精灵图,在国内也被意译为css图片整合和css贴图定位,也有人称他为雪碧图。

移除项目中所有的console.log()控制台信息数据打印

 在babel.config.js中配置:如果是生产环境,则自动清理掉打印的日志,但保留error 与 warn

插件babel-plugin-transform-remove-console

安装:npm install babel-plugin-transform-remove-console --save-dev

当前我在项目使用的是  ^6.9.4版本

 

// 所有生产环境
const prodPlugin = []
if (process.env.NODE_ENV === 'production') {
// 如果是生产环境,则自动清理掉打印的日志,但保留error 与 warn
  prodPlugin.push([
    'transform-remove-console',
    {
      // 保留 console.error 与 console.warn
      exclude: ['error', 'warn']
    }
  ])
}
module.exports = {
	presets: ["@vue/cli-plugin-babel/preset"],
	plugins: [
		...prodPlugin
	]
};

是否在构建生产包时生成sourcdeMap 

 在vue.config.js关闭

 

移除prefetch插件  

module.exports = {
    ......
    chainWebpack:config => {
        // console.log(config,'chainWebpack');
        // 移除prefetch插件
        config.plugins.delete("prefetch");
        config.plugins.delete('preload');
    }
    .......
}

 

上传图片文件压缩

这里可以采用自己封装的图片上传压缩方法,也可以使用第三方提供的模块来实现

独立封装图片上传压缩方法,代码较多,请仔细查看:

1.新建 uploadImg.js 将base64转换为file文件

const dataURLtoFile = (dataurl, filename) => { // 将base64转换为file文件
    let arr = dataurl.split(',')
    let mime = arr[0].match(/:(.*?);/)[1]
    let bstr = atob(arr[1])
    let n = bstr.length
    let u8arr = new Uint8Array(n)
    while (n--) {
        u8arr[n] = bstr.charCodeAt(n)
    }
    return new File([u8arr], filename, { type: mime })
};

2.利用canvas来实现,上传后占用内存资源更少

const imgZip = (file) => {
    let imgZipStatus = new Promise((resolve, reject) => {
        let canvas = document.createElement("canvas"); // 创建Canvas对象(画布)
        let context = canvas.getContext("2d");
        let img = new Image();
        img.src = file.content; // 指定图片的DataURL(图片的base64编码数据)
        var Orientation = '';
        img.onload = () => {
            
           canvas.width = 400;
           canvas.height = 300;
           canvas.width = img.width;
           canvas.height = img.height;
           context.drawImage(img, 0, 0, canvas.width, canvas.height);
            
           file.content = canvas.toDataURL(file.file.type, 0.5); // 0.92为默认压缩质量 
            
           let files = dataURLtoFile(file.content, file.file.name);
           resolve(files)
        }
    })
    return imgZipStatus;
};

 3.main,js引入

// 引入imgUpload方法
import * as imgUpload from "./utils/imgUpload"
Vue.prototype.$imgUpload = imgUpload;

 9.第三方js库的优化

externals: {
    vue: 'Vue',
    vuex: 'Vuex',
    'vue-router': 'VueRouter',
    axios: 'axios',
    'element-ui': 'ELEMENT'
}

 

 不必通过import引入,Vue.use去注册,就能够使用

开启gizp压缩

1.引入compression-webpack-plugin 

npm i compression-webpack-plugin -D

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

2.在 vue.config.js配置

module.exports = {
    ......
    configureWebpack: config => {
        if (isProduction) {
            config.plugins.push(new CompressionWebpackPlugin({
                algorithm: 'gzip',
                test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
                threshold: 10240,
                minRatio: 0.8
            }))
        }
        
    },
    .....
}

3.效果显示:

 打包后文件显示,文件减小很多:

 

前端页面代码优化 

  • 注意使用v-if和v-show
  • 注意使用watch和computed
  • 使用v-for必须添加key, 最好为唯一id, 避免使用index, 且在同一个标签上,v-for不要和v-if同时使用,采用template模板语法
  • 定时器的销毁。可以在beforeDestroy或者destroyed生命周期内执行销毁事件;在使用定时器事件的位置记得清除定时器

⭐️⭐️⭐️  作者:船长在船上
🚩🚩🚩  主页:来访地址船长在船上的博客
🔨🔨🔨  简介:CSDN前端领域博客专家,CSDN前端领域优质创作者,资深前端开发工程师,专注web前端领域开发,在CSDN分享工作中遇到的问题以及问题解决方法和对项目开发的实际案例总结以及新技术的认识。

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

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

相关文章

【深度学习】特征图的上采样(nn.Upsample)和转置卷积(nn.ConvTranspose2d) | pytorch

文章目录前言一、nn.Upsample 上采样二、nn.ConvTranspose2d 转置卷积前言 这次就不废话了&#xff0c;我想赶在10点前回去洗头&#xff08;现在9.17&#xff0c;还差一篇文章&#xff09; 一、nn.Upsample 上采样 该函数有四个参数&#xff1a; 参数的介绍如下&#xff1a…

工厂模式(Factory Pattern) 与抽象工厂模式(Abstract Factory Pattern)

工厂模式&#xff08;Factory Pattern) 与抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 工厂模式属于构造型模式&#xff0c;是项目中最常用到的一种设计模式。它的主要作用是提供一种简单的创建对象的方式&#xff0c;使用者无需知道创建实例的细节以及需要…

重启虚拟机启动Docker常见问题

文章目录重启虚拟机启动Docker常见问题一、Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?二、admin is not in the sudoers file. This incident will be reported.&#xff08;没有这个问题请自觉跳过&#xff09;三、…

华清远见11.17

1.在用户空间中有个字符数组&#xff0c;要求在内核空间打印&#xff0c;用dmesg查看。&#xff08;ioctl实现&#xff09; zy.h&#xff0c;封装一个发送用的命令码 #ifndef __LED_H__ #define __LED_H__ #define UACCESS_BUF _IOW(a,1,char [128]) #endif zy.c 申请并自动创…

2022 开源之夏|EMQ 三大开源项目开发圆满收官

今年暑假&#xff0c;EMQ 携手开源之夏&#xff0c;与高校学生开展了一场精彩纷呈的开源之旅。开源之夏&#xff08;OSPP&#xff09;是由中科院软件所「开源软件供应链点亮计划」发起的、面向高校学生的暑期开源活动&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&a…

CE-Net: Context Encoder Network for 2D MedicalImage Segmentation

Title:用于二维医学图像分割的上下文编码器网络 摘要&#xff1a;在医学图像分割领域中&#xff0c;基于UNet已经成为主流的应用框架。但是在UNet结构中连续的池化和跨步卷积操作会导致一些空间信息的丢失。在本文中提出了一个上下文编码器网络&#xff08;简称为CE-Net&#…

数据分析师的Windows装机必备软件

文章目录1. Python安装包列表2. Office 3653. Visual Studio Code4. Git5. 向日葵6. 聊天软件7. OneDrive8. iCloud9. 网易邮箱大师10. 搜狗输入法11. 阿里云盘对于数据分析师,装机是再经常不过的一件事情,但是每次装机都要想装什么好,找来找去,故列出来供大家参考. 当然, 系统…

CentOS7自有服务和软件包

文章目录什么是服务管理服务的命令&#xff1a;systemctl列出服务服务启停开机自动启动服务服务状态软件包RPM查询安装了什么软件卸载某个软件安装某个软件查询文件所属的包名查询软件安装后&#xff0c;生成了哪些文件YUM命令epel-release什么是服务 什么是程序&#xff08;C…

最优化——凸优化概述

引言 这是中科大最优化理论的笔记&#xff0c;中科大凌青老师的凸优化课程&#xff0c;详尽易懂&#xff0c;基础扎实。不论是初学者还是从业多年的人&#xff0c;都值得系统地好好学一遍。 本文主要介绍什么是凸优化&#xff0c;通过几个例子来阐述什么是凸优化问题。让大家…

3年测试经验,面试27k自动化测试岗被diss,想给进阶自动化的人提个醒...

毕业后一直从事功能测试的工作&#xff0c;时间久了就没有一点想法&#xff0c;天天都是点点点&#xff0c;也没有一点提升&#xff0c;看着身边一个个的人都忙得不可开交&#xff0c;打听之后知道他们都是在技术上忙&#xff0c;而不像我&#xff0c;在杂事上忙&#xff0c;特…

vue 使用screenfull 实现全屏展示,全局水印实现, 以及全屏放大后部分组件无法使用,水印无法全屏显示问题的解决

需求&#xff1a;1. web项目中看板页面需要单独全屏显示 2. 项目全局增加水印&#xff0c;水印文字为当前用户登录姓名&#xff0c;登录页不显示水印 出现问题描述 单页面进行全屏显示&#xff0c;下拉&#xff0c;时间选择器&#xff0c;抽屉等组件被 全屏覆盖到下一层&…

MyBatis入门基础

目录 1.什么是MyBatis 2.第一个MyBatis查询 2.1 准备工作 2.2 实际操作 2.2.1 定义接口 2.2.2 创建XML实现上述接口 2.3 单元测试 2.3.1 单元测试的优势 2.3.2 创建并使用单元测试 2.3.3 有关断言 3.增删改的基本操作 3.1 插入操作 特殊的添加&#xff1a;返…

【PyTorch】Torchvision

文章目录三、Torchvision1、Dataset2、DataLoader2.1 test_data2.2 test_loader2.3 drop_last2.4 shuffle三、Torchvision PyTorch官网&#xff1a;https://pytorch.org 1、Dataset 数据集描述&#xff1a;https://www.cs.toronto.edu/~kriz/cifar.html 数据集使用说明&#…

SpringCloud案例day05

SpringCloud Gateway网关 案例1&#xff1a;环境搭建 可以复制 Service-A9001 改成Gateway-C9009 》1&#xff1a;创建工程导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artif…

汽车全景视频制作让企业营销传播无界长久

全景视频制作 全景VR视频&#xff0c;顾名思义就是能够使我们看到拍摄点周围360景致的视频。传统视频拍摄受限于镜头视角&#xff0c;所以我们只能看到镜头前方180内的景物。而全景VR视频能够看到周围360以及上下180各个角度的一切景物&#xff0c;用户能够更加多方位的观赏视频…

可观测性-Event-指标事件采样策略总结

文章目录前言采样的几种策略简单随机采样周期性完整采样基于条件的采样前言 在默认情况下&#xff0c;系统会采集所有追踪&#xff08;Tracing&#xff09;的数据。但是如果系统比较复杂&#xff0c;采集的端点比较多的时候&#xff0c;对存储压力比较大&#xff0c;这个时候我…

Educational Codeforces Round 135 (Rated for Div. 2)

A:思维 题意&#xff1a;箱子里有N个颜色的球&#xff08;用下标代表不同的颜色&#xff09;&#xff0c;每个颜色的球对应一定的数量&#xff0c;你会进行多次拿球的操作&#xff0c;当箱子里的球颜色一致时&#xff0c;你就不能再拿球了&#xff0c;问最后颜色一致的球是哪个…

免疫抑制作用的转录抑制分子

科研人员发现&#xff1a;社交失败导致了小鼠焦虑行为&#xff0c;进而抑制了化疗药物的治疗过程&#xff0c;加速了肿瘤的发展。在正常小鼠中&#xff0c;人为给予外源性糖皮质激素会使得 Tsc22d3(一个具有很强免疫抑制作用的转录抑制分子)在肿瘤浸润树突细胞(TIDC)的表达上调…

Q3营收同比翻三倍,踩猛“油门”零跑必将领跑?

近日&#xff0c;零跑汽车公布三季度财报。从财报成绩来看&#xff0c;有喜有忧。喜的是销量营收同比环比均出现大幅度增长&#xff0c;忧的是亏损同比扩大86.11%。 营收同比猛增398.5%&#xff0c;销量能否穿越迷雾&#xff1f; 详细来看&#xff0c;三季度零跑汽车销量3.56万…

【附源码】计算机毕业设计JAVA旅行指南网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…