国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue項(xiàng)目性能優(yōu)化方案

這篇具有很好參考價(jià)值的文章主要介紹了Vue項(xiàng)目性能優(yōu)化方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、代碼層面的優(yōu)化

?1、v-if和v-show的使用場(chǎng)景
?(1)v-if適用于在運(yùn)行時(shí)很少改變條件,不需要頻繁切換條件的場(chǎng)景,屬于真正的條件渲染,會(huì)確保在切換過(guò)程中,元素適當(dāng)?shù)谋讳N(xiāo)毀和重建,也是惰性的;
?(2)v-show適用于頻繁切換條件的場(chǎng)景,v-show不管初始的渲染條件是什么,元素總是會(huì)被渲染,然后根據(jù)css的display屬性的值去切換顯示與隱藏。

2、computed和watch的使用場(chǎng)景
?(1)當(dāng)需要進(jìn)行數(shù)值計(jì)算,并且依賴(lài)于其他數(shù)據(jù)時(shí),應(yīng)該使用computed,可以利用computed的緩存特性,避免每次獲取值的時(shí)候都重新計(jì)算;
?(2)當(dāng)需要在數(shù)據(jù)變化時(shí)執(zhí)行異步或開(kāi)銷(xiāo)較大的操作時(shí),應(yīng)該是用watch,使用watch允許我們進(jìn)行異步操作,限制我們執(zhí)行該操作的頻率,并且在我們得到最終結(jié)果前,設(shè)置中間值,能拿到每一次的當(dāng)前值和前一次的值。

?3、v-for循環(huán)遍歷必須為item添加key,key不建議設(shè)置為索引,且避免在同一個(gè)元素中同時(shí)使用v-if

4、長(zhǎng)列表性能優(yōu)化
?vue會(huì)通過(guò)Object.defineProperty()對(duì)數(shù)據(jù)進(jìn)行劫持,來(lái)實(shí)現(xiàn)響應(yīng)數(shù)據(jù)的變化,但是有時(shí)候我們的組件只需要實(shí)現(xiàn)對(duì)數(shù)據(jù)的展示就可以了,不會(huì)有其他修改刪除的操作,所以就不需要vue來(lái)劫持我們的數(shù)據(jù),在大量數(shù)據(jù)展示的情況下,這能夠很明顯的減少組件初始化的時(shí)間,可以通過(guò)Object.freeze()方法來(lái)凍結(jié)一個(gè)對(duì)象,一旦被凍結(jié)的對(duì)象就不可以被修改

5、圖片資源懶加載:使用vue-lazyload插件
安裝:npm install vue-lazyload --save-dev
main.js引入:import VueLazyload from 'vue-lazyload'
使用:Vue.use(VueLazyload)
頁(yè)面中使用,直接將img的src屬性改成v-lazy:<img v-lazy="/static/img/logo.png">

6、路由懶加載:const comp = () => import('./Comp.vue')

7、第三方插件的按需引入

8、vue優(yōu)化無(wú)限列表性能:使用vue-virtual-scroll-list插件
安裝:npm install vue-virtual-scroll-list --save-dev
使用:<virtual-list style="height: 660px; overflow-y: auto;" :data-key="'id'" :data-sources="itemData" :data-component="itemComponent" /> (itemData:數(shù)據(jù),itemConponent:真正展示內(nèi)容的組件)

9、keep-alive的使用
利用keep-alive將不活動(dòng)的組件緩存起來(lái),在組價(jià)切換過(guò)程中,將組件的狀態(tài)保存在內(nèi)存中,防止重復(fù)渲染dom,減少加載時(shí)間及性能消耗,提高用戶(hù)體驗(yàn)。

二、webpack層面的優(yōu)化

1、對(duì)圖片進(jìn)行壓縮
在 vue 項(xiàng)目中除了可以在 webpack.base.conf.js 中 url-loader 中設(shè)置 limit 大小來(lái)對(duì)圖片處理,對(duì)小于 limit 的圖片轉(zhuǎn)化為 base64 格式,其余的不做操作。所以對(duì)有些較大的圖片資源,在請(qǐng)求資源的時(shí)候,加載會(huì)很慢,我們可以用 image-webpack-loader來(lái)壓縮圖片;
安裝:npm install image-webpack-loader --save-dev
webpack.js中配置:

