日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

大型前端應用如何做系統融合?

來源: 責編: 時間:2024-05-29 08:57:59 207觀看
導讀1. 背景介紹1.1業務介紹A平臺與B平臺同屬于同一系統鏈路上,前者主要致力于為用戶提供注冊入駐服務,后者則專注于提供具體業務操作服務。兩者皆為運營人員所依賴的在線管理工具。1.2現狀分析目前這兩個平臺服務于同一業

1. 背景介紹

1.1業務介紹

A平臺與B平臺同屬于同一系統鏈路上,前者主要致力于為用戶提供注冊入駐服務,后者則專注于提供具體業務操作服務。兩者皆為運營人員所依賴的在線管理工具。83a28資訊網——每日最新資訊28at.com

1.2現狀分析

目前這兩個平臺服務于同一業務方,且B應用的頁面已經100%嵌入到了A應用的平臺上,除此以外目前存在系統上及體驗上的痛點如下:83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

所以當時我們考慮既然服務于同一業務方是否能在代碼層面上將兩個平臺進行融合,通過系統的融合來達到優化用戶體驗以及降本增效的效果呢?83a28資訊網——每日最新資訊28at.com

2.成果展示

平臺融合后,主要的優化點體現在以下四方面:83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

優化前(跳轉單個頁面白屏時間達2998ms左右):83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

優化后(跳轉單個頁面白屏時間800ms左右):83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

3. 具體措施

3.1方案調研

3.1.1部署方式

?部署優化:A應用前后端合部署,現計劃分離前端獨立部署;83a28資訊網——每日最新資訊28at.com

?資源節約:經行云部署平臺調研,擬采用混合部署策略,將A應用與B應用前端靜態資源集中部署于一組容器,以優化資源利用;83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

3.1.2代碼倉庫整合

?A應用的三個項目與后端共享一個代碼倉庫,采用統一的編碼標準;而B應用則使用獨立的代碼倉庫,需從中分離出前端代碼,并確保分離過程不影響現有配置;83a28資訊網——每日最新資訊28at.com

3.1.3項目框架

?4個項目的技術選型框架都為vue2,依賴項略有不同;83a28資訊網——每日最新資訊28at.com

3.1.3系統權限

?A應用和B應用為erp登錄;83a28資訊網——每日最新資訊28at.com

3.2架構設計

為了讓用戶融合無體驗差別,兩個平臺的用戶繼續使用各自的域名進行訪問,融合后的項目可以自動識別當前環境,加載對應的內容;保證融合前后用戶查看的內容是一致的;83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

3.3具體方案

3.3.1 目錄結構設計

針對融合,我們首先考慮的是融合后如何防止文件沖突,減少融合的復雜度,降低出問題的概率。保證兩個系統能正常運行;拆分邏輯分以下三個方面:83a28資訊網——每日最新資訊28at.com

1)文件拆分與分類83a28資訊網——每日最新資訊28at.com

兩個系統涉及到幾十個文件,經過分析,我們將其拆分成以下幾部分內容:【頁面文件、公共組件文件、mock文件、AxPI接口文件、基礎請求封裝文件、路由組件文件、Store文件、公共樣式文件、公共方法組件、mainjs文件、index.html文件】83a28資訊網——每日最新資訊28at.com

2)結構整合與差異化處理83a28資訊網——每日最新資訊28at.com

由于兩個項目的結構相似,我們可以針對各個部分進行整合。整體的思路是,對于差異比較大的文件,建立兩個獨立的文件夾,分別包含系統A和系統B的內容;然后通過一個index文件,識別到當前的運行環境是系統A還是系統B,再分別加載對應的內容;83a28資訊網——每日最新資訊28at.com

3)內容融合與沖突解決83a28資訊網——每日最新資訊28at.com

針對差異比較小或者無差異的文件,我們將文件內容進行融合。對于沖突的內容,我們進行了手動修改,并對全局引用部分進行同步修改;83a28資訊網——每日最新資訊28at.com

