欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于vue3?vue-cli4?線上部署及優(yōu)化的問題

 更新時間:2023年06月01日 09:53:32   作者:倪風(fēng)6  
這篇文章主要介紹了基于vue3?vue-cli4?線上部署及優(yōu)化的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

起因

之前部署一直是直接使用docker在服務(wù)器上npm run serve直接運行,沒出現(xiàn)什么問題,這次部署時真的難受到我了,第一次打開的速度真的慢的要死,首次加載至少要5s左右,這誰受得了,于是開始網(wǎng)上找教程

過程

開始使用 npm run build 打包項目,在dist目錄下,我嘗試在本地打開index.html。頁面完全空白,打開控制臺,發(fā)現(xiàn)全是關(guān)于

Failed to load resource: net::ERR_FILE_NOT_FOUND

的報錯

找了相關(guān)教程,這個問題解決還是挺簡單的,只需要在根目錄下創(chuàng)建一個vue.config.js的文件,添加上以下內(nèi)容,重新build就行了

module.exports = {
    publicPath: './',
};

接著,我把項目打包到服務(wù)器上,使用docker apache進行上線

docker run -p 80:80 -itd --name codetip_net_client  -v /root/codetip/client:/usr/local/apache2/htdocs httpd

我直接run了httpd服務(wù),沒有鏡像他會自己自動拉取,映射了本地目錄 /root/codetip/client,只需要將dist中的內(nèi)容上傳即可。

上線成功后,我發(fā)現(xiàn),好了一點(可能是錯覺),但是還是特別慢,于是繼續(xù)找問題,最后發(fā)現(xiàn),我們在build的時候,在js目錄下,會自動創(chuàng)建很多map文件,一個js對應(yīng)一個map,這個的作用主要是在我們開發(fā)過程中,給我們錯誤進行定位用的,比如某個地方報錯了,他會給我們指出在第幾行出現(xiàn)的問題,但我們的線上應(yīng)用可用不著這個,只需要在上面說到的vue.config.js這個文件中再添加上一段下方的代碼就行了

productionSourceMap: false, // 生產(chǎn)環(huán)境是否生成 sourceMap 文件

配置之后少了map文件,速度確實快了不少,不過,還是不滿足,可其他網(wǎng)站比起來還是有些差距,繼續(xù)優(yōu)化

路由懶加載優(yōu)化

在router/index.js中將由非懶加載改成懶加載。非懶加載的情況下,會將所有的配置文件都放到一個js文件中,導(dǎo)致這個文件非常大,每次首次請求都會先加載這個文件;而懶加載,創(chuàng)建多個js文件,相當(dāng)于按需加載,每個頁面加載對應(yīng)的js文件

開啟apache gzip

這需要vue項目和服務(wù)端項目都開啟gzip

vue中安裝:

npm install -D compression-webpack-plugin

接著在vue.config.js中添加以下代碼即可

  configureWebpack: {
    plugins: [
        new CompressionPlugin({
            test: /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i,//需要壓縮的文件正則
            threshold: 10240,//文件大小大于這個值時啟用壓縮
            deleteOriginalAssets: false//壓縮后保留原文件
        })
    ]
  }

我們之前使用的是docker的httpd,接下來我們開啟他的gzip

先進入容器

docker exec -it codetip_net_client bash

容器初始化是沒有編輯器的,這里我們先安裝一個vim

apt update -y
apt install vim -y

接下來打開httpd的配置文件

vim /usr/local/apache2/conf/httpd.conf

打開以下兩個文件的注釋

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

接下來在文件最后添加上以下內(nèi)容:

#使用<IfModule deflate_module> 和 <IfModule mod_deflate.c> 經(jīng)過測試沒什么區(qū)別
<IfModule deflate_module>
  # 就像一個開關(guān)一樣,告訴 Apache 對傳輸?shù)綖g覽器的內(nèi)容進行壓縮
  SetOutputFilter DEFLATE
  # 壓縮級別 9是最高級 1是最低級,不建議使用太高的壓縮比,這樣會對CPU產(chǎn)生太大的負擔(dān)
  DeflateCompressionLevel 9