{
? test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
? use:[
? ? {
? ? loader: 'url-loader',
? ? options: {
? ? ? limit: 10000,
? ? ? name: utils.assetsPath('img/[name].[hash:7].[ext]')
? ? ? }
? ? },
? ? {
? ? ? loader: 'image-webpack-loader',
? ? ? options: {
? ? ? ? bypassOnDebug: true,
? ? ? }
? ? }
? ]
}


2、減少es6轉(zhuǎn)為es5的冗余代碼
Babel插件會(huì)在es6代碼轉(zhuǎn)換成es5代碼的時(shí)候注入一些輔助函數(shù),例如:class HelloWebpack extends Component{...},這段代碼再被轉(zhuǎn)換成能正常運(yùn)行的es5代碼時(shí)需要以下兩個(gè)輔助函數(shù):

babel-runtime/helpers/createClass ?// 用于實(shí)現(xiàn) class 語(yǔ)法
babel-runtime/helpers/inherits ?// 用于實(shí)現(xiàn) extends 語(yǔ)法


在默認(rèn)情況下,Babel會(huì)在每個(gè)輸出文件中內(nèi)嵌這些依賴(lài)的輔助函數(shù)代碼,如果多個(gè)源代碼文件都依賴(lài)于這些輔助函數(shù),那么這些輔助函數(shù)的代碼將會(huì)出現(xiàn)很多次,造成代碼冗余,為了不然他們重復(fù)出現(xiàn),可以在依賴(lài)他們時(shí)通過(guò) require('babel-runtime/helpers/createClass')的方式導(dǎo)入,這樣就能做到只出現(xiàn)一次了,babel-plugin-transform-runtime這個(gè)插件就是用來(lái)實(shí)現(xiàn)這個(gè)作用的,將相關(guān)的輔助函數(shù)進(jìn)行替換成導(dǎo)入語(yǔ)句,從而減小babel編譯出來(lái)的代碼的大??;
安裝:npm install babel-plugin-transform-runtime --save-dev
修改.babelrc配置文件:

"plugins": [
? ? "transform-runtime"
]


3、提取公共代碼,業(yè)務(wù)代碼和第三方庫(kù)代碼分開(kāi):webpack3中使用CommonsChunkPlugin插件、webpack4中使用optimization.splitChunks插件

CommonsChunkPlugin插件詳細(xì)參數(shù):
name: 給這個(gè)包含公共代碼的chunk命名
filename: 命名打包后生成的js文件
minChunks: 公共代碼的判斷標(biāo)準(zhǔn),某個(gè)js模塊被多少個(gè)文件引入才算公共代碼,默認(rèn)為1,我們可以為2, 也就是說(shuō)如果
一個(gè)文件被其他頁(yè)面引入了超過(guò)了2次及以上,就可以認(rèn)為該文件就是公用代碼。
chunks: 表示需要在哪些chunk(配置中entry的每一項(xiàng))里尋找公共代碼進(jìn)行打包,默認(rèn)不設(shè)置,那么它的尋找范圍為所有的chunk;

如果項(xiàng)目中沒(méi)有把每個(gè)頁(yè)面的第三方庫(kù)和公共模塊提取出來(lái),則項(xiàng)目會(huì)存在以下問(wèn)題:
a、相同的資源被重復(fù)加載,浪費(fèi)客戶(hù)的流量和服務(wù)器的成本
b、每個(gè)頁(yè)面需要加載的資源太大,導(dǎo)致網(wǎng)頁(yè)首屏加載緩慢,影響用戶(hù)體驗(yàn)
所以我們需要將多個(gè)頁(yè)面的公共代碼抽離成單獨(dú)的文件,來(lái)優(yōu)化以上問(wèn)題,webpack專(zhuān)門(mén)內(nèi)置了用于提取多個(gè)chunk中的公共部分的插件CommonsChunkPlugin,我們?cè)陧?xiàng)目中CommonChunkPlugin的配置如下:

// 所有在 package.json 里面依賴(lài)的包,都會(huì)被打包進(jìn) vendor.js 這個(gè)文件中。
new webpack.optimize.CommonsChunkPlugin({
? name: 'vendor',
? minChunks: function(module, count) {
? ? return (
? ? ? module.resource &&
? ? ? /\.js$/.test(module.resource) &&
? ? ? module.resource.indexOf(
? ? ? ? path.join(__dirname, '../node_modules')
? ? ? ) === 0
? ? );
? }
}),
// 抽取出代碼模塊的映射關(guān)系
new webpack.optimize.CommonsChunkPlugin({
? name: 'manifest',
? chunks: ['vendor']
})

