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

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

 更新時間:2020年06月25日 13:35:08   作者:程序員的人生A  
這篇文章主要介紹了Vue如何提升首屏加載速度實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

在Vue項目中,引入到工程中的所有js、css文件,編譯時都會被打包進(jìn)vendor.js,瀏覽器在加載該文件之后才能開始顯示首屏。若是引入的庫眾多,那么vendor.js文件體積將會相當(dāng)?shù)拇?,影響首屏的體驗。

這是優(yōu)化前的頁面加載狀態(tài):執(zhí)行npm run build打包項目,出來的vendeor.js文件,基本都是1M以上的的巨大文件,沒有用戶能忍受5s以上的loading而不關(guān)閉頁面的,如圖所示:

當(dāng)項目在掛載到服務(wù)器上,平均都是10S以上加載出來,好家伙這加載時間,仿佛過了半個世紀(jì),很煩人,心態(tài)boom, 開發(fā)者甚至都有種想砸電腦的沖動(·#*@#¥……&*)!

我們先來分析下前端加載速度慢原因

1. 首先安裝webpack的可視化資源分析工具,命令行執(zhí)行:

npm i webpack-bundle-analyzer -D

2. 然后在webpack的dev開發(fā)模式配置中,引入插件,代碼如下:

const BundleAnalyzerPlugin = require('webpack-bundle-plugin').BundleAnalyzerPlugin
plugins: [
  new BundleAnalyzerPlugin()
]

3. 最后命令行執(zhí)行npm run build --report, 瀏覽器會自動打開分析結(jié)果,如下所示:

可以看到vue全家桶相關(guān)依賴占用了很大的空間,對webpack的構(gòu)建速度和網(wǎng)站加載速度都會有比較大的影響。單頁應(yīng)用會隨著項目越大,導(dǎo)致首屏加載速度很慢,針對目前所暴露出來的問題,有以下幾種優(yōu)化方案可以參考:

有針對性的優(yōu)化方案

一、對于第三方j(luò)s庫的優(yōu)化,分離打包

生產(chǎn)環(huán)境是內(nèi)網(wǎng)的話,就把資源放內(nèi)網(wǎng),通過靜態(tài)文件引入,會比node_modules和外網(wǎng)CDN的打包加載快很多。如果有外網(wǎng)的話,可以通過CDN方式引入,因為不用占用訪問外網(wǎng)的帶寬,不僅可以為您節(jié)省流量,還能通過CDN加速,獲得更快的訪問速度。但是要注意下,如果你引用的CDN 資源存在于第三方服務(wù)器,在安全性上并不完全可控。

目前采用引入依賴包生產(chǎn)環(huán)境的js文件方式加載,直接通過window可以訪問暴露出的全局變量,不必通過import引入,Vue.use去注冊

在webpack的dev開發(fā)配置文件中, 加入如下參數(shù),可以分離打包第三方資源包,key為依賴包名稱,value是源碼拋出來的全局變量。如下圖所示,可以看到打包后vue相關(guān)資源包已經(jīng)排除在外了。對于一些其他的工具庫,盡量采用按需引入的方式。

externals: {
  vue: 'Vue',
  vuex: 'Vuex',
  'vue-router': 'VueRouter',
  axios: 'axios',
  'element-ui': 'ELEMENT'

二、vue-router使用懶加載

在訪問到當(dāng)前頁面才會加載相關(guān)的資源,異步方式分模塊加載文件,默認(rèn)的文件名是隨機(jī)的id。如果在output中配置了chunkFilename,可以在component中添加WebpackChunkName,是為了方便調(diào)試,在頁面加載時候,會顯示加載的對應(yīng)文件名+hash值,如下圖:

{
  path: '/Login',
  name: 'Login',
  component: () = >import( /* webpackChunkName: "Login" */ '@/view/Login')
}

三、圖片資源的壓縮,icon資源使用雪碧圖

嚴(yán)格說來這一步不算在編碼技術(shù)范圍內(nèi),但是卻對頁面的加載速度影響很大。對于所有的圖片文件,都可以在一個叫tinypng的網(wǎng)站上去壓縮一下。網(wǎng)址:tinypng.com/,對頁面上使用到的icon,可以使用在線字體圖標(biāo),或者雪碧圖,將眾多小圖標(biāo)合并到同一張圖上,用以減輕http請求壓力。然后通過操作CSS的background屬性,控制背景的位置以及大小,來展示需要的部分。

四、開啟gizp壓縮

gizp壓縮是一種http請求優(yōu)化方式,通過減少文件體積來提高加載速度。html、js、css文件甚至json數(shù)據(jù)都可以用它壓縮,可以減小60%以上的體積。前端配置gzip壓縮,并且服務(wù)端使用nginx開啟gzip,用來減小網(wǎng)絡(luò)傳輸?shù)牧髁看笮 ?/p>

命令行執(zhí)行:npm i compression-webpack-plugin -D

在webpack的dev開發(fā)配置文件中加入如下代碼:

const CompressionWebpackPlugin = require('compression-webpack-plugin')
plugins: [
  new CompressionWebpackPlugin()

啟用gzip壓縮打包之后,會變成下面這樣,自動生成gz包。目前大部分主流瀏覽器客戶端都是支持gzip的,就算小部分非主流瀏覽器不支持也不用擔(dān)心,不支持gzip格式文件的會默認(rèn)訪問源文件的,所以不要配置清除源文件。

配置好之后,打開瀏覽器訪問線上,F(xiàn)12查看控制臺,如果該文件資源的響應(yīng)頭里顯示有Content-Encoding: gzip,表示瀏覽器支持并且啟用了Gzip壓縮的資源

五、webpack相關(guān)配置優(yōu)化

(1)使用uglifyjs-webpack-plugin插件代替webpack自帶UglifyJsPlugin插件來壓縮JS文件;生產(chǎn)環(huán)境關(guān)閉源碼映射,一方面能減少代碼包的大小,另一方面也有利于系統(tǒng)代碼安全;清除打印日志和debugger信息;配置SplitChunks 抽取公有代碼,提升你的應(yīng)用的性能

(2)使用mini-xss-extract-plugin提取CSS 到單獨的文件, 并使用optimize-css-assets-webpack-plugin來壓縮CSS文件 。

六、前端頁面代碼層面的優(yōu)化

(1)合理使用v-if和v-show

(2)合理使用watch和computed

(3)使用v-for必須添加key, 最好為唯一id, 避免使用index, 且在同一個標(biāo)簽上,v-for不要和v-if同時使用

(4)定時器的銷毀??梢栽赽eforeDestroy()生命周期內(nèi)執(zhí)行銷毀事件;也可以使用$once這個事件偵聽器,在定義定時器事件的位置來清除定時器。詳細(xì)見vue官網(wǎng)

最終優(yōu)化后的效果如下圖:vendor.js文件從1M以上優(yōu)化到256K左右,體積減少接近80%,排除服務(wù)器影響的因素,界面渲染速度基本都在1s左右,達(dá)到秒開效果,比之前快了太多,體驗一下就上來了嘻嘻。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue.js結(jié)合bootstrap實現(xiàn)分頁控件

    Vue.js結(jié)合bootstrap實現(xiàn)分頁控件

    這篇文章主要為大家詳細(xì)介紹了Vue.js 合bootstrap實現(xiàn)分頁控件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Vue中tinymce富文本功能配置詳解

    Vue中tinymce富文本功能配置詳解

    TinyMCE是一款易用、且功能強大的所見即所得的富文本編輯器,跟其他富文本編輯器相比,有著豐富的插件,支持多種語言,能夠滿足日常的業(yè)務(wù)需求并且免費,本文小編給大家詳細(xì)介紹了Vue中tinymce富文本功能配置,需要的朋友可以參考下
    2023-11-11
  • vue2從數(shù)據(jù)變化到視圖變化發(fā)布訂閱模式詳解

    vue2從數(shù)據(jù)變化到視圖變化發(fā)布訂閱模式詳解

    這篇文章主要為大家介紹了vue2從數(shù)據(jù)變化到視圖變化發(fā)布訂閱模式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 在vue項目中引入vue-beauty操作方法

    在vue項目中引入vue-beauty操作方法

    在本篇文章里小編給大家分享了關(guān)于在vue項目中引入vue-beauty操作方法,有需要的朋友們跟著學(xué)習(xí)參考下。
    2019-02-02
  • vue elementUI 表單校驗功能之?dāng)?shù)組多層嵌套

    vue elementUI 表單校驗功能之?dāng)?shù)組多層嵌套

    這篇文章主要介紹了vue elementUI 表單校驗(數(shù)組多層嵌套)功能的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-06-06
  • Vue?table新增、編輯解讀

    Vue?table新增、編輯解讀

    這篇文章主要介紹了Vue?table新增、編輯,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 淺談vue2 單頁面如何設(shè)置網(wǎng)頁title

    淺談vue2 單頁面如何設(shè)置網(wǎng)頁title

    這篇文章主要介紹了淺談vue2 單頁面如何設(shè)置網(wǎng)頁title,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Vue?2源碼閱讀?Provide?Inject?依賴注入詳解

    Vue?2源碼閱讀?Provide?Inject?依賴注入詳解

    這篇文章主要為大家介紹了Vue?2源碼閱讀?Provide?Inject?依賴注入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • vue3.0 加載json的方法(非ajax)

    vue3.0 加載json的方法(非ajax)

    這篇文章主要介紹了vue3.0 加載json的方法(非ajax),幫助大家更好的理解和學(xué)習(xí)vue,感興趣的朋友可以了解下
    2020-10-10
  • Vue數(shù)據(jù)監(jiān)聽器watch和watchEffect的使用

    Vue數(shù)據(jù)監(jiān)聽器watch和watchEffect的使用

    今天我們來學(xué)習(xí)一下watch監(jiān)聽器和它的好兄弟watchEffect監(jiān)聽器。這個相對來說比較簡單,用的不是很多,當(dāng)然了,根據(jù)自己的項目情況自行決定使用,希望對大家有所幫助
    2023-02-02

最新評論