龍田前端研發(fā)在閑暇之餘,利用VMMV模式,開(kāi)發(fā)了一個前端小工具 EngJs,并在 GitHub 上進(jìn)行了代碼共享,同時收獲了48個贊。可以說,我們的技術小哥哥還(hái)是非常有技術鑽研精神的!

主流前端數據渲染和交互開(kāi)發(fā)的冗餘和效率内耗,相信讓不少人身心俱疲。在行業&職場如此内卷的情況下,對(duì)高耗能(néng)開(kāi)發(fā)工具 say no !
有沒(méi)有更簡便的路徑達到預期效果?龍田科技X科技院研發(fā)工程師 南柯君 有話要說!下面(miàn)一起(qǐ)看看他的輕量化開(kāi)發(fā)設計思路吧。
主流前端的數據渲染和交互開(kāi)發(fā)以 vue 和 react 生态圈爲主。作爲前後(hòu)端工具,其與後(hòu)端緊密配合,提供大量現成(chéng)可用組件,可快速叠代産品,有著(zhe)優渥的便捷性。這(zhè)點必須予以肯定。
但對(duì)于純粹的基礎前端開(kāi)發(fā)而言,此二者的生态圈過(guò)于冗雜,有著(zhe)大量累贅不可抛棄的曆史包袱,并對(duì)原生 JS 和 web 環境破壞嚴重。大量淩駕于原生 web 環境的規則、魔法字符串、新概念,會(huì)造成(chéng)不同程度的束縛和掣肘。
新手基于兩(liǎng)者開(kāi)發(fā)時,爲了便捷而便捷,大量引用三方甚至多個重量級插件。這(zhè)不僅會(huì)造成(chéng)項目臃腫煩雜,還(hái)會(huì)因過(guò)份遠離基礎和生态圈,喪失基礎開(kāi)發(fā)能(néng)力。
因此,EngJS 緊密結合 JS,可避免在原生 JS 基礎上二次發(fā)明出新名詞、新概念,實現基礎知識複用。這(zhè)類似于 JQuery ,僅作爲插件,不淩駕、不代替套殼原生 JavaScript ,提供基礎的數據渲染和組件支持 ,精簡易用(對(duì)于基礎開(kāi)發(fā)而言),且能(néng)與現有生态混合使用。
強調數據視圖結構,web 端大量涉及視覺結構的數據邏輯和交互呈現。因此 Eng 的數據結構與 dom 層次劃分,互爲結構視圖。在深度開(kāi)發(fā)下,提供異常明晰的規律邏輯思考模式與例推效應(參圖1)。Router 組件,也是基于此結構邏輯實現,一脈相承。
下圖中,e-base 和 e-for 嚴格約束了 Dom 和數據結構,互爲結構視圖。
△ 圖1
-
1. 精簡: 僅10個行内指令+5個基本區域方法+基本組件對(duì)象操作方法,即可完成(chéng)所有組件化數據渲染(參下應用案例部分)
-
2. 組件對(duì)象特點,靈活易用。僅 destroy,sleep ,awake 三個基本狀态,就(jiù)可實現在頁面(miàn)的銷毀、隐藏,以及位置變換
-
1. 基于圖2常見頁面(miàn)結構,使用 JSON 結構表述不同組件的關系
-
2. 以區域 area 劃分功能(néng)不同的單頁面(miàn)(參圖2、圖3)
-
3.(建議)對(duì)于簡單頁面(miàn)不建議使用,完全沒(méi)必要
-
4.對(duì)于特殊需求,因 Eng 組件的靈活易用性,可嘗試自行實現并構建基于項目規則需求的 Router 組件
△ 圖2,得出如Router組件的設計結構 (參考範式)
△ 圖3
1.基礎開(kāi)發(fā),不依賴全家桶,隻需基本的數據渲染和組件功能(néng)支持
2.對(duì)項目有輕量,簡潔需求的
3.低代碼平台構建,靈活簡潔的組件運用方式,恰如其分
4. 二次開(kāi)發(fā),自定義項目流程,基礎配套工具
5. DIY Coder
以下案例隻爲證明,Eng 在如此精簡的前提下,仍可以實現同類工具的基礎功能(néng)。
例1:圖表類, echarts 折線圖等理論上基于此也較容易實現
例2:css3 3D 盒模型城市場景編輯器
例3:canvas2d 的骨骼動畫編輯器
例4:canvas2d 地圖場景編輯器
綜上,Eng 具備同類工具的核心基礎開(kāi)發(fā)能(néng)力,而非泛泛……