Vue 项目上线优化

上线项目的优化

优化上线项目,首先在上线打包时我们通过babel插件将console清除,当然对项目打包后的体积的影响是微乎其微,对项目的入口文件的改善也是很有必要的,因为在开发阶段和上线如果我们使用的是同一入口文件,要知道我们的项目真正上线运行是正规的接口,而我们开发阶段可能是测试接口为返回假数据,使用同一接口我们需要频繁更改上线和开发接口,所以我们通过配置vue.config.js文件使上线和开发阶段我们使用不同的接口文件,省去了更改接口等不必要的麻烦,考虑到打包时包的体积过大导致加载速度的延迟,我们通过CDN和懒加载两种方式进行改善,前者就将我们的项目上线后还需要引用的大量依赖包,转换为CDN节点的引用,从而改善了包的体积,但是加载还是很慢,所以使用后者路由懒加载,将模块进行拆分,每个个体的体积很小,众多模块有序加载,用到哪些模块就优先加载哪些,最后在通过服务器采用一定的压缩算法,对文件体积进行压缩后,再发送给客户端,进而有效的改善了包的体积,以及加载速度.

在使用 npm run build 打包时 移除console

初衷:

随着项目功能的不断完善 代码的累积 项目中的庞大代码数量 造成我们打包时的长时间等待 尤其是我们在开发阶段留下的过多的测试代码 例如最常见不过的console 消耗我们的时间 并且占有一定的内存

优化:

使用 babel中 的一个插件,因为webpack 打包时会使用 babel 进行代码降级,所以babel 插件可以在打包过程中将 console 移除

  1. 安装插件:

npm install babel-plugin-transform-remove-console --save-dev

  1. 配置babel.config文件
const prodPlugins = []
if (process.env.NODE_ENV === 'production') {prodPlugins.push('transform-remove-console')
}
module.exports = {presets: ['@vue/cli-plugin-babel/preset'],plugins: ['transform-remove-console']
}

这样配置后 再次打包 包中就没有console了
问题:当运行npm run serve时 也会删除console 但是开发阶段我们需要
改善babel.config文件:
在这里插入图片描述

现在 只有在打包时会删除console

改善入口文件

初衷:

项目中的默认入口文件时main.js文件 不管是打包 还是开发阶段使用的都是这一文件
在卡法阶段我们可能调用一端口返回假数据 为调试我们的代码 但是在上线后我们需要用正式接口 可能不止一个 但是我们左右手动更改较为麻烦 且容易出错
在这里插入图片描述

优化:

  1. 创建两个入口文件:
  • 一个用于开发环境的打包 dev_env.js
  • 一个用于项目上线的打包 prod_env.js
  1. 配置打包的入口文件
module.exports={chainWebpack:config=>{config.when(process.env.NODE_ENV === 'production',config=>{config.entry('app').clear().add('./src/prod_env.js')})config.when(process.env.NODE_ENV === 'development',config=>{config.entry('app').clear().add('./src/dev_env.js')})}
}

说明

  • 开发时,使用 npm run serve 命令,NODE_ENV 的值就是 developmnent ,所以会将 dev.env.js 作为入口文件
  • 部署时,使用 npm run build 命令,NODE_ENV 的值就是 production,所以会将 prod_evn.js 作为入口文件

改善打包时包的体积大小

初衷:

通常情况下 项目中通过import方式引入的包 会将整个包下载到客户端 这可能会导致程序的加载速度非常慢

优化

解决方案一:CDN
将线上环境中用到一些依赖,比如 vue、vueRouter 、axios 等,使用 cdn 节点的方式引用,而不是打到包里去

