国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vue項(xiàng)目?jī)?yōu)化

NervosNetwork / 992人閱讀

摘要:,組件按需加載這也是可以優(yōu)化的點(diǎn)。如果大家還有好的優(yōu)化方案,歡迎大家留言交流

在日常的Vue項(xiàng)目開(kāi)發(fā)中,隨著業(yè)務(wù)的日漸復(fù)雜,代碼量的日益增加,隨之帶來(lái)的問(wèn)題就是打包后的vendor.js體積過(guò)大,導(dǎo)致加載時(shí)空白頁(yè)時(shí)間過(guò)長(zhǎng),給用戶的體驗(yàn)太差。為此我們需要減少vendor.js的體積,從本質(zhì)上來(lái)解決這種問(wèn)題。

這里大概例舉幾個(gè)在項(xiàng)目中實(shí)際用到過(guò)的方法,優(yōu)化后的js大概縮小了50%左右,效果還是挺明顯的。

1,webpack externals

為什么要配置externals

官方解釋:webpack 中的 externals 配置提供了不從 bundle 中引用依賴的方式。解決的是,所創(chuàng)建的 bundle 依賴于那些存在于用戶環(huán)境(consumer environment)中的依賴。

比如我們會(huì)在項(xiàng)目中引用各種第三方的js文件,如 jquery,vue,axios 等,如果我們?cè)诖虬鼤r(shí)排除這些依賴,則可以大大減小文件的大小,提高頁(yè)面加載速度,配置方法如下:

// 在 index.js 中引入資源




module.exports = {
     ...
     output: {
       ...
     },
     externals : {
       jquery: "jQuery"
       "vue": "Vue",
     }
     ...
   }

這樣就剝離了那些不需要改動(dòng)的依賴模塊,換句話,下面展示的代碼還可以正常運(yùn)行:

import $ from "jquery";
import Vue from "vue"

這樣不僅之前對(duì)第三方庫(kù)的用法方式不變,還把第三方庫(kù)剝離出webpack的打包中,從而加速webpack的打包速度。

2,組件按需加載

這也是可以優(yōu)化的點(diǎn)。如果頻繁使用了第三方組件/UI庫(kù),如我的項(xiàng)目中經(jīng)常使用了 element-ui 組件庫(kù),如果全部引入,項(xiàng)目體積非常大,這時(shí)可以按需引入組件。

首先,我們需要安裝 babel-plugin-component

npm install babel-plugin-component -D

然后,將.babelrc 修改為:

{
  "presets": [["es2015", { "modules": false }]],
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
}

然后引入部分組件,這樣一來(lái),就不需要引入樣式了,插件會(huì)幫我們處理。

// main.js
import Vue from "vue"
import { Dialog, Loading } from "element-ui"

[Dialog, Loading].forEach((comp) => {
    Vue.use(comp);
})
3,路由懶加載

當(dāng)打包構(gòu)建應(yīng)用時(shí),JavaScript 包會(huì)變得非常大,影響頁(yè)面加載。如果我們能把不同路由對(duì)應(yīng)的組件分割成不同的代碼塊,然后當(dāng)路由被訪問(wèn)的時(shí)候才加載對(duì)應(yīng)組件,這樣就更加高效了。

方法一

const login = () => import("@/components/login")
const router = new VueRouter({
  routes: [
    { path: "/login", component: login }
  ]
})
注意:這個(gè)時(shí)候我們需要安裝 babel-plugin-syntax-dynamic-import 插件,這樣打包時(shí)才會(huì)識(shí)別該語(yǔ)法

方法二

有時(shí)候我們想把某個(gè)路由下的所有組件都打包在同個(gè)異步塊 (chunk) 中。只需要使用 命名 chunk,一個(gè)特殊的注釋語(yǔ)法來(lái)提供 chunk name (需要 Webpack > 2.4)。

const Foo = () => import(/* webpackChunkName: "group-foo" */ "./Foo.vue")
const Bar = () => import(/* webpackChunkName: "group-foo" */ "./Bar.vue")
const Baz = () => import(/* webpackChunkName: "group-foo" */ "./Baz.vue")
4,數(shù)據(jù)緩存——keep-alive

VUE2.0中提供了一個(gè)keep-alive方法,可以用來(lái)緩存組件,避免多次加載相應(yīng)的組件,減少性能的消耗。

舉例:用戶瀏覽A頁(yè)面,待A頁(yè)面的資源都加載完畢了,用戶通過(guò)路由跳轉(zhuǎn)到了B頁(yè)面,之后又退回到了A頁(yè)面,如果沒(méi)有特殊處理的話,A頁(yè)面的資源會(huì)重新加載一遍,造成資源浪費(fèi);若我們做了緩存,則可以減少請(qǐng)求的次數(shù),極高用戶體驗(yàn)。

1,緩存部分頁(yè)面


    