├── root│   ├── mocks│   ├── public│   ├── src│   │   ├── api│   │   │   ├── apiA      // 存儲 A 業務請求接口│   │   │   ├── apiB       // 存儲 B 業務請求接口│   │   │   ├── apiC         // 存儲 C 業務請求接口│   │   │   ├── baseHttp.js   // 封裝基礎請求│   │   │   ├── ARequest.js   // A業務的公共處理,請求header和響應code碼等處理│   │   │   ├── BRequest.js  //  B業務的公共處理,請求header和響應code碼等處理│   │   │   ├── CRequest.js   // C業務的公共處理,請求header和響應code碼等處理│   │   │   ├── DRequest.js  //  D業務的公共處理,請求header和響應code碼等處理│   │   ├── assets│   │   │   ├── icons     // icon內容│   │   ├── common│   │   │   ├── config│   │   │   ├── styles      // 一些公共的樣式│   │   ├── components      // 公共組件│   │   ├── directive       // 自定義指令│   │   ├── layout        //公共布局│   │   ├── router│   │   │   ├── a.js   // 對應a應用│   │   │   ├── b.js   // 對應b應用│   │   │   ├── c.js   // 對應c應用│   │   │   ├── index.js│   │   ├── store│   │   │   ├── modules│   │   │   ├── getters.js│   │   │   ├── index.js│   │   ├── utils   │   │   ├── views│   │   │   ├── a    // a 業務文件│   │   │   ├── b    // b 業務文件│   │   │   ├── c    // c 業務文件│   │   ├── main.js│   │   └── App.vue│   ├── env│   ├── package.json

3.3.2. 應用類型判斷

應用類型判斷是我們重要的一環,是我們識別環境的基礎,當用戶通過不同的域名訪問到應用的時候,前端維護一個映射表,不同的域名代表不同的應用;在main.js文件中會在第一時間執行判斷識別;83a28資訊網——每日最新資訊28at.com

let APPLICATION_TYPE = 'a'let host = window.location.host;// 維護域名列表,包含測試和線上環境const A_HOST = ['a.com','a_pre.com']const B_HOST = [] const C_HOST = []const D_HOST = []if(A_HOST.includes(host)){    APPLICATION_TYPE = 'a'}else if(B_HOST.includes(host)){    APPLICATION_TYPE = 'b'}else if(C_HOST.includes(host)){    APPLICATION_TYPE = 'c'}else if(D_HOST.includes(host)){    APPLICATION_TYPE = 'd'}// 掛載全局window._APPLICATION_TYPE = APPLICATION_TYPE

3.3.3. 路由設計

根據不同的域名獲取路由配置,根據路由配置生成路由;系統A和系統B各自維護一個路由列表;當從后端請求回來路由結構之后,根據不同的應用映射不同的文件內容;其中路由path保持不變,compoent增加前綴(應用類別)找到對應的應用下的組件;83a28資訊網——每日最新資訊28at.com

?第一步:前端獲取當前域名,確認當前應用83a28資訊網——每日最新資訊28at.com

根據全局的 APPLICATION_TYPE 字段識別

?第二步:前端維護一個路由列表83a28資訊網——每日最新資訊28at.com

let router=[{    path: '/home',    component: Layout,    meta: {  title: '首頁', icon: 'el-icon-s-grid', alwaysShow: true },    redirect: '/home',    children: [      {        path: '/home',        component: () => import('@/views/home/index'),        name: 'home',        meta: { title: '首頁', icon: ''}      }    ]  }]

?第三步:根據當前應用請求后端接口,獲取路由配置信息(component的路徑前拼接各個應用的文件名)83a28資訊網——每日最新資訊28at.com

let RouterApi={'a':'/api1','b':'/api2','c':'api3'}api.get(RouterApi[APPLICATION_TYPE])component='各個應用文件名'+接口返回路徑

?第四步:針對在路由信息放置在前端的應用,前端維護一個路由的配置信息表83a28資訊網——每日最新資訊28at.com

import dRouter from './d.json'if(APPLICATION_TYPE==='d'){   router=dRouter}

?第五步:根據路由配置信息,生成路由結構83a28資訊網——每日最新資訊28at.com

?第六步:實例化Vue對象83a28資訊網——每日最新資訊28at.com

3.3.4. 環境變量設計

環境主要分為以下幾種:mock環境、本地開發環境、測試環境、線上環境83a28資訊網——每日最新資訊28at.com

不同的環境對應不同的變量文件,在變量文件中設置每個端需要用到的參數,結合 APPLICATION_TYPE 和變量文件的配置,獲取到對應的參數83a28資訊網——每日最新資訊28at.com

示例:83a28資訊網——每日最新資訊28at.com

# .env.pruduction# a 業務VUE_APP_A_BASEURL = ''   # b 業務VUE_APP_B_BASEURL = ''# c 業務VUE_APP_C_BASEURL = ''# d業務VUE_APP_D_BASEURL = ''

3.3.5. 請求設計

1)公共請求的封裝83a28資訊網——每日最新資訊28at.com

封裝基礎的公共請求createHttp.js,各業務基于公共的請求和各自的code碼,請求參數等信息進行再次封裝,然后可以按照業務需求調用;83a28資訊網——每日最新資訊28at.com

?基礎請求:createHttp.js83a28資訊網——每日最新資訊28at.com

?業務公共封裝:83a28資訊網——每日最新資訊28at.com

a. ARequest.js(A業務公共參數和code碼處理)83a28資訊網——每日最新資訊28at.com

b. BRequest.js (B業務公共參數和code碼處理)83a28資訊網——每日最新資訊28at.com

c. CRequest.js(C業務公共參數和code碼處理)83a28資訊網——每日最新資訊28at.com

d. DRequest.js(D業務公共參數和code碼處理)83a28資訊網——每日最新資訊28at.com

?業務層調用:83a28資訊網——每日最新資訊28at.com

a. api/apiA A業務接口83a28資訊網——每日最新資訊28at.com

b. api/apiB B業務接口83a28資訊網——每日最新資訊28at.com

c. api/apiC C業務接口83a28資訊網——每日最新資訊28at.com

// 公共請求封裝  baseHttp.jsexport const createHttp = (baseUrl, successFun = () => {}, errorFun = () => {}, requestInterceptor = () => {}) => {  const http = axios.create({    baseURL: baseUrl,    timeout: 5 * 60 * 1000,    withCredentials: true  })  // http request 攔截器  http.interceptors.request.use(    async config => {      await requestInterceptor(config)      return config    },    err => {      return Promise.reject(err)    }  )  // http response 攔截器  http.interceptors.response.use(successFun, errorFun)  return http}
2) 直接調用后端服務請求封裝
//A業務基礎請求 function requestInterceptor(){    // A系統公共請求參數處理... }function successFn(){    // A系統公共響應結果處理 統一新增}function errorFn(){    // A共異常處理 包括code碼等情況}export default createHttp(baseUrl,successFn,errorFn,requestinterceptor)

3)業務接口使用,根據不同的業務劃分不同的目錄分支83a28資訊網——每日最新資訊28at.com

// A業務請求調用ARequest.get(url,{params:data})
//B業務請求調用BRequest.post(url,{params:data})

3.3.6. 權限和登錄

根據應用類型字段APPLICATION_TYPE,識別不同的環境,請求不同的服務端接口;不同的服務端代表了不同的應用;83a28資訊網——每日最新資訊28at.com

針對不同的應用的未登錄情況,前端維護多套登錄處理邏輯,根據應用類型進行不同的處理邏輯;83a28資訊網——每日最新資訊28at.com

3.3.7. 公共函數設計

創建一個公共的utils文件夾,針對兩個項目中的公共函數進行合并,針對有沖突的函數,進行命名修改,全局引入的部分進行路徑和函數的同步修改;83a28資訊網——每日最新資訊28at.com

3.3.8. 腳手架配置設計

梳理了兩個項目的腳手架配置差異項及各個配置的作用,對配置作了部分的修改和優化,在滿足原有的功能情況下不影響正常的項目運行;83a28資訊網——每日最新資訊28at.com

3.3.9. Vuex store設計

store的整體結構保持不變,在項目引用的地址也保持不變,由于項目中使用store的地方較多,保持結構不變能保證改動成本最小,針對兩個項目中模塊名重復的情況,手動把模塊里的內容進行合并;83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

針對現有的名稱重復內容不一樣的函數,根據應用類型字段 APPLICATION_TYPE 把兩個函數進行融合進行分別處理;83a28資訊網——每日最新資訊28at.com

3.3.10. 頁面引用設計

?引用方式變更83a28資訊網——每日最新資訊28at.com

由于業務需求,應用A中嵌套了應用B的頁面,之前通過iframe引用。融合后,頁面文件和組件不再隔離,可以直接引入應用B的文件和組件;83a28資訊網——每日最新資訊28at.com

?后端數據打通83a28資訊網——每日最新資訊28at.com

應用A的后端服務器上有一些功能,如下載列表,應用B項目需要使用時因數據不通難以直接引用。前端融合后,可以在應用B中直接引用應用A的頁面組件,實現業務的順暢使用。效果如下:83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

83a28資訊網——每日最新資訊28at.com

4. 總結

在經歷了為期兩個月的緊張工作后,我們成功地將兩個大型項目進行了深度整合,取得了顯著的階段性成果。通過這一融合過程,我們不僅統一了項目的代碼規范和架構,還顯著提升了組件的復用率。盡管在這個過程中我們遇到了諸多挑戰和曲折,但最終的成果——用戶體驗的顯著提升——使一切努力都顯得彌足珍貴。83a28資訊網——每日最新資訊28at.com

我們深知,每一個成功的項目背后都有無數次的嘗試和優化。在這個過程中,我們不斷學習、適應和完善,最終實現了項目的無縫融合。我們相信,這段經歷和我們所取得的成果,不僅為我們團隊帶來了寶貴的經驗和教訓,也可能為那些正在經歷類似挑戰的同學提供了一些啟示和幫助。83a28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-91371-0.html大型前端應用如何做系統融合?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 12306技術內幕,你知道嗎?

下一篇: 為什么 Go Protobuf 不支持標簽注入?