optimization.splitChunks參數(shù)詳解:

(1)、cacheGroups:splitChunks配置的核心,對(duì)代碼的拆分規(guī)則全在cacheGroups緩存組里配置,緩存組里的每一個(gè)屬性都是一個(gè)配置規(guī)則,可以自己定義屬性名稱(chēng),屬性值是一個(gè)對(duì)象,放的是對(duì)一個(gè)代碼拆分規(guī)則的描述,有兩個(gè)屬性:name和chunks;
name:提取出來(lái)的公共模塊將會(huì)以這個(gè)名稱(chēng)命名,可以不配置,如果不配置的話(huà),就會(huì)生成默認(rèn)的文件名
chunks:指定哪些類(lèi)型的chunks參與拆分,值可以是string也可以是函數(shù),如果是string的話(huà),可以有三個(gè)值:all、async、initial,all代表所有模塊,async代表異步加載的,initial代表初始化時(shí)就能獲取的模塊,如果是函數(shù),則可以通過(guò)chunks的name屬性等進(jìn)行更詳細(xì)的篩選

(2)、miniChunks:splitChunks是自帶默認(rèn)配置的,而緩存組默認(rèn)會(huì)繼承這些配置,其中有個(gè)miniChunks屬性,它是控制每個(gè)模塊什么時(shí)候被抽離出去:當(dāng)模塊被不同的entry引用的次數(shù)大于等于這個(gè)配置的值時(shí),才會(huì)被抽離出去,默認(rèn)值是1,也就是任何模塊都會(huì)被抽離出去,(入口模塊也會(huì)被webpack引入一次)

(3)、miniSize:提取的chunk的最小大小

(4)、priority:值為數(shù)值型,可以是負(fù)數(shù),作用是當(dāng)拆分組中設(shè)置多個(gè)拆分規(guī)則,且某個(gè)模塊符合多個(gè)規(guī)則時(shí),則通過(guò)優(yōu)先級(jí)屬性priority來(lái)決定使用哪個(gè)拆分規(guī)則,優(yōu)先級(jí)高者執(zhí)行

(5)、test:用于進(jìn)一步控制緩存組選擇的模塊,可以是一個(gè)正則表達(dá)式,也可以是一個(gè)函數(shù),可以匹配模塊的絕對(duì)路徑或chunk名稱(chēng),匹配chunk名稱(chēng)時(shí)將選擇chunk中所有的模塊

例子:

