日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一文帶你了解Vue灰度發(fā)布

前言

什么是灰度發(fā)布?百度百科的解釋如下。

創(chuàng)新互聯(lián)建站是一家專業(yè)提供葉城企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、H5場(chǎng)景定制、小程序制作等業(yè)務(wù)。10年已為葉城眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

    灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。AB test就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用A,一部分用戶開始用B,如果用戶對(duì)B沒有什么反對(duì)意見,那么逐步擴(kuò)大范圍,把所有用戶都遷移到B上面來?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度。

從上可以看出,灰度發(fā)布的主要作用有以下幾點(diǎn):

  1. 降低直接全量發(fā)布帶來的影響,讓少部分用戶先使用新版本,如發(fā)現(xiàn)問題則及時(shí)做好修復(fù),驗(yàn)證無重大問題則全量發(fā)布新功能
  2. 通過新老版本的數(shù)據(jù)對(duì)比,決定新版本是否需要全量發(fā)布

概述

灰度發(fā)布的方式有很多,按端可以區(qū)分服務(wù)端,客戶端,Web前端都可以做,沒有最好,只有更適合自己的業(yè)務(wù)場(chǎng)景。

如上可以看到常見的幾種灰度發(fā)布的方式,都有各自的優(yōu)缺點(diǎn),由于我們公司有完善的大數(shù)據(jù)AB test方案,所以前端只需關(guān)注接口返回的字段標(biāo)識(shí),來做具體的頁面加載邏輯,今天重點(diǎn)講述在前端中使用Vue框架中如何做灰度發(fā)布。在Vue中主要可以分為以下兩種情況:

組件級(jí)別:

  1. 組件級(jí)別動(dòng)態(tài)控制只需后端回傳對(duì)應(yīng)方案標(biāo)識(shí)即可。

頁面級(jí)別:

  1. 前端頁面訪問地址不變,同后端人員約定好AB test 標(biāo)記字段,前端根據(jù)字段返回不同的內(nèi)容加載對(duì)應(yīng)的頁面。
  2. 新舊功能區(qū)分兩個(gè)頁面地址,跳轉(zhuǎn)頁面地址由后端控制,此方案前端不需要太多改動(dòng),此文就不多說明。

先來看看日常處理的方式,一個(gè)頁面可能會(huì)存在多個(gè)地方判斷AB test 邏輯,或者是更多的AB test同時(shí)進(jìn)行,這樣的頁面代碼邏輯復(fù)雜度相對(duì)比較高,也不夠整潔易懂,當(dāng)有新的AB test加入或者有AB test需要決策的時(shí)候,修改代碼的成本較高,降低了代碼維護(hù)的效率。


接下來就開始我們今天文章的正題,看看有哪些方式可以解決以上的問題。

組件級(jí)別

如只是簡(jiǎn)單的兩個(gè)小組件功能的灰度則可以直接用 v-if 處理


如有多個(gè)功能同時(shí)測(cè)試,可以通過 Vue 的元素加一個(gè)特殊的 isattribute 來實(shí)現(xiàn),currentTabComponent 可基于接口獲取或其他前端計(jì)算得出。

頁面級(jí)別

方案一 新增入口頁面分發(fā)

新增入口頁面,將新舊版本頁面升級(jí)為組件的方式引入,入口頁面增加接口查詢,通過 v-if 或通過 Vue 的 元素加一個(gè)特殊的 is 屬性來加載頁面組件。如下是通過接口查詢代碼示例,通過接口前置查詢會(huì)帶來一定的界面延遲加載,取決于接口的響應(yīng)速度,我們也可以通過在URL增加參數(shù)獲取,這時(shí)的URL由后端拼接好參數(shù)再返回,這樣就可以避免一次接口查詢。


這里直接這樣加載頁面級(jí)組件會(huì)導(dǎo)致此文件體積加大,可以將頁面組件的加載方式改為異步組件,提升頁面加載速度。

components: {
'index-a': () => import(/* webpackChunkName: "index-a" */ './index-a'),
'index-b': () => import(/* webpackChunkName: "index-b" */ './index-b')
}

方案二 高階組件方案

在路由配置中從接口獲取灰度標(biāo)識(shí)數(shù)據(jù),進(jìn)行路由分發(fā)。如果不想額外增加接口查詢的開銷,也可以將標(biāo)識(shí)數(shù)據(jù)從URL參數(shù)返回,此方式需要提前拼接好參數(shù)。