// router 設(shè)置如下
routers:[
    {? ?path: "/home",
        name: home,
        meta: {keepAlive: true}? ? ? //? 設(shè)置為true表示需要緩存,不設(shè)置或者false表示不需要緩存? ? ? ? ? ? ? 
    }
]

2,緩存組件



  


// include 和 exclude 屬性允許組件有條件地緩存。二者都可以用逗號(hào)分隔字符串、正則表達(dá)式或一個(gè)數(shù)組來(lái)表示


  




  




  

除了以上的優(yōu)化方法外,還有常規(guī)的 圖片的壓縮合并、CDN加速、壓縮代碼等方法,大家應(yīng)該都很熟悉了,這里就不在一一闡述了。如果大家還有好的優(yōu)化方案,歡迎大家留言交流~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106809.html

相關(guān)文章

  • vue首屏加載優(yōu)化

    摘要:為了讓事情更簡(jiǎn)單,允許將組件定義為一個(gè)工廠函數(shù),動(dòng)態(tài)地解析組件的定義。只在組件需要渲染時(shí)觸發(fā)工廠函數(shù),并且把結(jié)果緩存起來(lái),用于后面的再次渲染。 庫(kù)使用情況 vue vue-router axios muse-ui material-icons vue-baidu-map 未優(yōu)化前 首先我們?cè)谡G闆r下buildshowImg(https://segmentfault.com/img...

    Kaede 評(píng)論0 收藏0
  • 記一次Vue項(xiàng)目優(yōu)化及思路

    摘要:記錄一個(gè)前端項(xiàng)目?jī)?yōu)化的路程,效果如上圖。第二步優(yōu)化結(jié)果再次運(yùn)行查看項(xiàng)目打包情況可以看到項(xiàng)目體積已經(jīng)優(yōu)化到,中也看不到的蹤影了。本文主要想提供一些優(yōu)化思路及手段,即如何定位通過(guò),查看頁(yè)面加載時(shí)間問(wèn)題,然后再解決這些問(wèn)題。 showImg(https://segmentfault.com/img/bVbq282?w=381&h=384); 記錄一個(gè)前端項(xiàng)目?jī)?yōu)化的路程,效果如上圖。 接下來(lái)我...

    keithxiaoy 評(píng)論0 收藏0
  • 記一次Vue項(xiàng)目優(yōu)化及思路

    摘要:記錄一個(gè)前端項(xiàng)目?jī)?yōu)化的路程,效果如上圖。第二步優(yōu)化結(jié)果再次運(yùn)行查看項(xiàng)目打包情況可以看到項(xiàng)目體積已經(jīng)優(yōu)化到,中也看不到的蹤影了。本文主要想提供一些優(yōu)化思路及手段,即如何定位通過(guò),查看頁(yè)面加載時(shí)間問(wèn)題,然后再解決這些問(wèn)題。 showImg(https://segmentfault.com/img/bVbq282?w=381&h=384); 記錄一個(gè)前端項(xiàng)目?jī)?yōu)化的路程,效果如上圖。 接下來(lái)我...

    nanchen2251 評(píng)論0 收藏0
  • 記一次vue-webpack項(xiàng)目優(yōu)化實(shí)踐【更新】

    摘要:優(yōu)化空間不大主要關(guān)注另外兩個(gè)上面。目前為止,項(xiàng)目打包后的大部頭就是,這個(gè)目前的優(yōu)化空間較小。當(dāng)然,從整體優(yōu)化的大維度上來(lái)說(shuō)優(yōu)化的點(diǎn)還有很多,這個(gè)文章繼續(xù)更新下去。 項(xiàng)目現(xiàn)狀 項(xiàng)目是一個(gè)數(shù)據(jù)監(jiān)測(cè)平臺(tái),引入了ehcart和three.js 負(fù)責(zé)項(xiàng)目的數(shù)據(jù)可視化;打包后,體積高達(dá)2.1M,這個(gè)體積相比于我的項(xiàng)目規(guī)模來(lái)說(shuō)就顯得稍有笨重了 使用webpack-bundle-analyzer分析了...

    ernest.wang 評(píng)論0 收藏0
  • 前端最實(shí)用書(shū)簽(持續(xù)更新)

    摘要:前言一直混跡社區(qū)突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來(lái)有點(diǎn)混亂所以將前端主流技術(shù)做了一個(gè)書(shū)簽整理不求最多最全但求最實(shí)用。 前言 一直混跡社區(qū),突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來(lái)有點(diǎn)混亂; 所以將前端主流技術(shù)做了一個(gè)書(shū)簽整理,不求最多最全,但求最實(shí)用。 書(shū)簽源碼 書(shū)簽導(dǎo)入瀏覽器效果截圖showImg(https://segmentfault.com/img/bVbg41b?w=107...

    sshe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<