一.项目优化策略

1.生成打包报告

2.第三方库启用CDN

3.Element-ui组件按需加载

4.首页内容定制

5.路由懒加载

1.生成打包报告

1.1通过vue-cli的UI面板直接查看
1.2通过命令行参数生成报告
// 生成report.html分析报告
vue-cli-service build --report

2.修改webpack配置

https://cli.vuejs.org/zh/config/#vue-config-js

如果有修改webpack默认配置的需求,可以在项目根目录创建vue.config.js配置文件

2.1为开发模式与发布模式指定不同的打包入口
module.exports = {
chainWebpack: config => {
// 指定发布模式打包入口
config.when(process.env.NODE_ENV === 'production', config => {
config
.entry('app')
.clear()
.add('./src/main-prod.js')
}) // 指定开发模式打包入口
config.when(process.env.NODE_ENV === 'development', config => {
config
.entry('app')
.clear()
.add('./src/main-dev.js')
})
}
}
2.2通过externals加载外部CDN资源

默认情况下,通过import导入的第三方依赖包最终会被打包合并到一个文件中,导致打包后单文件体积过大。所以我们需要通过webpack的externals节点,配置加载外部CDN资源,凡是声明在externals中的第三方依赖包都不会被打包。

  1. 配置vue.config.js文件

    module.exports = {
    chainWebpack: config => {
    // 指定发布模式打包入口
    config.when(process.env.NODE_ENV === 'production', config => {
    config
    .entry('app')
    .clear()
    .add('./src/main-prod.js') // 使用externals加载外部CDN资源
    config.set('externals', {
    vue: 'Vue',
    'vue-router': 'VueRouter',
    axios: 'axios',
    lodash: '_',
    echarts: 'echarts',
    nprogress: 'NProgress',
    'vue-quill-editor': 'VueQuillEditor'
    })
    }) // 指定开发模式打包入口
    config.when(process.env.NODE_ENV === 'development', config => {
    config
    .entry('app')
    .clear()
    .add('./src/main-dev.js')
    })
    }
    }
  2. 在public/index.html文件头部,添加第三方依赖包的js和css样式的CDN引用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNWKI4Ry-1604394495531)(https://s1.ax1x.com/2020/11/03/Bsfrcj.png)]

3.通过CDN加载element-ui的组件

  1. 在main-prod.js中,注释掉element-ui按需加载的代码

    // import './plugins/element.js'
  2. 在index.html头部,通过CDN加载element-ui的js和css

4.首页内容定制(看需求决定用不用)

不同打包环境下,首页内容页可能不同,可以通过插件进行配置

  1. 配置vue.config.js文件

    module.exports = {
    chainWebpack: config => {
    // 指定发布模式打包入口
    config.when(process.env.NODE_ENV === 'production', config => {
    config
    .entry('app')
    .clear()
    .add('./src/main-prod.js') // 使用externals加载外部CDN资源
    config.set('externals', {
    vue: 'Vue',
    'vue-router': 'VueRouter',
    axios: 'axios',
    lodash: '_',
    echarts: 'echarts',
    nprogress: 'NProgress',
    'vue-quill-editor': 'VueQuillEditor'
    }) config.plugin('html').tap(args => {
    args[0].isProd = true
    return args
    })
    }) // 指定开发模式打包入口
    config.when(process.env.NODE_ENV === 'development', config => {
    config
    .entry('app')
    .clear()
    .add('./src/main-dev.js') config.plugin('html').tap(args => {
    args[0].isProd = false
    return args
    })
    })
    }
    }
  2. 在public/index.html中,根据isProd的值,决定如何渲染页面结构

    <!- 按需渲染页面标题 -->
    <title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>标题</title> <!- 按需加载外部CDN -->
    <% if(htmlWebpackPlugin.options.isProd){ %>
    <!- 通过externals加载的外部CDN资源 -->
    <% } %>

5.路由懒加载

当打包构建项目时,JavaScriot包会变得非常大,影响页面加载。所以我们将不同路由对应的组件分割成不同的代码块,当路由被访问时才加载对应组件。

  1. 安装插件包

    开发依赖 @babel/plugin-syntax-dynamic-import
  2. 在babel.config.js中的plugins声明该插件

    '@babel/plugin-syntax-dynamic-import'
  3. 将路由改为按需加载的形式

    const Foo = () => import(/* webpackChunkName: "grounp-foo" */ './Foo.vue')
    const Bar = () => import(/* webpackChunkName: "grounp-foo" */ './Bar.vue')
    const Baz = () => import(/* webpackChunkName: "grounp-boo" */ './Baz.vue')

二.项目上线配置

1.通过node创建web服务器

2.开启gzip配置

3.配置https服务

4.使用pm2管理应用

1.通过node创建web服务器

创建node项目,并安装express,通过express快速创建web服务器,将vue打包生成的dist文件夹托管为静态资源即可。

npm init -y
npm i express -S
// 新建app.js
const express = require('express')
const app = express() app.use(express.static('./dist')) app.listen(80, () => {
console.log('server running at http://127.0.0.1')
})

2.开启gzip配置

使用gzip可以减小文件体积,传输速度更快。

npm install compression -D
const compression = require('compression')
app.use(compression())
const express = require('express')
const compression = require('compression')
const app = express() // 一定要把这一行代码,写到 静态资源托管之前
app.use(compression())
app.use(express.static('./dist')) app.listen(80, () => {
console.log('server running at http://127.0.0.1')
})

3.配置HTTPS服务(一般后端去做,了解即可)

传统的http都是明文,不安全,所以使用https进行加密处理,防止数据窃取

1. 申请SSL证书
2. 证书导入
const https = require('https')
const fs = require('fs')
const options = {
cert: fs.readFileSync('./full_chain.pem'),
key: fs.readFileSync('./private.key')
}
https.createServer(options, app).listen(443)
const express = require('express')
const compression = require('compression')
const https = require('https')
const fs = require('fs')
const app = express() const options = {
cert: fs.readFileSync('./full_chain.pem'),
key: fs.readFileSync('./private.key')
} // 一定要把这一行代码,写到 静态资源托管之前
app.use(compression())
app.use(express.static('./dist')) // http服务
// app.listen(80, () => {
// console.log('server running at http://127.0.0.1')
// }) // https服务
https.createServer(options, app).listen(443)

4.使用pm2管理应用

终端窗口使用node开启服务后,不能关闭。所以使用pm2管理应用,解放终端窗口。

pm2使用:

启动项目:pm2 start脚本 --name自定义名称

查看运行项目:pm2 ls

重启项目:pm2 restart 自定义名称

停止项目:pm2 stop 自定义名称

删除项目:pm2 delete 自定义名称

npm i pm2 -g
pm2 start .\app.js --name demo_vue

vue项目优化与上线的更多相关文章

  1. Vue项目优化首屏加载速度

    Vue项目部署上线后经常会发现首屏加载的速度特别慢:那么有那写能做的简单优化呢 一.路由的懒加载 路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 结合 ...

  2. vue项目 打包部署上线

    1. npm run dev:本地开发的时候做调试用的. 2. npm run build:打包部署上线,生成一个 dist 文件夹. 注意:用 npm run build 时,常遇到因引用路径不对导 ...

  3. 用prerender-spa-plugin插件Vue项目优化SEO做ssr服务端渲染及预渲染

    今天在做公交的时候没干,用手机看看文章,偶然发现了一个关于Vue优化seo的文章,我先是在Vue的官方文档看了一篇关于Vue做SEO优化的文章. 上面提到了nuxt.js这个框架,这个框架我做过一个小 ...

  4. vue项目优化--使用CDN和Gzip

    使用vue-cli构建的vue项目,在打包发布的时候,发现打包后的文件体积很大,使用webpack-bundle-analyzer分析后,发现占用空间最多的是引用的第三方依赖.第三方的依赖文件可以使用 ...

  5. vue项目优化之按需加载组件-使用webpack require.ensure

    require-ensure和require-amd的区别: require-amd 说明: 同AMD规范的require函数,使用时传递一个模块数组和回调函数,模块都被下载下来且都被执行后才执行回调 ...

  6. Vue 项目优化,持续更新...

    一.减少打包的体积 通过vue-cli 初始化项目后,使用 npm run build 生成的JS文件往往会很大,加载时间过长导致页面长时间白屏,所以我们尽可能的使用一下方法来减少打包体积. 1.1 ...

  7. 第十章、Vue项目的联调上线

    抓包 Fiddler 一.解决跨域 proxyTable(查看博客总结) 二.解决用本机ip地址不能访问 在dev中加上 --host 0.0.0.0就可以用本机ip访问,这样的话可以用手机在内网(局 ...

  8. vue项目优化,加快服务器端渲染速度

    1. CSS在开发模式中用import,在打包后用CDN min.js中做如下操作 if (process.env.NODE_ENV == 'development') { require('../x ...

  9. vue项目优化之路由懒加载

    const login = () =>import('@/views/login'); export default new Router({ routes:[ { path:'/login', ...

随机推荐

  1. CSS实现图片圆角显示

    问题描述 在自定义博客园侧边栏公告时,想增加博客头像,但图片默认显示成是方形的,不是很好看,想着改成圆角显示会漂亮些 解决方案 增加css样式 border-radius:25px; 上面的像素值根据 ...

  2. unittest培训后总结记录

    今天在给同学们上了自动化测试单元框架unittest之后,突发奇想,要总结下自己今天上的课程内容.于是有了下面的一幕: 首先,今天上课的目标是要学会关于unittest框架的基本使用及断言.批量执行. ...

  3. 解决SpringBoot项目创建缓慢问题

    SpringBoot项目构建缓慢 快速创建springboot项目 在创建一个springboot项目的时候,往往速度会很慢,原因是下载springboot文件的默认地址是springboot官网(国 ...

  4. ORA-00001: unique constraint (string.string) violated 违反唯一约束条件(.)

    ORA-00001: unique constraint (string.string) violated   ORA-00001: 违反唯一约束条件(.) Cause: An UPDATE or I ...

  5. Python+Appium自动化测试(13)-toast定位

    一,前言 在app自动化测试的过程中经常会遇到需要对toast进行定位,最常见的就是定位toast或者获取toast的文案进行断言,如下图,通过定位"登录成功"的toast就可以断 ...

  6. springboot1.5和jpa利用HikariCP实现多数据源的使用

    背景 现在已有一个完整的项目,需要引入一个新的数据源,其实也就是分一些请求到从库上去 技术栈 springboot1.5 (哎,升不动啊) 思路 两个数据源,其中一个设置为主数据源 两个事物管理器,其 ...

  7. 强大的table组件-antd pro table

    概述 antd pro table antd pro table 的主要部分 表格显示的配置(绿色框内) 检索的配置(红色框内) 是否显示检索部分 检索的内容是如何生效的 工具栏的配置(黄色框内) 表 ...

  8. linux 虚拟机下 安装redis

    虚拟机安装linux,打开,挂起就好: 使用ssh连接,这里使用的是Moba Xterm 可以ssh 可以ftp  满足你的日常开发所需,开发必备.每个人都有自己顺手的工具,你喜欢就好 虚拟机挂一边就 ...

  9. 对NETIF_F_GSO的一些理解

    看linux内核协议栈的时候看到tcp_sendmsg函数,看起来并不难理解,但是申请skb的时候主buff大小让我很困惑.我以前一直以为会根据sack/ip option/pmtu等计算一个mss, ...

  10. 多测师讲解jmeter _接口请求_(003)高级讲师肖sir

    1.简单接口的请求 2. 3. 正则查看: 正则提取:在后置处理器中正则请求 设置:正则表达式 JSESSIONID提取器: Debug  sampler 总结: