一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

【環球聚看點】組件化元數據結構設計——PageMaker

來源:CSDN 時間:2023-02-09 07:58:04

Page Maker是我在公司參與時間最長的一個項目了,自打實習期做了webIM,轉正之后不久,就開始參與了PageBuilder項目的開發,前前后后大概經歷了兩年的時間,后來由于公司業務調整,已經在今年初逐步將項目交接了出去。雖然現在不再參與項目的維護,但是從這么長時間的開發過程中,還是學到了很多東西,也讓我成長了很多。其實最關鍵的,并不是具體解決了什么問題,而是解決問題的思路與方法。

PM 的產品定位是一個平臺,他所提供的核心能力就是頁面的可視化構建,通過拖拖拽拽,就可以生成一個頁面,并所見即所得。為公司的各產品先以及后續的ISV提供穩定 可靠 自由的頁面定制化能力,以此滿足客戶的多樣化需求。

在實際的開發過程中,我們遇到以及需要解決的問題有:


(相關資料圖)

組件化元數據結構設計組件開發規范運行態資源加載與性能優化基礎依賴管理

其實每個點都能單獨寫一篇文章的,這里就只簡單總結了。

組件化

PM的實現中,頁面組件化是一個非常重要的前提,所以我們抽象出了兩個概念,即:

布局組件視圖組件

布局組件用以實現頁面布局,而視圖組件承載著業務數據,并以多樣化的形式展現給用戶。所以頁面長得好不好看,直接取決于視圖組件。 另外,為了提高視圖組件的可擴展性,以及凸顯PM所強調的 可配置的能力,我們還抽象出了一個組件類型,即 屬性組件。

有了屬性組件,實施人員就可以給視圖組件配置不同的屬性,比如數據源,展示形式,等等,對于視圖組件來說,所有可變,可配置的,都以通過屬性組件來實現。通過 PM平臺,將屬性組件和視圖關聯展示到頁面上,并最終呈現給用戶。

元數據結構設計

基于元數據的應用設計的最大的好處就是可描述和可擴展。我們將頁面抽像為一套元數據結構,而pb就是這套元數據的解析器。保存頁面,實質上就是保存了一份元數據的實例。