此项目中 将项目上线后仍然需要用到的一些依赖包从prod_evn.js文件中删除 然后在 public/index.html 中使用 cdn 节点引用

  • 首先修改我们上线时的入口文件
    在这里插入图片描述
  • 然后在 public/index.html 中加入如下引用
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/quill@1.3.7/dist/quill.core.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/quill@1.3.7/dist/quill.snow.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/quill@1.3.7/dist/quill.bubble.css" />
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/element-ui@2.13.1/lib/theme-chalk/index.css">
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/quill@1.3.7/dist/quill.min.js"></script>
<script type="text/javascript"src="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.6/dist/vue-quill-editor.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
<script src="https://cdn.bootcss.com/echarts/4.7.0/echarts.js"></script>
<script src="https://cdn.jsdelivr.net/npm/element-ui@2.13.1/lib/index.js"></script>
  • 最后在 vue.config.js 中添加配置
    在这里插入图片描述

打包后 包的体积明显减小

路由懒加载

初衷:

在上面 通过babel 插件 将console删除 通过CDN节点 等 减小包的体积 但是包还是过大 影响加载速度 以当前项目为例,首先展示的登录页,事实上,此时没有必要加载其他的组件,如商品、类别、角色用户等组件的代码
因为代码被打包到一个文件中,导致下载这个文件太慢

优化:

切分之后,并不是浏览器访问某个路由,才去下载对应的模块,仍然在首次访问程序时,下载所有模块,只不过每个模块分的很小,加载首页时需要的模块能够更快的下载下来,所以能够更快的显示

  1. 安装插件

npm install --save-dev @babel/plugin-syntax-dynamic-import

  1. 修改babel配置文件
    在这里插入图片描述

  2. 修改 router/index.js 中的路由引用

// // 引入login.vue组件
// import Login from '../components/login.vue'
// // 引入home.vue组件
// import Home from '../components/home.vue'
// import Welcome from '../components/welcome.vue'
// import Users from '../components/user/users.vue'
// import Rights from '../components/rights/rights.vue'
// import Role from '../components/rights/role.vue'
// import Category from '../components/goods/Category.vue'
// import Params from '../components/goods/Params.vue'
// import GoodsList from '../components/goods/GoodsList.vue'
// import GoodsAdd from '../components/goods/GoodsAdd.vue'
// import Orders from '../components/order/Orders.vue'
// import Report from '../components/report/Report.vue'
// import GoodsEdite from '../components/goods/GoodsEdite.vue'
const Login = () => import(/* webpackChunkName: "group-login" */ '../components/login.vue')
const Home = () => import(/* webpackChunkName: "group-common" */ '../components/home.vue')
const Welcome = () => import(/* webpackChunkName: "group-common" */ '../components/welcome.vue')
const Users = () => import(/* webpackChunkName: "group-common" */ '../components/user/users.vue')
const Rights = () => import(/* webpackChunkName: "group-rights" */ '../components/rights/rights.vue')
const Role = () => import(/* webpackChunkName: "group-rights" */ '../components/rights/role.vue')
const Category = () => import(/* webpackChunkName: "group-goods" */ '../components/goods/Category.vue')
const Params = () => import(/* webpackChunkName: "group-goods" */ '../components/goods/Params.vue')
const GoodsList = () => import(/* webpackChunkName: "group-goods" */ '../components/goods/GoodsList.vue')
const GoodsAdd = () => import(/* webpackChunkName: "group-goods" */ '../components/goods/GoodsAdd.vue')
const GoodsEdite = () => import(/* webpackChunkName: "group-goods" */ '../components/goods/GoodsEdite.vue')
const Orders = () => import(/* webpackChunkName: "group-rrders" */ '../components/order/Orders.vue')
const Report = () => import(/* webpackChunkName: "group-Orders" */ '../components/report/Report.vue')

重新打包效果可见

router/index.html 主页内容的形成

初衷:

在上面我们使用cdn节点进行优化时。在index.html中 添加大量cdn节点的引入
但是在开发阶段的打包中我们是不需要这种方式的 但是手动删除或者添加这些cdn节点实在麻烦

优化:

我们希望的是,部署的时候 index.html 中使用这些 CDN 节点的依赖,开发阶段,不希望 index.html 中的这些引用存在,而是继续使用本地的包