高階組件的好處是所有需要灰度的加載邏輯都在路由配置文件中,統(tǒng)一維護(hù),組件也可復(fù)用,不需要每個(gè)需要灰度的頁面都增加一個(gè)入口文件。

組件代碼


router.js 配置

{
path: 'originPath',
component: () => import('@/views/components/DynamicLoadComponent'),
name: 'originPath',
props: (route) => ({
renderComponent: new Promise((resolve, reject) => {
// 根據(jù) route 拼接參數(shù)獲取加載頁面
if (route.query.testA) {
resolve(import('@/views/testA'));
} else {
resolve(import('@/views/testB'));
}
// OR 根據(jù)接口返回標(biāo)識(shí)動(dòng)態(tài)加載頁面
getAPIData()
.then((response) => {
if (response.testA) {
resolve(import('@/views/testA'));
} else {
resolve(import('@/views/testB'));
}
})
.catch(reject);
}),
})
}

方案三 動(dòng)態(tài)Router.js引入

如果是有大面積的頁面替換,可采用這種方式。例如,后端開發(fā)語言更換導(dǎo)致接口地址及返回的字段內(nèi)容都發(fā)生變化,這樣會(huì)有一段時(shí)間的過渡使用,開發(fā)完一個(gè)頁面上線一個(gè)頁面,就可能會(huì)有5個(gè)頁面使用新的方案,5個(gè)頁面還是保留原始方案的情況。

改造router.js,將原始路由配置抽離到default.js中,再新建java.js將新方案路由配置寫入,基于前端計(jì)算或接口返回標(biāo)識(shí)動(dòng)態(tài)加載路由配置文件。

import Vue from 'vue'
import Router from 'vue-router'
import { isHitJavaAPI } from '@/config'
Vue.use(Router)
const router = new Router({
mode: 'history'
})
const computedRouterDirectory = (routeFile) => {
let routerConfig;
const requireRouter = require.context('.', false, /\.js$/);
routerConfig = requireRouter.keys().filter(file => file === `./${routeFile}.js`)[0];
if (routerConfig) {
routerConfig = requireRouter(routerConfig)
routerConfig.default && router.addRoutes(routerConfig.default);
}
}
if (isHitJavaAPI()) {
computedRouterDirectory('java')
} else {
computedRouterDirectory('default')
}

isHitJavaAPI方法中是命中灰度的邏輯,如果這里是前端做灰度,可基于deviceID或UA等計(jì)算。如果這里是調(diào)用接口獲取方案則需改為同步調(diào)用。

總結(jié)

本文主要介紹了頁面級(jí)別的幾個(gè)灰度方案,每個(gè)方案的試用場(chǎng)景都有各自的優(yōu)缺點(diǎn),如新增入口文件,主要是針對(duì)頁面變動(dòng)較大且當(dāng)前項(xiàng)目只會(huì)有一個(gè)在進(jìn)行中的灰度測(cè)試;高階組件適用于當(dāng)前項(xiàng)目有多個(gè)進(jìn)行中的灰度測(cè)試,則可復(fù)用組件;動(dòng)態(tài)加載路由配置文件主要針對(duì)于當(dāng)前項(xiàng)目有大規(guī)模的頁面UI或邏輯更換灰度測(cè)試;通過以上幾種方案都可極大的提升代碼的可維護(hù)性以及解耦灰度邏輯和業(yè)務(wù)代碼邏輯,當(dāng)灰度測(cè)試沒有問題需全量上線時(shí),我們只需修改入口邏輯即可,無需在業(yè)務(wù)代碼中去逐個(gè)修改灰度邏輯。

除開本文所介紹的幾種方式,也還有其他的加載方式,如路由鉤子函數(shù)攔截后做動(dòng)態(tài)跳轉(zhuǎn),或者請(qǐng)求到后端,后端做重定向處理等。每個(gè)方式都有各自的優(yōu)缺點(diǎn),就看是不是你當(dāng)前場(chǎng)景最合適的方案。如果你有其他的方案,歡迎留言和我們交流~


網(wǎng)頁名稱:一文帶你了解Vue灰度發(fā)布
新聞來源:http://m.5511xx.com/article/cocepjh.html