標簽:
  • 熱門焦點
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • 把LangChain跑起來的三個方法

    使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • OPPO Reno10 Pro英雄聯盟定制禮盒公布:薩勒芬妮同款配色夢幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機,全系標配了超光影長焦鏡頭,是迄今為止拍照
  • 利用職權私自解除被封帳號 Meta開除20多名員工

    11月18日消息,據外媒援引知情人士表示,過去一年時間內,Facebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內部系統以不當方式重置用戶帳號,其
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品久久国产精品99gif | 欧美日韩一二三四五区| 久久国产精品黑丝| 久久影音先锋| 欧美国产一区在线| 欧美视频免费在线观看| 国产色婷婷国产综合在线理论片a| 国产日韩在线视频| 91久久久久久久久| 亚洲视频日本| 久久久亚洲精品一区二区三区 | 一区二区三区精品视频在线观看| 午夜精品久久久久久久| 久久久综合网| 欧美日韩精品二区| 国产日韩欧美高清免费| 亚洲黄色影院| 亚洲男女自偷自拍| 蜜桃av一区二区| 国产精品免费aⅴ片在线观看| 国产一区二区三区成人欧美日韩在线观看 | 久久精品国产91精品亚洲| 欧美大片第1页| 国产精品久久婷婷六月丁香| 精品动漫一区| 亚洲午夜国产成人av电影男同| 久久久久久久综合日本| 欧美日韩免费视频| 黄页网站一区| 一二三区精品福利视频| 久久久亚洲高清| 欧美午夜精品久久久久久人妖| 狠狠干综合网| 亚洲一区二区三区精品在线| 美女视频网站黄色亚洲| 国产伦精品免费视频| 亚洲精品专区| 久久在线免费观看| 国产欧美日韩免费看aⅴ视频| 亚洲精品欧洲| 久久全球大尺度高清视频| 国产精品久久福利| 日韩视频免费观看高清完整版| 久久精品视频在线| 国产精品免费一区二区三区在线观看 | 久久av二区| 国产精品草莓在线免费观看| 亚洲国产免费看| 久久久91精品国产| 国产精品一区二区三区乱码| 一区二区欧美日韩| 欧美黄色日本| 亚洲第一在线视频| 久久久xxx| 国产欧美一区二区三区另类精品 | 欧美精品一区二区三区蜜桃| 一区在线播放视频| 久久av一区二区三区漫画| 国产精品porn| 99国内精品久久| 99在线热播精品免费99热| 久久久999国产| 欧美午夜视频| 1204国产成人精品视频| 欧美亚洲自偷自偷| 欧美日韩国产在线一区| 在线观看日韩专区| 欧美一区免费| 国产精品igao视频网网址不卡日韩| 亚洲国产精品久久久久秋霞蜜臀| 性色av一区二区三区红粉影视| 欧美日韩日本视频| 亚洲国产日韩欧美在线图片| 亚洲欧美在线磁力| 欧美日韩免费观看一区二区三区| 亚洲第一成人在线| 久久国内精品自在自线400部| 欧美午夜精品电影| av成人天堂| 欧美va日韩va| 亚洲第一成人在线| 久久裸体艺术| 国产亚洲欧美日韩精品| 亚洲在线视频| 欧美午夜精品久久久久久孕妇| 亚洲区中文字幕| 麻豆精品91| 激情成人在线视频| 欧美主播一区二区三区美女 久久精品人 | 99在线|亚洲一区二区| 久久尤物电影视频在线观看| 国产主播一区二区三区四区| 亚洲欧美日韩一区| 欧美性猛交xxxx免费看久久久 | 欧美一区二区视频免费观看| 国产精品在线看| 亚洲综合视频一区| 国产精品成人观看视频免费| 在线视频一区二区| 欧美日韩精品一区二区| 日韩亚洲欧美成人一区| 欧美福利一区| 亚洲毛片在线看| 欧美精品一区二区三区高清aⅴ| 亚洲精品欧洲| 欧美人与禽猛交乱配视频| 亚洲精品日本| 欧美欧美天天天天操| 日韩视频免费观看| 欧美四级伦理在线| 亚洲综合色自拍一区| 国产精品午夜电影| 欧美在线高清视频| 激情欧美日韩| 欧美福利视频在线观看| 亚洲欧洲视频在线| 欧美精品在线免费| 亚洲视频www| 国产精品亚洲综合| 久久精品91久久香蕉加勒比 | 欧美淫片网站| 精品成人国产| 欧美激情第1页| 一区二区三区日韩在线观看| 欧美系列亚洲系列| 欧美一区二区高清| 黄色成人免费网站| 欧美成人午夜免费视在线看片| 日韩视频―中文字幕| 欧美视频一区二区三区…| 亚洲一区二区三区影院| 国产日韩精品电影| 久久综合亚洲社区| 夜夜嗨av一区二区三区网站四季av | 亚洲欧洲综合另类| 欧美日韩一区二区国产| 亚洲永久免费精品| 国产一区二区三区自拍| 女人香蕉久久**毛片精品| 制服丝袜激情欧洲亚洲| 国产亚洲精品一区二555| 欧美aa国产视频| 亚洲天堂av高清| 国产一区二区三区网站| 欧美国产第一页| 亚洲综合成人在线| 在线视频观看日韩| 欧美视频在线不卡| 久久精品卡一| 夜夜躁日日躁狠狠久久88av| 国产精品一区二区久激情瑜伽| 久久久久网址| 99精品国产福利在线观看免费| 国产欧美日韩精品a在线观看| 免费精品99久久国产综合精品| 在线一区二区日韩| 狠狠色狠狠色综合日日五| 欧美人成网站| 久久国产精品久久久久久| 91久久精品国产91久久| 国产欧美精品在线| 欧美黄色精品| 久久成人18免费观看| 中文久久乱码一区二区| 国产一区二区三区无遮挡| 欧美午夜精品电影| 蜜桃av久久久亚洲精品| 亚洲欧美日韩精品一区二区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美日韩国产精品专区| 久久国产88| 亚洲精品日韩久久| 国产一区久久久| 欧美日一区二区在线观看| 久久久另类综合| 亚洲一区激情| 亚洲欧洲精品一区二区三区 | 国产精品久久久久久久久久久久久| 久久婷婷综合激情| 亚洲综合日韩| 日韩视频第一页| 韩日午夜在线资源一区二区| 欧美午夜电影在线观看| 欧美激情一区二区三区四区 | 国产精品普通话对白| 牛牛国产精品| 欧美在线播放一区二区| 一区二区三区产品免费精品久久75 | 99re8这里有精品热视频免费 | 亚洲欧美国产精品va在线观看| 亚洲黄色免费电影| 国产日韩在线亚洲字幕中文| 欧美日韩免费高清一区色橹橹| 久久久久国色av免费观看性色| 亚洲综合色视频| 一区二区三区高清在线| 亚洲国产欧美不卡在线观看| 韩国福利一区| 国产精品亚洲综合| 欧美日韩在线观看视频| 可以看av的网站久久看| 欧美中文字幕第一页| 香蕉久久夜色| 亚洲一二三区在线|