</IfModule>
<IfModule mod_deflate.c>
    # 告訴 apache 對傳輸?shù)綖g覽器的內(nèi)容進行壓縮
    SetOutputFilter DEFLATE
    # 壓縮等級 9 最低是1,不建議按最大級別進行壓縮,壓縮率過高會占更多CPU資源
    DeflateCompressionLevel 9
    # 設(shè)置不對后綴gif,jpg,jpeg,png的圖片文件進行壓縮
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>
<IfModule mod_deflate.c>
    # 壓縮等級 9
    DeflateCompressionLevel 9
    # 壓縮類型 html、xml、php、css、js 面的文件MIME類型可以根據(jù)自己情況添加
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php
    AddOutputFilter DEFLATE js css
</IfModule>

之后重啟docker容器(或者重啟apache)

docker stop codetip_net_client  
docker start codetip_net_client  

開啟之后,速度真的提升不止一點點

開啟keep-alive

對于部分頁面開啟這個緩存功能有助于提升訪問的效果,但值得注意的是,開啟后我們需要將部分動態(tài)請求的數(shù)據(jù)轉(zhuǎn)移到activated這個生命周期中,因為我們開啟后,我們再請求同一個頁面的時候,它默認只會執(zhí)行activated這個生命周期中的內(nèi)容,其他將調(diào)用緩存中的內(nèi)容

添加首屏加載動畫

這個功能是在我們第一次訪問頁面的時候出現(xiàn)的,相信很多人在項目搭建到服務(wù)器上的時候,會出現(xiàn)第一次打開白屏很久的這個問題,這是因為項目需要先請求到j(luò)s和css等文件,請求完后才會渲染頁面,為了解決這個問題,我在上面也說了很多方法,但總有那么一下白屏也是很難受的,所以我們可以在頁面添加上一個加載功能,在項目中/public/index.html文件中添加上對應(yīng)代碼:

  <style>
    @-webkit-keyframes enter {
      0% {
        opacity: 0;
        top: -10px;
      }
      5% {
        opacity: 1;
        top: 0px;
      }
      50.9% {
        opacity: 1;
        top: 0px;
      }
      55.9% {
        opacity: 0;
        top: 10px;
      }
    }
    @keyframes enter {
      0% {
        opacity: 0;
        top: -10px;
      }
      5% {
        opacity: 1;
        top: 0px;
      }
      50.9% {
        opacity: 1;
        top: 0px;
      }
      55.9% {
        opacity: 0;
        top: 10px;
      }
    }
    @-moz-keyframes enter {
      0% {
        opacity: 0;
        top: -10px;
      }
      5% {
        opacity: 1;
        top: 0px;
      }
      50.9% {
        opacity: 1;
        top: 0px;
      }
      55.9% {
        opacity: 0;
        top: 10px;
      }
    }
    body {
      background: #f8f8f9;
    }
    #app-loader {
      position: absolute;
      left: 50%;
      top: 50%;
      margin-left: -27.5px;
      margin-top: -27.5px;
    }
    #app-loader .square {
      background: #2d8cf0;
      width: 15px;
      height: 15px;
      float: left;
      top: -10px;
      margin-right: 5px;
      margin-top: 5px;
      position: relative;
      opacity: 0;
      -webkit-animation: enter 6s infinite;
      animation: enter 6s infinite;
    }
    #app-loader .enter {
      top: 0px;
      opacity: 1;
    }
    #app-loader .square:nth-child(1) {
      -webkit-animation-delay: 1.8s;
      -moz-animation-delay: 1.8s;
      animation-delay: 1.8s;
    }
    #app-loader .square:nth-child(2) {
      -webkit-animation-delay: 2.1s;
      -moz-animation-delay: 2.1s;
      animation-delay: 2.1s;
    }
    #app-loader .square:nth-child(3) {
      -webkit-animation-delay: 2.4s;
      -moz-animation-delay: 2.4s;
      animation-delay: 2.4s;
      background: #ff9900;
    }
    #app-loader .square:nth-child(4) {
      -webkit-animation-delay: 0.9s;
      -moz-animation-delay: 0.9s;
      animation-delay: 0.9s;
    }
    #app-loader .square:nth-child(5) {
      -webkit-animation-delay: 1.2s;
      -moz-animation-delay: 1.2s;
      animation-delay: 1.2s;
    }
    #app-loader .square:nth-child(6) {
      -webkit-animation-delay: 1.5s;
      -moz-animation-delay: 1.5s;
      animation-delay: 1.5s;
    }
    #app-loader .square:nth-child(8) {
      -webkit-animation-delay: 0.3s;
      -moz-animation-delay: 0.3s;
      animation-delay: 0.3s;
    }
    #app-loader .square:nth-child(9) {
      -webkit-animation-delay: 0.6s;
      -moz-animation-delay: 0.6s;
      animation-delay: 0.6s;
    }
    #app-loader .clear {
      clear: both;
    }
    #app-loader .last {
      margin-right: 0;
    }
    #app-loader .loader-content {
      color: #3498db;
      font-size: 16px;
      font-weight: 600;
    }
  </style>
    <div id="app-loader">
    <div class="square"></div>
    <div class="square"></div>
    <div class="square last"></div>
    <div class="square clear"></div>
    <div class="square"></div>
    <div class="square last"></div>
    <div class="square clear"></div>
    <div class="square "></div>
    <div class="square last"></div>
    <div class="loader-content">
      <span>Loading...</span>
    </div>
  </div>

