项目优化策略

96 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

0.页面切换进度条

npm install --save nprogress

NProgress.start();//显示进度条
NProgress.done();//隐藏进度条

这两个函数分别在axios拦截器的钩子函数中进行调用

// 在request拦截器中展示进度条
axios.interceptors.request.use((config) => {
  config.headers.Authorization = window.sessionStorage.getItem('token')
  NProgress.start() //显示进度条
  return config
})
// 在response拦截器中隐藏进度条
axios.interceptors.response.use((config) => {
  NProgress.done() //隐藏进度条
  return config
})

1. 生成打包报告

生成打包报告的方式有两种

vue-cli-service build --report
//--report选项可以生成report.html以帮助分析包内容
vue ui

2.第三方库启用 CDN

默认情况下,通过 import 语法导入的第三方依赖包,最终会被打包合并到同一个文件中,从而导致打包成功后,单文件体积过大的问题。

为了解决上述问题,可以通过 webpack的 externals节点,来配置并加载外部的 CDN 资源。凡是声明在externals 中的第三方依赖包,都不会被打包。

导入时需要注意版本号,不可直接照搬

3. ElementUl组件按需加载

虽然在开发阶段,我们启用了element-ui组件的按需加载,尽可能的减少了打包的体积,但是那些被按需加

载的组件,还是占用了较大的文件体积。此时,我们可以将 element-ui 中的组件,也通过 CDN 的形式来加

载,这样能够进一步减小打包后的文件体积。

具体操作流程如下:

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

② 在 index.html 的头部区域中,通过 CDN 加载 element-ui的js 和 css 样式

这样做有两个优点:1、用户体验更好2、从自己服务器请求的东西更轻量,响应得更快

4. 路由懒加载

当打包构建项目时,JavaScript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。

具体需要 3 步:

① 安装 @babel/plugin-syntax-dynamic-import 包。

②在 babel.config.js配置文件中声明该插件。

③ 将路由改为按需加载的形式,示例代码如下:

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

关于路由懒加载的详细文档,可参考如下链接:

router.vuejs.org/zh/guide/ad…

用法如下:

5.首页内容定制

不同的打包环境下,首页内容可能会有所不同。我们可以通过插件的方式进行定制,插件配置如下:

在public/index.html首页中,可以根据isProd的值,来决定如何渲染页面结构:

如果是开发模式就没必要用cdn加载资源

6.移除console内容

npm instal1 babel-plugin-transform-remove-console --save-dev
// 发布阶段才去掉console,开发和测试阶段不需要去掉
const prodPlugin = []
if (process.env.NODE_ENV === 'production')
  prodPlugin.push('transform-remove-console')
module.exports = {
  presets: ['@vue/cli-plugin-babel/preset'],
  plugins: [
    [
      'component',
      {
        libraryName: 'element-ui',
        styleLibraryName: 'theme-chalk',
      },
    ],
    ...prodPlugin,
  ],
}

7.修改webpack

通过 vue-cli 3.0工具生成的项目,默认隐藏了所有webpack的配置项,目的是为了屏蔽项目的配置过程,让程序员把工作的重心,放到具体功能和业务逻辑的实现上。

如果程序员有修改 webpack默认配置的需求,可以在项目根目录中,按需创建 vue.config.js 这个配置文件,从而对项目的打包发布过程做自定义的配置(具体配置参考cli.vuejs.org/zh/config/#…)。

默认情况下, Vue项目的开发模式与发布模式,共用同一个打包的入口文件(即src/main.js) 。为了将项目

的开发过程与发布过程分离,我们可以为两种模式,各自指定打包的入口文件,即:

①开发模式的入口文件为 src/main-dev.js

② 发布模式的入口文件为 src/main-prod.js

configureWebpack 和 chainWebpack

在 vue.config.js 导出的配置对象中,新增 configureWebpack 或 chainWebpack 节点,来自定义 webpack

的打包配置。

在这里, configureWebpack和chainWebpack的作用相同,唯一的区别就是它们修改webpack配置的方

式不同:

① chainWebpack通过链式编程的形式,来修改默认的 webpack 配置

② configureWebpack通过操作对象的形式,来修改默认的 webpack配置

两者具体的使用差异,可参考如下网址:

cli.vuejs.org/zh/guide/we…

项目上线

1. 通过 node 创建 web 服务器。

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

npm init -y
npm i express -S

将打包生成的dist目录拷贝到server文件夹下,然后新建app.js文件输入以下代码:

2. 开启 gzip 配置。

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

② 可以通过服务器端使用 Express 做 gzip 压缩。其配置如下:

ps:启用中间件一定要在静态资源托管之前

3. 配置 https 服务。(一般由后端同学完成)

为什么要启用 HTTPS 服务?

传统的 HTTP 协议传输的数据都是明文,不安全采用 HTTPS 协议对传输的数据进行了加密处理,可以防止数据被中间人窃取,使用更安全

申请SSL证书( freessl.org

① 进入 freessl.cn/官网,输入要申请的域名并选择品牌。

② 输入自己的邮箱并选择相关选项。

③验证DNS(在域名管理后台添加TXT记录).

④ 验证通过之后,下载SSL证书(full_chain.pem 公钥;private.key私钥)。

在后台项目中导入证书

4. 使用 pm2 管理应用。

① 在服务器中安装 pm2:npmipm2-g

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

③查看运行项目:pm2Is

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

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

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