{/****組件列表: 每往頁面中拖入一個組件,都會在該屬性下新增一條字段,用于描述該組件****/"componentList": [{"editableData": string,//組件的可編輯屬性    "cType": string,       //組件名稱    "hasCustomProps": Boolean, //組件是否有自定義屬性    "isContainer":Boolean,//是否是容器組件    "isSubcomponent":Boolean,//是否是子組件    "id": string,//組件id 唯一標識    "parentId": string,//父級ID    "componentHolderKey":string,//對應tab容器組件的tab    "appId":number,//組件屬性應用的ID    "deletable":Boolean,//組件是否可以被刪除    "url":string,//iframe組件URL地址,之前ocean組件用的}],/*****頁面數據信息****/"pageSettings": {"title": "AAA",//頁面名稱     "template": "Classic",//頁面模版       "layout": "grid"http://布局類型 grid / vertical},//頁面的可編輯屬性pageProperty:{"editableData": {},}/**section列表,注意 有的section是沒有位置信息的,如容器組件內的組件,是根據數組順序依次由上而下排列**/"sectionList": [{"id": string,//唯一的標識       "targetLayout": string,//所屬的工作區       "x":number,//x坐標       "y":number,//y坐標       "w":number,//w 寬度       "h":number//h 高度}, {"id": "8d227680-f26a-11e6-9457-8f2c27c19ddf","targetLayout": "default1"}]}

組件開發規范

在這個問題下,細分的問題還是挺多的比如:

1. 技術選型

這個其實沒有太多可說的,公司整個平臺都采取的React框架,所以為了保持統一,當然就是直接采用React

2. 組件開發模版

這里的模版設計所遵循的原則應該是盡量簡潔,符合常規的開發習慣,并將細節封裝好隱藏在內部。我們會提供一條龍的服務,包括但不限于構建方案 組件注冊 以及對接CI服務,對于業務方來講,只需要關注于組件的開發即可。另外,模版設計時,一定要遵循模塊化 分層設計的思想,盡量減少后續模塊升級所帶來的遷移成本。

#源代碼目錄,項目基礎結構,里面列的文件必須按照這個結構存在,其他可按照自己的需求安排。/src    #export組件的文件,必須存在    index.js    #Page Builder屬性配置代碼存放的目錄    /props        #export 屬性組件文件        index.js#包信息描述package.json#文檔README.md#git忽略文件列表.gitignore#npm忽略文件列表.npmignore# webpack配置 可選 支持自定義擴展webpack.config.js

4. cli工具

前端工程化設計中,一個很重要的原則就是自動化,將所有重復性的,工程化的工作,交給程序完成,從而盡可能的提升工作效率。所以我們開發cli工具,將組件注冊 git項目搭建,以及生成本地開發模版的任務全部集成在cli工具中,開發人員一分鐘的時間,就可以開始新組件的開發

5.css 模塊化

相對于JS的發展的來講,CSS的進度確實緩慢了些。因為PM頁面上的組件都是獨立構建的,但是會放在同一個運行態下,所以很容易出現樣式覆蓋的問題。為了保持樣式的穩定,作為平臺,必須提供統一的css 模塊化方案。經過技術方案的調研和對比,最終采取了styled-component。至于為什么不采用css module,是因為他的hash是在構建過程完成計算的,而不是運行時,所以不能從根本上解決PM平臺所面臨的問題。

6. 版本管理

對于組件的版本管理,我們沒有采取hash,轉而采用了npm包版本的方案。主要是考慮到更加直觀和友好,而且方便版本回退。

7. 上線發布流程

對于開發 測試以及線上環境,靜態資源都是共享的,所謂上線,只不過是將對于環境下的版本更新下而已。后端同學提供了導入導出工具,方便組件的發布上線。

8. CI持續化集成

每個組件都對應獨立的前端項目,我們為這些項目接入CI服務,并將組件的構建,版本發布以及靜態資源發布等等集成在CI任務中,另外,為了方便進行組件的性能優化,我們借助webpack 插件為每次構建都生成一份構建報告:

基礎庫管理

首先所面臉的問題:在我們的設計中,PM的每個組件的都是獨立的,單獨構建的。因為組件開發都需要依賴React,如果在構建時將React構建進去,那么運行態下就會存在多份react,而react是不允許多實例共存的,所以這就產生了問題。除了react,還可能依賴其他一些比較大的類庫 比如recharts。

關于這個問題,我們最開始采用的方案是 webpack dll。一切看起來都是那么完美,直到我們在升級react 16 的過程中,痛苦出來了。因為react升級,所以我們要構建出新的dll來,dll更新了,那么原來那些發布過的組件,都需要基于新的dll重新構建一遍,才能在運行態下正常渲染。OMG,工作量太大了,而且涉及到多個業務線下的上百個組件。問題已經比較嚴重了。

經過商量,我們最終用webpack external 代替了 dll的方案,雖然dll在運行態下的性能會稍好一些,但是所帶來的問題已經遠遠超過收益了。

運行態資源加載與性能優化

前面提到PageMak是一個平臺,各個業務方都會在這個平臺上開發和發布組件,然后在運行態下統一加載和渲染。那該怎么加載 加載哪些,才能達到更好的頁面加載性能,就是一個很值得研究的話題。 關于這個問題的方案,其實演變了很多。

野蠻時代

剛開始的時候,按照我們的設計,每個業務線都有一個前端項目,這個項目下維護著該業務線下的所有組件,也就是說,所有的的組件都會打包在一起,單個組件沒有獨立的版本控制。所以,順利成章的,這種情況下,我們在運行態就按照業務線來加載組件,如果當前的租戶開通了應用,那么,就會去加載這個組件。這也是最初的設計,后來做了一點點的優化,就是判斷下,如果當前的頁面上拖入了某業務線下的組件,才會加載這個業務的組件。這里的判斷邏輯由后端同學實現。,前端只負責加載和渲染。

工業社會

后來,隨著業務線組件的增加,這個項目變得越來越龐大,如果某個頁面上只拖入了業務線下的一個組件,那么該業務線下的所有組件都會加載進來。而且更嚴重的是上面提到的,單個組件沒有的獨立的版本控制,這其實是很要命的。所以為了解決這個問題,經過商量過后,我們決定將單個組件拆分為獨立的前端項目?;诖?,我們在運行態下資源加載的顆粒度,就可以控制到組件級別的了。

也就是說,我們通過元數據分析,可以得知該頁面上拖入了哪些組件, 以及組件的版本。然后,加載模塊就會將所有的組件通過異步腳本的方式加載進來,交給渲染器去渲染。(至于渲染器如何知道哪些組件加載進來了,哪些組件沒有加載進來,這是通過一個組件的注冊模塊來實現的。)

方案走到這里,已經將所有的冗余的資源都去掉了,看似很完美,但其實還是有問題的。

首先,一個頁面上可能會拖入很多組件,少則七八個,多則一二十個,每個組件都對應一個js資源,那么要想頁面渲染出來,至少將這些js腳本全部加載完成。但是,客戶端對于并行請求數是有限制的,沒記錯的話應該是5個,從這方面考慮的話,前端性能優化的一個很重要的方向就是資源合并,比如常見的雪碧圖。

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四
亚洲午夜精品在线| 久久爱91午夜羞羞| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲欧美日韩国产成人| 国产精品高潮呻吟久久| 亚洲一区二区精品在线| 国产精品日韩精品欧美在线| 亚洲欧美大片| 国内外成人免费视频| 久久久噜久噜久久综合| 欧美成人激情视频| 宅男在线国产精品| 国产老女人精品毛片久久| 欧美一区三区三区高中清蜜桃 | 国产欧美日韩激情| 欧美在线一二三四区| 亚洲国产免费看| 国产精品扒开腿爽爽爽视频| 久久精品国产亚洲aⅴ| 亚洲欧洲精品一区二区| 国产精品成人观看视频国产奇米| 久久久久久久久久久成人| 亚洲人成在线播放| 美女任你摸久久| 亚洲欧美日本另类| 亚洲精品九九| 狠狠爱www人成狠狠爱综合网| 欧美精品播放| 久久亚洲综合色| 亚洲欧美成人一区二区三区| 亚洲人在线视频| 欧美精品在线观看91| 久久久99久久精品女同性| av成人免费| 亚洲电影在线看| 欧美黄色aa电影| 久久性色av| 久久精品91久久香蕉加勒比| 一本色道久久综合亚洲精品小说| 一区二区三区在线观看国产| 国产精品一区在线观看| 欧美日韩网站| 欧美日韩不卡视频| 欧美 亚欧 日韩视频在线| 久久精品国产一区二区三区| 日韩亚洲精品电影| 欧美在线一二三区| 亚洲精品国精品久久99热| 国产日本精品| 亚洲欧美在线免费观看| 一区二区三区久久| 最新日韩在线| 亚洲国产精选| 亚洲经典自拍| 亚洲国产裸拍裸体视频在线观看乱了| 国产日韩精品在线观看| 国产精品免费在线| 国产精品国产三级国产aⅴ无密码| 欧美成人免费在线观看| 另类春色校园亚洲| 狼狼综合久久久久综合网| 老司机免费视频久久| 美女国产一区| 欧美国产视频在线| 欧美精品黄色| 国产精品爱久久久久久久| 欧美日韩www| 欧美日韩三级视频| 欧美日韩亚洲综合在线| 欧美午夜不卡影院在线观看完整版免费| 欧美精品二区| 国产精品高清在线| 国产日韩一区二区三区在线播放| 国产女主播一区二区三区| 国产婷婷97碰碰久久人人蜜臀| 国产综合色一区二区三区| 好吊日精品视频| 亚洲日本国产| 亚洲欧美国产精品桃花| 久久不射中文字幕| 欧美成人精品高清在线播放| 欧美日韩亚洲一区二区三区在线观看 | 欧美日韩大片| 国产精品入口麻豆原神| 国产一区二区三区在线观看视频| 一区二区在线看| 99热在这里有精品免费| 亚洲午夜黄色| 久久米奇亚洲| 欧美剧在线免费观看网站| 欧美日韩另类字幕中文| 国产精品久久久久99| 一区在线电影| 亚洲午夜羞羞片| 久久夜色精品| 国产精品国产三级国产专播精品人| 国产精品视频久久久| 黑人一区二区| 一本久久a久久精品亚洲| 欧美在线观看一区二区三区| 欧美插天视频在线播放| 欧美视频中文字幕在线| **欧美日韩vr在线| 亚洲激情在线播放| 午夜国产精品视频| 欧美电影在线免费观看网站| 国产精品九色蝌蚪自拍| 在线精品视频免费观看| 一区二区高清视频| 蜜桃久久av| 国产一二三精品| 亚洲精品欧美精品| 久久深夜福利| 欧美午夜精品理论片a级大开眼界| 久久精品亚洲精品国产欧美kt∨| 蜜臀99久久精品久久久久久软件| 国产精品一区二区你懂得| 伊人久久大香线蕉综合热线| 亚洲欧美日韩国产综合| 免费观看久久久4p| 国产在线乱码一区二区三区| 亚洲美女在线看| 久久综合狠狠| 国产欧美日韩综合一区在线播放 | 国产精品久久久久久久一区探花| 国产精品美女主播在线观看纯欲| 亚洲欧洲免费视频| 久久狠狠婷婷| 国内精品久久久久久久影视麻豆| 一区二区三区 在线观看视频| 欧美高清影院| 激情久久影院| 久久人人爽爽爽人久久久| 国产精品普通话对白| 一本久道久久综合婷婷鲸鱼| 麻豆freexxxx性91精品| 激情亚洲成人| 欧美在线不卡| 国产亚洲精品久久久久婷婷瑜伽| 一区二区免费在线视频| 欧美日韩一区高清| 亚洲精品久久久久久一区二区| 欧美a级一区二区| 精品动漫3d一区二区三区| 久久在线免费观看视频| 国产亚洲精品bt天堂精选| 久久精品电影| 国产亚洲精品高潮| 久久国产视频网| 国产人成精品一区二区三| 久久精品国产久精国产思思| 国产精品美女久久福利网站| 先锋影音网一区二区| 国产精品女同互慰在线看| 午夜伦理片一区| 欧美肉体xxxx裸体137大胆| 亚洲自拍另类| 久久人人爽爽爽人久久久| 亚洲国产婷婷综合在线精品 | 性欧美18~19sex高清播放| 欧美成人日韩| 在线观看日韩精品| 麻豆成人在线播放| 亚洲福利在线视频| 欧美国产激情二区三区| 91久久黄色| 欧美日韩p片| 亚洲一区二区在线播放| 欧美成年视频| 永久域名在线精品| 免费欧美网站| 亚洲片国产一区一级在线观看| 欧美大片在线看免费观看| 亚洲一本大道在线| 国内外成人免费激情在线视频| 欧美久久电影| 午夜亚洲福利| 日韩手机在线导航| 欧美日韩国产在线观看| 久久国产88| 一区二区欧美国产| 国产欧美一区二区精品仙草咪| 欧美国产精品专区| 亚洲欧美久久久| 亚洲欧洲偷拍精品| 国产精品区一区二区三| 欧美成人激情视频| 亚洲欧美激情一区二区| 亚洲精品乱码久久久久久日本蜜臀 | 欧美一区二区福利在线| 亚洲精品国偷自产在线99热| 欧美日韩在线播放一区二区| 免费成人激情视频| 亚洲女优在线| 一区二区三区精品在线| 韩国亚洲精品| 国产亚洲欧美日韩在线一区| 国产精品高清一区二区三区| 久久久久国产精品麻豆ai换脸| 午夜精品久久|