这就需要在 index.html 中根据当前的打包环境是开发还是部署,动态的决定 index.html 中是否显示这些引用

  • 在vue.config.js中添加配置
    在这里插入图片描述

  • 修改public/index.html
    在这里插入图片描述

这样 首页中的cdn引入代码 就不会冲突

服务器文件压缩

初衷:

客户端请求某个文件时,服务器端采用一定的压缩算法,对文件体积进行压缩后,再发送给客户端
对于 node.js 来说,可以使用 compression 中间件

优化 :

  1. 项目打包后将dist文件夹 剪切到服务器端
  2. compression 压缩文件
  • 安装

npm install compression

  • app.js 中引入并注册中间件
    在这里插入图片描述

项目相比开始 快了很多

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

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

相关文章

Python并发编程—进程

多任务编程 1.意义&#xff1a; 充分利用计算机多核资源&#xff0c;提高程序的运行效率。 2.实现方案 &#xff1a;多进程 &#xff0c; 多线程 3.并行与并发 并发 &#xff1a; 同时处理多个任务&#xff0c;内核在任务间不断的切换达到好像多个任务被同时执行的效果&#xf…

Vue 脚手架中的.eslintrc.js代码规范 的解决

在我们使用Vue脚手架 创建项目时 尤其是团队共同开发项目时 会按照一个共同的代码规范来编程 创建Vue脚手架中有一个.eslintrc.js格式 但是在编程中我们通常会使用 shiftaltf 进行代码格式化 但是由于格式化后的代码 与Vue中的.eslintrc规范不协调 尤其是 “” &#xff1b; 以…

前端面试---Vue部分考点梳理

一. Vue的使用 1. Vue的基本使用 指令 插值 插值 表达式 指令 动态属性 v-html 会有XSS风险 会覆盖子组件 computed 和 watch computed 有缓存 data不变则不会重新计算watch 如何深度监听watch 监听引用类型时 拿不到oldVal v-for v-for 和 v-if 不能同时使用:key的值尽量…

.net core实现跨域

什么是跨域在前面已经讲解过了&#xff0c;这里便不再讲解&#xff0c;直接上代码。 一、后台API接口 用.net core创建一个Web API项目负责给前端界面提供数据。 二、前端界面 建立两个MVC项目&#xff0c;模拟不同的ip&#xff0c;在view里面添加按钮调用WEB API提供的接口进行…

TCP/IP简介

TCP/IP简介 OSI的“实现”&#xff1a;TCP/IP参考模型 并不完全符合OSI的七层参考模型&#xff0c;但我们可以理解为OSI的一种实现 TCP/IP协议简述 在很多情况下&#xff0c;它只是利用IP协议进行通信时&#xff0c;所必须用到的协议群的统称&#xff0c;具体来说&#xff0c;I…

Spring-Cloud 学习笔记-(4)负载均衡器Ribbon

目录 Spring-Cloud 学习笔记-&#xff08;4&#xff09;负载均衡器Ribbon1、前言2、什么是负载均衡2.1、问题分析2.2、什么是Ribbon3、快速入门3.1、实现方式一3.1.1、修改代码3.2、实现方式二3.2.1、启动类3.2.2、调用代码3.2.3、测试3.2.4、实现原理3.2.5、断点调式3.3、修改…

‘仿微信发表朋友圈’项目中登录功能的业务逻辑

登录功能 手机号验证码都通过后端验证后 返回用户数据 登陆成功 成功后 调用store中的setUser方法 store中的setUser方法 将后端返回的用户信息存储到localStorage中 同时登录成功后服务器会将token自动存入我们的cookie中 有过期时间 在我们请求需要登录的接口时将cookie中的…

kubernetes--配置文件

转载于:https://www.cnblogs.com/caiciadeliliang/p/10993388.html

微信动态中的背景图更换

初衷&#xff1a; 图一中的红框中的部分&#xff0c;作为用户自定义的背景图&#xff0c;如果用户没有上传也会为其自动设置一张背景图&#xff0c;当用户点击时则会出现图二中的选项 &#xff0c;点击取消则选项消失&#xff0c;点击从相册选择则会跳转本机的相册&#xff0c…

