




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
FreeWheel在微服務架構(gòu)下的前端改造實踐FreeWheel在微服務架構(gòu)下的前端改造實踐1適用于微服務體系的前端SPA架構(gòu)自研前端框架SparkUI新舊代碼并存的漸進改造適用于微服務體系的前端SPA架構(gòu)2FreeWheel簡介FreeWheel簡介3適用于微服務體系的前端SPA架構(gòu)FreeWheel前端應用現(xiàn)狀持續(xù)開發(fā)迭代了10年多的RoR
Web應用20多個產(chǎn)品模塊,1200+頁面60余萬行代碼,其中包含近20萬行基于jQuery的傳統(tǒng)JS代碼7周的發(fā)版周期全棧開發(fā)工程師以及QA工程師改造目標前后端分離:后端微服務+前端SPA產(chǎn)品與技術(shù)緊密結(jié)合,采用主流的前端體驗和技術(shù)棧更加完整的前端UT和端到端自動化測試覆蓋更加靈活的發(fā)版周期全棧工程師適用于微服務體系的前端SPA架構(gòu)FreeWheel前端應用現(xiàn)4適用于微服務體系的前端SPA架構(gòu)Server-SideRenderingData
PushData
PreloadStaticAsset
ServerSPA
ASPA
BSPA
CContainerManagementService
RegistryBusinessService
XBusinessService
YBusinessService
ZAPIGateway:Auth,Throttling,Routing,
PermissionAuth
Service(SSO)Configuration
ManagementLoggingMonitor適用于微服務體系的前端SPA架構(gòu)Server-SideDat5適用于微服務體系的前端SPA架構(gòu)React+UnidirectionalDataFlow+Data
ModelRoutingFetchI18nPermissionReusableComponents
LibraryModule
1Module
2Module
3Module
4Module
5Module
6Module
7Module
8SPA
ASPA
BSPA
C適用于微服務體系的前端SPA架構(gòu)React+Unidir6前端SPA架構(gòu)
-
前端技術(shù)棧原有前端架構(gòu)新前端架構(gòu)服務器Rails+Unicorn+
Nginx基于Nginx+CDN的靜態(tài)資源服務器SSR服務器端渲染RailsMVC+
ERB/HAMLNode.js+React
SSR瀏覽器端JSjQueryReact.jsjQueryUISparkUIBootstrapReduxHandlebarsImmutable.jsUnderscoreReact-routerLodash請求數(shù)據(jù)jQuery.ajax+RESTful+
JSONFetchAPI+RESTful+
JSONJS組件基于jQuery定制開發(fā)基于React定制開發(fā)開發(fā)語?言Ruby+
ES5ES6/7+
JSX打包?工具RailsAssets
PipelineWebpack+Babel+
GulpUTRspecMocha+Chai+Sinon+
EnzymeCSSSCSSCSSModules+
PostCSS前端SPA架構(gòu)-前端技術(shù)棧原有前端架構(gòu)新前端架構(gòu)服務器R7Nexus&Artifactory前端SPA架構(gòu)
-
前端CI/CDGitlabJenkinsSrcRepo
CI
CDJenkinsStagingEnv.ProductionEnv.FrontendLibrary
SrcPrivate
NPMRepoNPM
PackagePublishUTBuildBusinessModuleFrontend
SrcArtifact
RepoMicro
ServiceSrcDocker
ImageRepoDocker
ImageDocker
ImageDeployablePackageDeployablePackageDoc
SiteGenerate
DocPackUTBuildPackUTBuildDockerBuildDockerBuildPromoteAuto
TestDeployPromoteAuto
TestDeployPromotePromoteLibraryMaintainerFrontendEngineerBackendEngineerNexus&Artifactory前端SPA架構(gòu)-8前端SPA架構(gòu)
–
容器化微服務容器化為前端開發(fā)測試提供良好的基礎開發(fā):UI-in-Docker工具(docker-compose)測試:DEP(DynamicEnvironmentProvisioning)平臺前端SPA架構(gòu)–容器化微服務容器化為前端開發(fā)測試提供良好9適用于微服務體系的前端SPA架構(gòu)自研前端框架SparkUI新舊代碼并存的漸進改造適用于微服務體系的前端SPA架構(gòu)10自研前端框架SparkUI介紹
–
面臨挑戰(zhàn)商業(yè)2B應用比起傳統(tǒng)2C應用主要有如下特征:軟件質(zhì)量標準高復雜的業(yè)務模型和邏輯跨功能模塊的關聯(lián)和交互單一客戶對需求的影響力強Reusability可復?用性Testability可測試性Flexibility靈活性Productivity開發(fā)效率前端自研前端框架SparkUI介紹–面臨挑戰(zhàn)商業(yè)2B應用比起11自研前端框架SparkUI介紹
–
面臨挑戰(zhàn)復雜的業(yè)務模型和邏輯復雜的UI交互PageComponentAComponentBSubComponentA1SubComponentA2SubComponentB1SubComponentB2Loading自研前端框架SparkUI介紹–面臨挑戰(zhàn)復雜的業(yè)務模型和12自研前端框架SparkUILibrary
ComponentsModula
FrameworkUtilitiesReduxReactImmutableJSBusinessModulesBusiness
ComponentsWebpack+
GulpBusinessLibsFramework*CodeName:
SparkUI自研前端框架SparkUILibraryComponent13自研前端框架SparkUI超過10萬行框架及可復用組件代碼,其中近4萬為UT單元測試,UT覆蓋率達到99.82%40個子package,其中包含超過50個各類用途的可重用React組件已有若干業(yè)務模塊基于SparkUI完成重構(gòu)或開發(fā)新功能自研前端框架SparkUI超過10萬行框架及可復用組件代碼,14自研前端框架SparkUI
–
可重用組件自研前端框架SparkUI–可重用組件15React可重用組件設計要點1.
無狀態(tài)組件(Stateless
Component)優(yōu)于狀態(tài)化組件(StatefulComponent)React可重用組件設計要點1.無狀態(tài)組件(Statele16React可重用組件設計要點2.
組合組件(Composing
Components)優(yōu)于具有DSL(DomainSpecific
Language)屬性的單一組件React可重用組件設計要點2.組合組件(Composin17React可重用組件設計要點3.
高階組件(HOC,Higher-Order
Components)優(yōu)于混合屬性(Mixins)React可重用組件設計要點3.高階組件(HOC,High18自研前端框架SparkUI
–
應用狀態(tài)管理React
OnlyFluxRedux優(yōu)點不依賴其他框架將state抽取為store,并以action?方式改變store,單向數(shù)據(jù)流從React中分離出來單?一store,singlesourceof
truth;?生態(tài)豐富缺點需要將深層組件的state
lift
up,導致頂層組件中的state越來越復雜、難以維護?一個應?用內(nèi)存在多個store,如果在store之間建?立關聯(lián),將導致store難于維護;waitFor接?口在實際應?用中會帶來較多問題對于?大型應?用,
store與業(yè)務數(shù)據(jù)差別較?大State
tree節(jié)點間的關聯(lián)較難實現(xiàn)流?行的處理SideEffects的?方案都不夠直接自研前端框架SparkUI–應用狀態(tài)管理ReactOn19自研前端框架SparkUI
–
應用狀態(tài)管理Modula應用狀態(tài)管理框架設計理念Application
State
=
Initial
State
+
Deltas,其中
Delta
是由
Actions
觸發(fā)的
[
借鑒Flux,Elm
]Application
State
可以由一棵
Model
Tree
來描述,這棵樹的每個節(jié)點都是一個可以描述有效業(yè)務實體的
Model
[借鑒Redux,Elm]由一個給定的
Application
State
到另一個State的
Transition
可以由
Model
Tree
提供的Reactions
所描述,
一次成功的
Action
到
Reaction
的匹配會將
Model
Tree
演變?yōu)橄乱粋€狀態(tài)
[
原創(chuàng)
]Side
Effect
是上述
state
transitions
的結(jié)果,
它包含了一個更新的model實例,以及0至多個callback
functions
[
借鑒Elm]自研前端框架SparkUI–應用狀態(tài)管理Modula應用20自研前端框架SparkUI
–
應用狀態(tài)管理自研前端框架SparkUI–應用狀態(tài)管理21自研前端框架SparkUI
–
前端路由曾封裝并使用react--‐router遇到的問題:應用狀態(tài)分散在react--‐router的state與Modula
Model(Redux
state)里,兩者經(jīng)常有同步問題解決思路:將路由相關的state也合并進Modula
Model中前端路由框架spark--‐router針對Model配置路由,Component根據(jù)Model切換相應界面Functional函數(shù)式配置,可測試性良好支持類似react--‐router
v4中的multi--‐match功能可與react--‐router共存自研前端框架SparkUI–前端路由曾封裝并使用reac22適用于微服務體系的前端SPA架構(gòu)自研前端框架SparkUI新舊代碼并存的漸進改造適用于微服務體系的前端SPA架構(gòu)23新舊代碼并存的漸進改造新舊代碼并存的漸進改造24新舊代碼并存的漸進改造新舊代碼并存的漸進改造25新舊代碼并存的漸進改造
–
混合工程結(jié)構(gòu)SPA前端代碼的源碼依舊放在Rails工程Module目錄下通過Webpack打包的bundle
JS/CSS也按照Module對資源文件的約定(convention)放在modules/my_module/app/assets/javascripts/my_module/compiled目錄下藉由Rails
Asset
Pipeline打包進Rails工程發(fā)布包進行統(tǒng)一部署仍使用Rails頁面模版作為入口新舊代碼并存的漸進改造–混合工程結(jié)構(gòu)SPA前端代碼的源碼26新舊代碼并存的漸進改造
–
混合工程結(jié)構(gòu)Rails的后端(頁面)路由委托給前端新舊代碼并存的漸進改造–混合工程結(jié)構(gòu)Rails的后端(頁27新舊代碼并存的漸進改造
–
獨立組件庫工程,原有混合?工程獨?立?工程版本管理任何對SparkUI的迭代都會直接影響到業(yè)務模塊業(yè)務模塊代碼可以更有計劃地升級SparkUI版本,在此之前?無須反復回歸測試開發(fā)效率SparkUI是純JS庫,Rails?工程開發(fā)環(huán)境給SparkUI開發(fā)帶來?一定負擔不同的發(fā)版節(jié)奏令SparkUI可以追逐更?高的代碼質(zhì)量??目前其源代碼已超10萬?行,單元測試覆蓋率?高達99.82%源碼權(quán)限任何業(yè)務模塊開發(fā)?人員均可修改SparkUI代碼帶來潛在代碼沖突,
獨?立的代碼庫可以隱藏部分SparkUI的內(nèi)部API或?工具代碼,防?止業(yè)務模塊中濫?用跨?工程復?用任何Rails?工程之外的?工程在利?用SparkUI時都會?比較繁瑣。作為標準NPM包復?用將SparkUI剝離為獨立純前端工程;利用Webpack打包并發(fā)布到公司Nexus上私有NPMRepository里;其他工程利用npm
install安裝依賴。新舊代碼并存的漸進改造–獨立組件庫工程,原有混合?工程獨28新舊代碼并存的漸進改造
–
新老JS代碼混用在SparkUI中開發(fā)了一個AdapterComponent統(tǒng)一封裝基于jQuery的老JS接口,利用componentDidMount完成其初始化嚴格控制新老代碼在運行時的邊界新舊代碼
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國四路數(shù)字硬盤錄像機數(shù)據(jù)監(jiān)測研究報告
- 【假期提升】五升六語文暑假作業(yè)(九)-人教部編版(含答案含解析)
- 2025年消防設施操作員之消防設備中級技能考前沖刺模擬試卷A卷含答案
- 2025年消防設施操作員之消防設備高級技能每日一練試卷A卷含答案
- 廣東省廣州市海珠區(qū)南武集團2022-2023學年八年級下學期期中物理試題(含答案)
- 煙草公司2023招聘考試全真筆試試題(綜合能力測試卷)和答案解析
- 酒店用品銷售代理合同(2篇)
- 采購分包配送合同(2篇)
- 廣告行業(yè)廣告創(chuàng)意版權(quán)保護協(xié)議
- 社區(qū)農(nóng)業(yè)服務提供合同書
- 和田玉知識培訓課件下載
- 2025年高縣縣屬國企業(yè)公開招聘工作人員高頻重點提升(共500題)附帶答案詳解
- 第7課 課題二《清潔工具與生活·創(chuàng)意清潔工具設計》(說課稿)-2023-2024學年四年級下冊綜合實踐活動浙教版
- DB11-T 1191.3-2024 實驗室危險化學品安全管理要求 第3部分:科研單位
- 醫(yī)療行業(yè)學生職業(yè)發(fā)展的路徑規(guī)劃
- 規(guī)范填寫臨時用電作業(yè)票
- 日間化療中心管理制度
- 第六講五胡入華與中華民族大交融-中華民族共同體概論
- 建設工程施工專業(yè)分包合同 GF-2003-0213
- 2024解析:第二章聲現(xiàn)象-講核心(解析版)
- 2024解析:第十章 浮力綜合應用-講核心(解析版)
評論
0/150
提交評論