最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

起因

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

過程

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

Failed to load resource: net::ERR_FILE_NOT_FOUND

的報錯

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

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

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

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

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

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

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

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

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

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

開啟apache gzip

這需要vue項目和服務端項目都開啟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

接下來在文件最后添加上以下內容:

#使用<IfModule deflate_module> 和 <IfModule mod_deflate.c> 經(jīng)過測試沒什么區(qū)別
<IfModule deflate_module>
  # 就像一個開關一樣,告訴 Apache 對傳輸?shù)綖g覽器的內容進行壓縮
  SetOutputFilter DEFLATE
  # 壓縮級別 9是最高級 1是最低級,不建議使用太高的壓縮比,這樣會對CPU產(chǎn)生太大的負擔
  DeflateCompressionLevel 9
</IfModule>
<IfModule mod_deflate.c>
    # 告訴 apache 對傳輸?shù)綖g覽器的內容進行壓縮
    SetOutputFilter DEFLATE
    # 壓縮等級 9 最低是1,不建議按最大級別進行壓縮,壓縮率過高會占更多CPU資源
    DeflateCompressionLevel 9
    # 設置不對后綴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ù)轉移到activated這個生命周期中,因為我們開啟后,我們再請求同一個頁面的時候,它默認只會執(zhí)行activated這個生命周期中的內容,其他將調用緩存中的內容

添加首屏加載動畫

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

  <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) {}
  });

效果:

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

總結

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

相關文章

  • vue.set向對象里增加多層數(shù)組屬性不生效問題及解決

    vue.set向對象里增加多層數(shù)組屬性不生效問題及解決

    這篇文章主要介紹了vue.set向對象里增加多層數(shù)組屬性不生效問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解vue3沙箱機制

    詳解vue3沙箱機制

    這篇文章主要介紹了詳解vue3 沙箱機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • vue3使用高德地圖,自定義點標記、默認點聚合樣式、點擊點標記獲取信息

    vue3使用高德地圖,自定義點標記、默認點聚合樣式、點擊點標記獲取信息

    這篇文章主要介紹了vue3使用高德地圖,自定義點標記、默認點聚合樣式、點擊點標記獲取信息的相關知識,本文結合示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • vue如何在data中引入圖片的正確路徑

    vue如何在data中引入圖片的正確路徑

    這篇文章主要介紹了vue如何在data中引入圖片的正確路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue的樣式綁定詳解

    Vue的樣式綁定詳解

    這篇文章主要為大家詳細介紹了Vue的樣式綁定,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Vue如何提升首屏加載速度實例解析

    Vue如何提升首屏加載速度實例解析

    這篇文章主要介紹了Vue如何提升首屏加載速度實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • vue項目中添加單元測試的方法

    vue項目中添加單元測試的方法

    這篇文章主要介紹了vue項目中添加單元測試的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Vue3 使用axios攔截器打印前端日志

    Vue3 使用axios攔截器打印前端日志

    這篇文章主要介紹了Vue3 使用axios攔截器打印前端日志,這是一種比較值得推薦的方式,也就是寫一次,就不用總寫console.log了。下面來看看文章的詳細內容,需要的朋友可以參考一下
    2021-11-11
  • 使用 JSON.stringify() 列化一個Error

    使用 JSON.stringify() 列化一個Error

    這篇文章主要介紹了使用 JSON.stringify() 列化一個Error,需要的朋友可以參考下
    2023-10-10
  • VUE前端項目打包部署云服務器詳細流程(寶塔)

    VUE前端項目打包部署云服務器詳細流程(寶塔)

    Vue.js是一個流行的前端JavaScript框架,用于構建現(xiàn)代web應用程序,這篇文章主要介紹了VUE前端項目打包部署云服務器的相關資料,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07

最新評論

岑巩县| 鸡泽县| 云南省| 泾源县| 乳源| 南岸区| 根河市| 正阳县| 沧州市| 托克逊县| 揭阳市| 和平区| 镶黄旗| 桂林市| 岫岩| 拜泉县| 漯河市| 沅陵县| 乃东县| 隆子县| 剑河县| 平果县| 梓潼县| 祁阳县| 驻马店市| 叶城县| 靖江市| 奈曼旗| 西城区| 牙克石市| 巴彦淖尔市| 射洪县| 禹州市| 东丰县| 博客| 西宁市| 营山县| 德清县| 新绛县| 青铜峡市| 四会市|