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.pswp.cn/news/248777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248777.shtml
英文地址,請注明出處:http://en.pswp.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; 以…

innodb_locks_unsafe_for_binlog分析

mysql數據庫中默認的隔離級別為repeat-read. innodb默認使用了next-gap算法&#xff0c;這種算法結合了index-row鎖和gap鎖。正因為這樣的鎖算法&#xff0c;innodb在可重復讀這樣的默認隔離級別上&#xff0c;可以避免幻象的產生。 innodb_locks_unsafe_for_binlog最主要的作用…

emacs的使用方法

emacs的使用方法 emacs配置&#xff1a; 將文件命名為.emacs&#xff0c;把配置敲進去&#xff0c;放在home文件夾 emacs命令行&#xff1a; altx打開命令行 編譯&#xff1a; 在命令行輸入compile&#xff0c;回車&#xff0c;會出現make -k&#xff0c;刪掉它&#xff0c;輸入…

前端面試---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…

springboot 參數校驗詳解

https://www.jianshu.com/p/89a675b7c900 在日常開發寫rest接口時&#xff0c;接口參數校驗這一部分是必須的&#xff0c;但是如果全部用代碼去做&#xff0c;顯得十分麻煩&#xff0c;spring也提供了這部分功能,本文來探究一下如何實現 1.配置 spring-boot-starter-web包自動依…

微信小程序——賬號及開發工具

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進行頁面…

如何處理大流量高并發

1.動靜分離。 將網站中的靜態資源單獨拆分出來, 比如 css, js, 圖片, 視頻資源單獨存儲在一臺服務器上, 或者直接使用云存儲平臺, 七牛云或者阿里云之類的, 這樣能有效的降低主服務器的運行壓力 2.CDN加速。 云平臺提供 CDN 加速, 可以對資源進行全國服務器節點的分發, 提高全國…