optimization: {
? ? splitChunks: {
? ? ? ? minSize: 30, ?//提取出的chunk的最小大小
? ? ? ? cacheGroups: {
? ? ? ? ? ? default: {
? ? ? ? ? ? ? ? name: 'common',
? ? ? ? ? ? ? ? chunks: 'initial',
? ? ? ? ? ? ? ? minChunks: 2, ?//模塊被引用2次以上的才抽離
? ? ? ? ? ? ? ? priority: -20
? ? ? ? ? ? },
? ? ? ? ? ? vendors: { ?//拆分第三方庫(kù)(通過(guò)npm|yarn安裝的庫(kù))
? ? ? ? ? ? ? ? test: /[\\/]node_modules[\\/]/,
? ? ? ? ? ? ? ? name: 'vendor',
? ? ? ? ? ? ? ? chunks: 'initial',
? ? ? ? ? ? ? ? priority: -10
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

4、構(gòu)建結(jié)果輸出分析:webpack-bundle-analyzer
webpack輸出的代碼可讀性很差,而且文件非常大,為了簡(jiǎn)單、直觀(guān)的分析輸出結(jié)果,可以使用分析工具,以圖形的形式將結(jié)果更直觀(guān)的展示出來(lái)
安裝:npm install --save-dev webpack-bundle-analyzer
webpack.config.js配置:

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


package.json的"scripts"中添加:

"dev": "webpack --config webpack.config.js --progress"


執(zhí)行語(yǔ)句生成分析報(bào)告:npm run dev

5、打包去掉console.log等語(yǔ)句:uglifyjs-webpack-plugin
安裝:npm install uglifyjs-webpack-plugin
webpack.config.js中配置:

const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
? ? configureWebpack: (config) => {
? ? ? ? if (process.env.NODE_ENV === 'production') {
? ? ? ? ? ? return {
? ? ? ? ? ? ? ? plugins: [
? ? ? ? ? ? ? ? ? ? //打包環(huán)境去掉console.log
? ? ? ? ? ? ? ? ? ? new UglifyJsPlugin({
? ? ? ? ? ? ? ? ? ? ? ? uglifyOptions: {
? ? ? ? ? ? ? ? ? ? ? ? ? ? compress: {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? warnings: false,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drop_console: true, ?//注釋console
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drop_debugger: true, //注釋debugger
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pure_funcs: ['console.log'], //移除console.log
? ? ? ? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? }),
? ? ? ? ? ? ? ? ],
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

三、基礎(chǔ)的web技術(shù)優(yōu)化

1、開(kāi)啟gzip壓縮:compression-webpack-plugin
安裝://新版本不太兼容,推薦這個(gè)版本
npm install compression-webpack-plugin@6.1.1 --save-dev
在webpack.config.js中使用:

const CompressionWebpackPlugin = require('compression-webpack-plugin')
new CompressionWebpackPlugin({
? ? ? filename: '[path][base].gz',
? ? ? algorithm: 'gzip', ?// 壓縮算法,官方默認(rèn)壓縮算法是gzip
? ? ? test: /\.js$|\.css$|\.html$|\.eot$|\.woff$/, // 使用gzip壓縮的文件類(lèi)型
? ? ? threshold: 10240, ?// 以字節(jié)為單位壓縮超過(guò)此大小的文件,默認(rèn)是10240
? ? ? minRatio: 0.8, ?// 最小壓縮比率,默認(rèn)是0.8
? ? })


后端配置:
(1)Nginx:主要是下方的gizp配置哦,直接復(fù)制粘貼就可以使用啦,親測(cè)有效哦

server{
? ? //開(kāi)啟和關(guān)閉gzip模式
?? ?gzip on;
?? ?//gizp壓縮起點(diǎn),文件大于2k才進(jìn)行壓縮;設(shè)置允許壓縮的頁(yè)面最小字節(jié)數(shù),頁(yè)面字節(jié)數(shù)從header頭得content-length中進(jìn)行獲取。 默認(rèn)值是0,不管頁(yè)面多大都?jí)嚎s。建議設(shè)置成大于2k的字節(jié)數(shù),小于2k可能會(huì)越壓越大。
?? ?gzip_min_length 2k;
?? ?// 設(shè)置壓縮所需要的緩沖區(qū)大小,以4k為單位,如果文件為7k則申請(qǐng)2*4k的緩沖區(qū)?
?? ?gzip_buffers 4 16k;
?? ?// 設(shè)置gzip壓縮針對(duì)的HTTP協(xié)議版本
?? ?gzip_http_version 1.0;
?? ?// gzip 壓縮級(jí)別,1-9,數(shù)字越大壓縮的越好,也越占用CPU時(shí)間
?? ?gzip_comp_level 2;
?? ?//進(jìn)行壓縮的文件類(lèi)型
?? ?gzip_types text/plain application/javascript text/css application/xml;
?? ?// 是否在http header中添加Vary: Accept-Encoding,建議開(kāi)啟
?? ?gzip_vary on;
}


(2)express的中間件:compression,主要用于進(jìn)行g(shù)zip壓縮,通常用于web性能優(yōu)化,能對(duì)文本內(nèi)容進(jìn)行壓縮,一般用于html文件;
安裝:npm install compression --save
使用:

var compression = require('compression');
const app = express()
// 啟用gzip
app.use(compression());

2、瀏覽器緩存
對(duì)靜態(tài)資源進(jìn)行緩存,根據(jù)是否需要重新向服務(wù)器發(fā)起請(qǐng)求來(lái)分類(lèi),將http請(qǐng)求分為強(qiáng)制緩存和對(duì)比緩存

3、CDN的使用
瀏覽器從服務(wù)器上下載css、js和圖片等文件時(shí)都要和服務(wù)器連接,而大部分的服務(wù)器的帶寬都有限,如果超過(guò)限制,網(wǎng)頁(yè)就半天反應(yīng)不過(guò)來(lái),而CDN可以通過(guò)不同的域名來(lái)加載文件,從而使下載文件的并發(fā)連接數(shù)大大增加,且CDN具有更好的可用性,更低的網(wǎng)絡(luò)延遲和丟包率

4、使用Chrome Performance查找性能瓶頸
Chrome的Performance面板可以錄制一段時(shí)間內(nèi)的js執(zhí)行細(xì)節(jié)及時(shí)間,步驟:
a、打開(kāi)Chrome開(kāi)發(fā)者工具,點(diǎn)進(jìn)Performance面板
b、點(diǎn)擊Record開(kāi)始錄制
c、刷新頁(yè)面或展開(kāi)某個(gè)節(jié)點(diǎn)
d、點(diǎn)擊stop停止錄制,就可以查看了

四、網(wǎng)絡(luò)層面的優(yōu)化

1、重復(fù)請(qǐng)求的取消
第一次請(qǐng)求還沒(méi)回來(lái)之前就進(jìn)行了第二次同樣的請(qǐng)求時(shí),就應(yīng)該把第二次請(qǐng)求取消掉,防止重復(fù)請(qǐng)求;
在axios請(qǐng)求中進(jìn)行封裝,采用攔截器進(jìn)行處理,首先實(shí)現(xiàn)三個(gè)方法,當(dāng)請(qǐng)求方式、請(qǐng)求URL和攜帶參數(shù)都一致時(shí),就可以認(rèn)為是同樣的請(qǐng)求,因此在發(fā)起請(qǐng)求時(shí),可以根據(jù)當(dāng)前的請(qǐng)求方式、請(qǐng)求地址和攜帶的參數(shù)來(lái)生成一個(gè)唯一的key,同時(shí)為每個(gè)請(qǐng)求創(chuàng)建一個(gè)專(zhuān)屬的cancelToken,然后將key和cancelToken函數(shù)以鍵值對(duì)的形式保存到map對(duì)象中,使用map對(duì)象的好處就是可以快速判斷是否有重復(fù)的請(qǐng)求:

    // 用于根據(jù)當(dāng)前的請(qǐng)求信息生成請(qǐng)求的key
? ? generateReqKey(config) {
? ? ? const { url, method, params, data } = config;
? ? ? return [url, method, qs.stringify(params), qs.stringify(data)].join("&");
? ? },
? ? // 用于將當(dāng)前請(qǐng)求信息添加到pendingRequest對(duì)象中
? ? PendingRequest = new Map(),
? ? addPendingRequest(config) {
? ? ? const requestKey = this.generateReqKey(config)
? ? ? config.cancelToken = config.cancelToken || new axios.CancelToken((cancel) => {
? ? ? ? if(!this.PendingRequest.has(requestKey)) {
? ? ? ? ? this.PendingRequest.set(requestKey, cancel)
? ? ? ? }
? ? ? })
? ? },
? ? // 檢查是否有重復(fù)的請(qǐng)求,若存在則需要取消已經(jīng)發(fā)出的請(qǐng)求
? ? removeRequest(config) {
? ? ? const requestKey = this.generateReqKey(config)
? ? ? if (this.PendingRequest.has(requestKey)) {
? ? ? ? const CancelToken = this.PendingRequest.get(requestKey)
? ? ? ? CancelToken(requestKey)
? ? ? ? this.PendingRequest.delete(requestKey)
? ? ? }
? ? }

因?yàn)樾枰獙?duì)所有的請(qǐng)求都進(jìn)行處理,所以直接在攔截器來(lái)實(shí)現(xiàn)取消重復(fù)請(qǐng)求的操作,
(1)請(qǐng)求攔截器:作用是在請(qǐng)求發(fā)送前統(tǒng)一執(zhí)行某些操作,比如在請(qǐng)求頭中添加token字段
(2)響應(yīng)攔截器:作用是在接收到服務(wù)器響應(yīng)后統(tǒng)一執(zhí)行某些操作,比如根據(jù)不同的狀態(tài)碼進(jìn)行不同的響應(yīng)操作

    axios.interceptors.request.use(config => {
? ? ? // 檢查是否有重復(fù)的請(qǐng)求
? ? ? this.removeRequest(config)
? ? ? // 把當(dāng)前請(qǐng)求添加到PendingRequest對(duì)象中
? ? ? this.addPendingRequest(config)
? ? ? const token = localStorage.getItem('token')
? ? ? if(token) {
? ? ? ? config.headers.Authorization = `Bearer ${token}`
? ? ? }
? ? ? return config
? ? }, error => {
? ? ? return Promise.reject(error)
? ? })
? ? axios.interceptors.response.use(res => {
? ? ? // 從PendingRequest對(duì)象中移除請(qǐng)求
? ? ? this.removeRequest(res.config)
? ? ? const {data} = config;
? ? ? return data
? ? }, error => {
? ? ? // 從PendingRequest對(duì)象中移除請(qǐng)求
? ? ? this.removeRequest(error.config)
? ? ? return Promise.reject(error)
? ? })

2、限制失敗請(qǐng)求重試的次數(shù),避免無(wú)效請(qǐng)求過(guò)多,導(dǎo)致大量的資源消耗

//在main.js設(shè)置全局的請(qǐng)求次數(shù),請(qǐng)求的間隙
axios.defaults.retry = 4; ?// 請(qǐng)求次數(shù)
axios.defaults.retryDelay = 1000; ?// 請(qǐng)求間隙
//響應(yīng)攔截
axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) {
? ? var config = err.config;
? ? // 如果配置不存在或未設(shè)置重試選項(xiàng),則返回錯(cuò)誤信息
? ? if(!config || !config.retry) return Promise.reject(err);
?
? ? // 設(shè)置變量即跟蹤重試次數(shù)
? ? config.__retryCount = config.__retryCount || 0;
?
? ? // 檢查我們是否已經(jīng)超過(guò)了總重試次數(shù)
? ? if(config.__retryCount >= config.retry) {
? ? ? ? // 返回錯(cuò)誤信息
? ? ? ? return Promise.reject(err);
? ? }
?
? ? // 重試次數(shù)加1
? ? config.__retryCount += 1;
?
? ? // 創(chuàng)建延時(shí)器等待發(fā)送重試請(qǐng)求
? ? var backoff = new Promise(function(resolve) {
? ? ? ? setTimeout(function() {
? ? ? ? ? ? resolve();
? ? ? ? }, config.retryDelay || 1);
? ? });
?
? ? // 返回調(diào)用AXIOS來(lái)重試請(qǐng)求
? ? return backoff.then(function() {
? ? ? ? return axios(config);
? ? });
});

3、善用緩存,減小網(wǎng)絡(luò)請(qǐng)求的次數(shù)
4、斷網(wǎng)處理:
在vuex中存放network的狀態(tài),根據(jù)network的狀態(tài)判斷是否需要加載斷網(wǎng)組件,斷網(wǎng)情況就加載斷網(wǎng)組件,不加載對(duì)應(yīng)的頁(yè)面組件,點(diǎn)擊刷新,就跳轉(zhuǎn)到refresh頁(yè)面然后立即返回來(lái)實(shí)現(xiàn)重新獲取數(shù)據(jù),所以新建refresh.vue,在beforeRouteEnter鉤子中返回當(dāng)前頁(yè)面
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-771043.html

// 斷網(wǎng)頁(yè)面
<template> ?
? ? <div id="app"> ? ?
? ? ? ? <div v-if="!network"> ? ? ?
? ? ? ? ? ? <h3>我沒(méi)網(wǎng)了</h3> ? ? ?
? ? ? ? ? ? <div @click="onRefresh">刷新</div> ? ? ?
? ? ? ? </div> ? ?
? ? ? ? <router-view/> ? ? ?
? ? </div>
</template>

<script>
? ? import { mapState } from 'vuex';
? ? export default { ?
? ? ? ? name: 'App', ?
? ? ? ? computed: { ? ?
? ? ? ? ? ? ...mapState(['network']) ?
? ? ? ? }, ?
? ? ? ? methods: { ? ?
? ? ? ? ? ? // 通過(guò)跳轉(zhuǎn)一個(gè)空頁(yè)面再返回的方式來(lái)實(shí)現(xiàn)刷新當(dāng)前頁(yè)面數(shù)據(jù)的目的
? ? ? ? ? ? onRefresh () { ? ? ?
? ? ? ? ? ? ? ? this.$router.replace('/refresh') ? ?
? ? ? ? ? ? } ?
? ? ? ? }
? ? }
</script>
在refresh.vue頁(yè)面中:
// refresh.vue
beforeRouteEnter (to, from, next) {
? ? next(vm => { ? ? ? ? ? ?
? ? ? ? vm.$router.replace(from.fullPath) ? ? ? ?
? ? }) ? ?
}

到了這里,關(guān)于Vue項(xiàng)目性能優(yōu)化方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 性能優(yōu)化之--- 項(xiàng)目打包優(yōu)化(vue)

    項(xiàng)目體積小也是優(yōu)化性能的一個(gè)方向,這里以 Vue 工程為例; 當(dāng)剛運(yùn)行項(xiàng)目的時(shí)候,發(fā)現(xiàn)剛進(jìn)入頁(yè)面,就將所有的js文件和css文件加載了進(jìn)來(lái),這一進(jìn)程十分的消耗時(shí)間。 如果打開(kāi)哪個(gè)頁(yè)面就對(duì)應(yīng)的加載響應(yīng)頁(yè)面的js文件和css文件,那么頁(yè)面加載速度會(huì)大大提升。 vue官方文檔

    2024年02月09日
    瀏覽(17)
  • Vue 項(xiàng)目性能優(yōu)化 — 實(shí)踐指南

    Vue 項(xiàng)目性能優(yōu)化 — 實(shí)踐指南

    Vue 框架通過(guò)數(shù)據(jù)雙向綁定和虛擬 DOM 技術(shù),幫我們處理了前端開(kāi)發(fā)中最臟最累的 DOM 操作部分, 我們不再需要去考慮如何操作 DOM 以及如何最高效地操作 DOM;但 Vue 項(xiàng)目中仍然存在項(xiàng)目首屏優(yōu)化、Webpack 編譯配置優(yōu)化等問(wèn)題,所以我們?nèi)匀恍枰リP(guān)注 Vue 項(xiàng)目性能方面的優(yōu)化,

    2024年02月11日
    瀏覽(25)
  • vue前端性能優(yōu)化之分包策略、異步組件、Gzip壓縮

    vue前端性能優(yōu)化之分包策略、異步組件、Gzip壓縮

    目錄 一、Gzip壓縮 二、異步組件 三、分包策略 最后 ? ????????項(xiàng)目的性能優(yōu)化是有完整項(xiàng)目經(jīng)歷的開(kāi)發(fā)者都會(huì)遇到得一個(gè)問(wèn)題。這是整個(gè)項(xiàng)目開(kāi)發(fā)最后的一步,也是最關(guān)鍵的一步,做一個(gè)項(xiàng)目并不是單單完成功能就算結(jié)束了,作為開(kāi)發(fā)者,更要站在用戶(hù)角度去進(jìn)行項(xiàng)目體

    2024年02月09日
    瀏覽(24)
  • 關(guān)于 Vue 項(xiàng)目性能優(yōu)化技巧分享

    關(guān)于 Vue 項(xiàng)目性能優(yōu)化技巧分享

    前言 Vue 框架通過(guò)數(shù)據(jù)雙向綁定和虛擬 DOM 技術(shù),幫我們處理了前端開(kāi)發(fā)中最臟最累的 DOM 操作部分, 我們不再需要去考慮如何操作 DOM 以及如何最高效地操作 DOM;但 Vue 項(xiàng)目中仍然存在項(xiàng)目首屏優(yōu)化、Webpack 編譯配置優(yōu)化等問(wèn)題,所以我們?nèi)匀恍枰リP(guān)注 Vue 項(xiàng)目性能方面的優(yōu)

    2024年02月04日
    瀏覽(20)
  • 前端項(xiàng)目部署自動(dòng)檢測(cè)更新后通知用戶(hù)刷新頁(yè)面(前端實(shí)現(xiàn),技術(shù)框架vue、js、webpack)——方案二:輪詢(xún)?nèi)ヅ袛喾?wù)端的index.html是否跟當(dāng)前的index.html的腳本hash值一樣

    前端項(xiàng)目部署自動(dòng)檢測(cè)更新后通知用戶(hù)刷新頁(yè)面(前端實(shí)現(xiàn),技術(shù)框架vue、js、webpack)——方案二:輪詢(xún)?nèi)ヅ袛喾?wù)端的index.html是否跟當(dāng)前的index.html的腳本hash值一樣

    當(dāng)我們重新部署前端項(xiàng)目的時(shí)候,如果用戶(hù)一直停留在頁(yè)面上并未刷新使用,會(huì)存在功能使用差異性的問(wèn)題,因此,當(dāng)前端部署項(xiàng)目后,需要提醒用戶(hù)有去重新加載頁(yè)面。 vue、js、webpack 根據(jù)打完包之后生成的 script src 的hash值去判斷 ,每次打包都會(huì)生成唯一的hash值,只要輪

    2024年01月23日
    瀏覽(52)
  • vue項(xiàng)目前端通用埋點(diǎn)方案

    埋點(diǎn)方案主要流程 1、 在 main.js 文件中生成 capol-log-uuid 埋點(diǎn)會(huì)話(huà)唯一id,并存入 sessionStorage 中 2、在 utils 文件夾下添加 commonLog.js 公共埋點(diǎn)方法類(lèi),提供3個(gè)方法: 添加埋點(diǎn)函數(shù): CapolLog.pointAdd(dynamicInfo, el) 更新埋點(diǎn)函數(shù): CapolLog.pointUpdate(id, type,updateData) 更新埋點(diǎn)輔助函數(shù):

    2024年02月21日
    瀏覽(14)
  • 深入了解Vue-loader: 優(yōu)化Vue.js項(xiàng)目開(kāi)發(fā)的利器

    深入了解Vue-loader: 優(yōu)化Vue.js項(xiàng)目開(kāi)發(fā)的利器

    ? Vue-loader是一個(gè)用于加載Vue組件的webpack插件。它允許你編寫(xiě)單文件組件(SFC),并將它們轉(zhuǎn)換為JavaScript模塊,以便在瀏覽器中使用。這個(gè)工具非常有用,因?yàn)樗梢詭椭阍陂_(kāi)發(fā)過(guò)程中更好地組織和管理你的Vue組件。 如何安裝: ?安裝完畢后,你需要在webpack配置文件中添

    2024年01月17日
    瀏覽(26)
  • 前端性能優(yōu)化——內(nèi)存問(wèn)題

    前端性能優(yōu)化——內(nèi)存問(wèn)題

    過(guò)高的內(nèi)存資源占用會(huì)導(dǎo)致 Web 應(yīng)用變慢,甚至崩潰??梢酝ㄟ^(guò) window.performance.memory 查看瀏覽器的內(nèi)存限制等信息。 Web 前端開(kāi)發(fā)中存在許多內(nèi)存問(wèn)題,下面是一些常見(jiàn)的內(nèi)存問(wèn)題: 內(nèi)存泄漏:當(dāng)一個(gè)對(duì)象不再被使用,但仍然占用著內(nèi)存空間,就會(huì)導(dǎo)致內(nèi)存泄漏問(wèn)題。在 Web

    2024年02月16日
    瀏覽(33)
  • 【前端】vue.js從入門(mén)到項(xiàng)目實(shí)戰(zhàn)筆記

    【前端】vue.js從入門(mén)到項(xiàng)目實(shí)戰(zhàn)筆記

    【前端目錄貼】 文本插值中的代碼被解釋為節(jié)點(diǎn)的文本內(nèi)容,而HTML插值中的代碼則被渲染為視圖節(jié)點(diǎn)。 3.1.1 文本插值 文本插值的方式:用 雙大括號(hào) 將要綁定的變量、值、表達(dá)式括住就可以實(shí)現(xiàn),Vue將會(huì) 獲取計(jì)算后的值 ,并以 文本的形式 將其展示出來(lái)。 結(jié)果: 3.1.2 HTM

    2024年01月21日
    瀏覽(30)
  • vite+vue3+ts搭建項(xiàng)目八(打包性能優(yōu)化三:使用CDN)

    vite+vue3+ts搭建項(xiàng)目八(打包性能優(yōu)化三:使用CDN)

    使用vite-plugin-cdn-import 下載npm包 官方github:https://github.com/MMF-FE/vite-plugin-cdn-import 開(kāi)發(fā)環(huán)境使用本地的npm包,cdn是打包時(shí)候才生效 在vite.config.ts中通過(guò)importToCDN引入 注意事項(xiàng) :網(wǎng)上很多教程,還需要在 build 的 rollupOptions 添加對(duì)應(yīng)的 external ,如上注釋所示,其實(shí)是不需要的,

    2024年02月02日
    瀏覽(98)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包