大数据学习——akka自定义RPC

实现 package cn.itcast.akkaimport akka.actor.{Actor, ActorSystem, Props} import akka.actor.Actor.Receive import com.typesafe.config.ConfigFactoryimport scala.collection.mutableimport scala.concurrent.duration._class Master(val host: String, val port: Int) …

从Client应用场景介绍IdentityServer4(一)

从Client应用场景介绍IdentityServer4&#xff08;一&#xff09; 原文:从Client应用场景介绍IdentityServer4&#xff08;一&#xff09;一、背景 IdentityServer4的介绍将不再叙述&#xff0c;百度下可以找到&#xff0c;且官网的快速入门例子也有翻译的版本。这里主要从Clie…

开发常用代码笔记

Vue 使用moment插件对时间进行格式化&#xff08;全局设置&#xff09; 下载插件 npm install moment --save 在main.js中引入插件 import moment from ‘moment’ 在main.js中定义全局过滤器 Vue.filter(dataFilter,function (dataStr,patten YYYY-MM-DD HH:mm:ss) {retur…

微信小程序——账号及开发工具

1. 注册微信小程序账号 点击我进入微信公众平台 进入后点击立即注册 注册成功且登录后进入小程序管理后台 2. 安装开发者工具 点击进入开发文档 进入安装开发工具&#xff08;稳定版本&#xff09; 一路默认下一步进行安装 3. 开发者工具的使用 使用注册微信小程序的微信号…

CSS注意的地方

content-box和border-box的区别 2018年02月27日 22:20:16 sulingliang 阅读数&#xff1a;8011盒子模型 盒子宽度&#xff1a;paddingbordercontent-width 盒子高度&#xff1a;paddingbordercontent-height 如图所示 盒子模型content-box 说明&#xff1a;在内容宽度和高度之…

机器学习笔记(6) 线性回归

先从最简单的例子开始,假设我们有一组样本(如下图的一个个黑色的圆点),只有一个特征,如下图,横轴是特征值,纵轴是label。比如横轴是房屋面积,纵轴是房屋价格. 现在我们要做什么呢&#xff1f;我们试图找到一条直线yaxb,可以尽量好的拟合这些点. 你可能要问了,为啥是直线,不是曲…

仿微信朋友圈项目梳理

项目功能简介&#xff1a; 用户通过手机号验证码进行登录和注册 可以浏览动态列表中的所有动态 登录成功后用户可以发表自己的动态 也可以对自己认可欣赏的动态进行点赞和评论 也可以通过动态结识志同道合的朋友 进行聊天和探讨 前端&#xff1a;采用Vue框架搭建 weui进行页面…

echarts鼠标事件以及自定义数据获取

事件添加方法&#xff1a; 对应官网位置&#xff1a;https://www.echartsjs.com/api.html#events 鼠标事件包括 click、dblclick、mousedown、mousemove、mouseup、mouseover、mouseout、globalout、contextmenu。 myChart.on(click, function (params) {console.log(params); …

[数学]点、线、面分割问题

平面分割问题 p条直线相交于一点时&#xff0c;分割的图形有 2*(n-1) 个&#xff0c;此时再加一条直线&#xff0c;在 2*(n-1) 的基础上再加 n条&#xff0c;此时为2*n n条曲线&#xff0c;其中有m条相交于一点&#xff0c;每两个曲线都交于两点 平面上有n条直线&#xff0c;且…

移动开发

1.移动端基础 1.1 浏览器现状 PC端浏览器 360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器&#xff08;停止服务&#xff09;、搜狗浏览器、IE浏览器 移动端浏览器 UC、QQ浏览器、欧朋浏览器、百度手机浏览器、360、搜狗、猎豹、谷歌等其他手机自带的浏览器 国…

Django之路由系统

Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。 你就是以这种方式告诉Django&#xff0c;对于这个URL调用这段代码&#xff0c;对于那个URL调用那段代码。 URLconf配置…