然后到我們APP.vue中添加上

這里的nextTick是為了在我們頁面dom發(fā)生變化的時候執(zhí)行,移除加載代碼

import { nextTick } from "vue";
  nextTick(function () {
    try {
      document.body.removeChild(document.getElementById("app-loader"));
    } catch (e) {}
  });

效果:

因為服務(wù)器速度太快,只有一小會的顯示

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 通用vue組件化展示列表數(shù)據(jù)實例詳解

    通用vue組件化展示列表數(shù)據(jù)實例詳解

    組件化開發(fā)能大幅提高應(yīng)用的開發(fā)效率、測試性、復(fù)用性等,下面這篇文章主要給大家介紹了關(guān)于通用vue組件化展示列表數(shù)據(jù)的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • vue構(gòu)建動態(tài)表單的方法示例

    vue構(gòu)建動態(tài)表單的方法示例

    這篇文章主要介紹了vue構(gòu)建動態(tài)表單的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 解決運行vue項目內(nèi)存溢出問題

    解決運行vue項目內(nèi)存溢出問題

    這篇文章主要介紹了解決運行vue項目內(nèi)存溢出問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 一文詳解Vue?的雙端?diff?算法

    一文詳解Vue?的雙端?diff?算法

    這篇文章主要介紹了一文詳解Vue?的雙端?diff?算法,diff?算法是渲染器中最復(fù)雜的部分,也是面試的熱點問題。今天我們就通過?Vue?的?diff?算法來探究下diff?算法吧
    2022-06-06
  • 解析Vue.use()是干什么的

    解析Vue.use()是干什么的

    今天通過本文給大家分享Vue.use是什么,主要包括vueEsign?插件的install是什么,element-ui的install是什么,為什么有的庫就不需要使用Vue.use,對vue.use()相關(guān)知識感興趣的朋友一起看看吧
    2022-06-06
  • 在vant 中使用cell組件 定義圖標(biāo)該圖片和位置操作

    在vant 中使用cell組件 定義圖標(biāo)該圖片和位置操作

    這篇文章主要介紹了在vant 中使用cell組件 定義圖標(biāo)該圖片和位置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vite5+vue3+?import.meta.glob動態(tài)導(dǎo)入vue組件圖文教程

    vite5+vue3+?import.meta.glob動態(tài)導(dǎo)入vue組件圖文教程

    import.meta.glob是Vite提供的一個特殊功能,它允許你在模塊范圍內(nèi)動態(tài)地導(dǎo)入多個模塊,這篇文章主要給大家介紹了關(guān)于vite5+vue3+?import.meta.glob動態(tài)導(dǎo)入vue組件的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • vue+elementui實現(xiàn)表格多級表頭效果

    vue+elementui實現(xiàn)表格多級表頭效果

    這篇文章主要為大家詳細介紹了vue?+?elementui實現(xiàn)表格多級表頭,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue地區(qū)選擇組件教程詳解

    vue地區(qū)選擇組件教程詳解

    這篇文章主要介紹了vue地區(qū)選擇組件主要用于全國地區(qū)數(shù)據(jù)的操作,包括省,市,區(qū)三級聯(lián)動,地區(qū)數(shù)據(jù)的添加和刪除,本文重點給大家介紹vue地區(qū)選擇組件教程詳解,需要的朋友參考下吧
    2018-05-05
  • vue3?邏輯復(fù)用的實現(xiàn)示例

    vue3?邏輯復(fù)用的實現(xiàn)示例

    在項目開發(fā)中,有兩個功能特別類似,如果單獨實現(xiàn),會有很多重復(fù)的代碼,這時候就會用到邏輯復(fù)用,本文主要介紹了vue3?邏輯復(fù)用的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論