国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Velocity 不用愁!Velocity 系統(tǒng)的前端工程化之路

這篇具有很好參考價(jià)值的文章主要介紹了Velocity 不用愁!Velocity 系統(tǒng)的前端工程化之路。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Velocity是一個(gè)基于Java的Web頁面模版引擎。十多年前,Velocity將Java代碼從Web頁面中分離出來,使得開發(fā)者能夠并行網(wǎng)頁開發(fā)和Java開發(fā)。隨著十年前后端分離的浪潮涌動,回首再面對這些基于Velocity的舊系統(tǒng),無論是后端還是前端人員維護(hù),都會存在諸多問題:

(1)后端人員維護(hù):不熟悉前端開發(fā)模式,需要花費(fèi)大量精力學(xué)習(xí)UI和Js框架;

(2)前端人員維護(hù):Velocity渲染依賴Java環(huán)境,需要花費(fèi)大量精力學(xué)習(xí)Maven工程、環(huán)境配置,且前端MVC框架版本老,開發(fā)效率低。

這種情況廣泛存在于零售內(nèi)部的一些舊系統(tǒng)中,且業(yè)務(wù)需求的不斷迭代,會導(dǎo)致系統(tǒng)維護(hù)成本越來越高。針對需要頻繁迭代的頁面模塊,常見的應(yīng)對措施是采用前后端分離方案,對頁面進(jìn)行整體重構(gòu),但如此以后,整體重構(gòu)的代價(jià)是巨大的,主要體現(xiàn)在如下幾點(diǎn):

(1)需要覆蓋所有的業(yè)務(wù)場景和需求;

(2)缺乏覆蓋全場景的測試物料;

(3)頁面重構(gòu)本身不帶來業(yè)務(wù)價(jià)值。

我們團(tuán)隊(duì)承擔(dān)了B端業(yè)務(wù),由于業(yè)務(wù)啟動時(shí)間早,也不可避免需要維護(hù)這些Velocity系統(tǒng)。

針對老系統(tǒng)維護(hù)難的痛點(diǎn),我們在實(shí)踐中探索了一種對老系統(tǒng)侵入程度低、技術(shù)架構(gòu)緩步升級的技術(shù)路線,分為4個(gè)步驟,分別是(1)搭建Velocity+MVC+MVVC混合架構(gòu);(2)建立Velocity單文件組件化能力;(3)創(chuàng)建Velocity本地沙盒環(huán)境;(4)Velocity頁面前后端分離。下面分別進(jìn)行詳細(xì)說明:

一、 搭建Velocity + MVC + MVVC混合架構(gòu)

Velocity系統(tǒng)多數(shù)還在使用JQuery等Js框架,開發(fā)效率低,亟待改善。對比MVC框架和MVVC框架,MVVC框架封裝了視圖層邏輯,開發(fā)效率顯著提升。

因此第一個(gè)步驟是在Velocity頁面中引入MVVC框架,實(shí)現(xiàn)兩套技術(shù)架構(gòu)的共存。我們引入了Vue以及配套的UI組件庫,考慮Vue的主要因素有以下幾點(diǎn):

(1)Vue支持Js資源鏈接的方式引入和使用,即在Velocity頁面中加入一行script標(biāo)簽即可實(shí)現(xiàn)開箱即用;

(2)Velocity的頁面編寫語法與Vue的模板語法非常接近。

混合架構(gòu)內(nèi)部,模板渲染需要分兩步進(jìn)行: Velocity模板首先在服務(wù)端渲染為Vue模板,Vue模板在客戶端渲染為最終頁面。

Velocity 不用愁!Velocity 系統(tǒng)的前端工程化之路

混合架構(gòu)存在的問題是,由于一些Session內(nèi)關(guān)鍵參數(shù)是服務(wù)器直出,Vue并不能直接獲取到這些參數(shù),因此傳參的方案是在頁面中提前埋了一些占位符,Vue執(zhí)行時(shí)通過訪問DOM來獲取。

后續(xù)需求迭代時(shí),可以逐步將業(yè)務(wù)邏輯從老舊MVC技術(shù)棧遷移到新的MVVC技術(shù)棧中,實(shí)現(xiàn)開發(fā)、維護(hù)效率的提升。

二、 建立Velocity單文件組件化能力

當(dāng)項(xiàng)目規(guī)模較大時(shí),不同模塊之間可能存在一些相似的功能或邏輯,擺在面前的問題是如何實(shí)現(xiàn)模塊級的功能復(fù)用。

因此第二個(gè)步驟是在Velocity系統(tǒng)中引入組件化能力,實(shí)現(xiàn)跨頁面代碼復(fù)用。Velocity系統(tǒng)由于渲染依賴Java環(huán)境,難以適用基于NodeJs的前端工程化能力,無法直接使用Vue的單文件組件化能力。幸運(yùn)的是,可以利用Velocity的包含(#include)和解析(#parse)能力,配合Vue的API接口,實(shí)現(xiàn)一種創(chuàng)新型的Velocity+Vue單文件組件化技術(shù)。

Velocity 不用愁!Velocity 系統(tǒng)的前端工程化之路

如果你熟悉Vue,你肯定對Vue單文件組件很熟悉了,即一個(gè)文件名以.vue后綴結(jié)尾的文件,它描述了一個(gè)Vue組件,內(nèi)部結(jié)構(gòu)的三板斧:template、script、style,簡單來說分別描述了組件的模板呈現(xiàn)、邏輯交互、css樣式。

Velocity單文件組件的組織方式參照了這個(gè)層級結(jié)構(gòu),使用一個(gè)文件名以.vm后綴結(jié)尾的文件,描述了一個(gè)Velocity組件,由于缺乏工程化的能力,區(qū)別點(diǎn)在于:(1)為了兼容低版本瀏覽器,需要使用script標(biāo)簽來承載模板;不考慮瀏覽器兼容性的情況下,也可以直接使用template標(biāo)簽。(2)需要手動調(diào)用Vue.component執(zhí)行組件的注冊。

Velocity 不用愁!Velocity 系統(tǒng)的前端工程化之路

實(shí)現(xiàn)單文件組件化之后,Velocity頁面可以通過粒度更小的組件來層層組裝,實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)耦合程度進(jìn)一步降低。

三、 創(chuàng)建Velocity本地沙盒環(huán)境 + 前端工程化

前面兩個(gè)步驟對系統(tǒng)整體架構(gòu)進(jìn)行了大幅優(yōu)化,但是仍有一個(gè)痛點(diǎn)沒解決:Velocity渲染依賴Java環(huán)境,習(xí)慣了本地開發(fā)的前端同學(xué)會很無語:改一個(gè)小問題需要本地盲開發(fā)->在線部署容器->看效果->繼續(xù)盲修改,一來二去幾個(gè)小時(shí)就過去了。

Velocity 不用愁!Velocity 系統(tǒng)的前端工程化之路

因此第三個(gè)步驟是實(shí)現(xiàn)Velocity本地編譯和開發(fā)環(huán)境,并且引入工程化技術(shù)實(shí)現(xiàn)熱更新。

解決Velocity本地編譯的核心思路是模擬Server的環(huán)境變量,并且支持Velocity語法編譯。我們搭建了一套基于Velocity的前端沙盒工程,前者通過在工程中mock服務(wù)端變量的方式來實(shí)現(xiàn),在本地JSON數(shù)據(jù)源承載這些環(huán)境變量;后者是基于Velocity語法AST重構(gòu),開發(fā)了一套解析引擎Velocity-loader,支持在webpack中實(shí)時(shí)解析文件并注入環(huán)境參數(shù)。

沙盒能力引入后,開發(fā)流程轉(zhuǎn)變?yōu)楸镜貙?shí)時(shí)開發(fā)Velocity,熱更新達(dá)到毫秒級,開發(fā)體驗(yàn)只有一個(gè)字:爽。

Velocity 不用愁!Velocity 系統(tǒng)的前端工程化之路

四、 Velocity頁面前后端分離

事實(shí)上,對比前三個(gè)步驟,我們距離Velocity頁面徹底前后端分離已經(jīng)很接近了。

第四個(gè)步驟是真正實(shí)現(xiàn)Velocity頁面的前端獨(dú)立構(gòu)建和部署,并永久擺脫依賴Server端渲染。但由于Vue-loader實(shí)際上會在工程編譯時(shí)把模板語法解析成render函數(shù),已經(jīng)破壞了模板語法的結(jié)構(gòu),因此不能支持在客戶端動態(tài)的解析Velocity,需要固化渲染環(huán)境變量。Velocity的動態(tài)數(shù)據(jù)渲染部分需要改寫為Vue的語法來實(shí)現(xiàn),托靠客戶端Ajax來刷新動態(tài)數(shù)據(jù)和頁面。

至此,我們完整實(shí)現(xiàn)了對Velocity后端應(yīng)用向前端工程化逐步演進(jìn)之路,路漫漫其修遠(yuǎn)兮,吾將上下而求索,也歡迎各位看官共同探討。

作者:京東零售 陳震

內(nèi)容來源:京東云開發(fā)者社區(qū)文章來源地址http://www.zghlxwxcb.cn/news/detail-457561.html

到了這里,關(guān)于Velocity 不用愁!Velocity 系統(tǒng)的前端工程化之路的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 什么是前端工程化?

    前端工程化是一種思想,而不是某種技術(shù)。主要目的是為了提高效率和降低成本,也就是說在開發(fā)的過程中可以提高開發(fā)效率,減少不必要的重復(fù)性工作等。 tip 現(xiàn)實(shí)生活舉例 建房子誰不會呢?請幾個(gè)工人一上來就開始弄,在建筑的過程中缺了材料就叫個(gè)工人去買,發(fā)現(xiàn)工期

    2024年02月15日
    瀏覽(97)
  • 前端工程化-NPM

    前端工程化-NPM

    NPM代表npmjs.org這個(gè)網(wǎng)站,這個(gè)站點(diǎn)存儲了很多Node.js的第三方功能包。 NPM的全稱是Node Package Manager,它是一個(gè)Node.js包管理和分發(fā)工具,已經(jīng)成為非官方的發(fā)布Node模塊(包)的標(biāo)準(zhǔn)。它可以讓JavaScript開發(fā)者能夠更加輕松地共享代碼和共用代碼片段,并且通過NPM管理需要分享的代

    2024年02月09日
    瀏覽(310)
  • 前端工程化相關(guān)

    前端工程化相關(guān)

    知道軟件包名,拿到源碼或者路徑的方法 在瀏覽器輸入以下內(nèi)容,就可以找到你想要的。。。 unpkg.com/輸入包名 ESM特性清單: 自動采取嚴(yán)格模式,忽略“use?strict” 每個(gè)ESM模塊都是單獨(dú)的私有作用域; ESM是通過CORS去請求外部JS模塊的 ESM的script標(biāo)簽會延遲執(zhí)行腳本,就要有

    2024年01月17日
    瀏覽(307)
  • Ajax及前端工程化

    Ajax及前端工程化

    Ajax:異步的js與xml。 作用: 1、通過ajax給服務(wù)器發(fā)送數(shù)據(jù),并獲得其響應(yīng)的數(shù)據(jù)。 2、可以在不更新整個(gè)網(wǎng)頁的情況下,與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁的技術(shù)。 ?1、準(zhǔn)備數(shù)據(jù)地址 ?2、創(chuàng)建XMLHttpRequest對象,用于和服務(wù)器交換數(shù)據(jù) ?3、向服務(wù)器發(fā)送請求 ?4、獲取服務(wù)器響

    2024年02月12日
    瀏覽(33)
  • 前端工程化與webpack

    前端工程化與webpack

    能夠說出什么是前端工程化 能夠說出webpack的作用 能夠掌握webpack的基本使用 了解常用plugin的基本使用 了解常用loader的基本使用 能夠說出Source Map的作用 前端工程化 webpack的基本使用 webpack中的插件 webpack中的loader 打包發(fā)布 Source Map 1.1小白眼中的前端開發(fā)vs實(shí)際的前端開發(fā) 實(shí)際

    2024年02月13日
    瀏覽(98)
  • 前端工程化知識系列(9)

    ?? 點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動力! ?? 收藏,你的青睞是我努力的方向! ?? 評論,你的意見是我進(jìn)步的財(cái)富! 持續(xù)性能監(jiān)控和自動化性能優(yōu)化在前端開發(fā)中非常重要。以下是一些相關(guān)工具和實(shí)踐: 性能監(jiān)控工具 :工具如Google Lighthouse、WebPageTest、PageSpeed Insights等可以

    2024年02月07日
    瀏覽(102)
  • 前端工程化之 webpack <一>

    編寫的代碼 ==》經(jīng)過打包工具(glup、rollup、webpack、vite)本身也是js代碼,讀取文件操作的, 依賴于 node 環(huán)境 = = 》 普通的html 、css 、javascript = = 》 打包到靜態(tài)服務(wù)器 = = 》 跑在用戶的瀏覽器 用于對路徑和文件進(jìn)行處理 在 Mac OS、Linux 和 window 上的路徑上是不一樣的,部署的

    2024年01月24日
    瀏覽(105)
  • 前端工程化之模塊化

    前端工程化之模塊化

    前端模塊化是一種標(biāo)準(zhǔn),不是實(shí)現(xiàn) 理解模塊化是理解前端工程化的前提 前端模塊化是前端項(xiàng)目規(guī)?;谋厝唤Y(jié)果 前端模塊化就是將復(fù)雜程序根據(jù)規(guī)范拆分成若干模塊,一個(gè)模塊包括輸入和輸出。而且模塊的內(nèi)部實(shí)現(xiàn)是私有的,它通過對外暴露接口與其他模塊通信,而不是直

    2024年02月11日
    瀏覽(1241)
  • 前端需要理解的工程化知識

    前端需要理解的工程化知識

    1.1 Git 常見工作流程 ?Git 有4個(gè)區(qū)域:工作區(qū)(workspace)、index(暫存區(qū))、repository(本地倉庫)和remote(遠(yuǎn)程倉庫),而工作區(qū)就是指對文件發(fā)生更改的地方,更改通過git add 存入暫存區(qū),然后由git commit 提交至本地倉庫,最后push推送到遠(yuǎn)程倉庫。 工作目錄 包括.git?子目錄(

    2024年02月10日
    瀏覽(98)
  • 前端工程化:express服務(wù)端開發(fā)

    npm i -S express node app.js 全局中間件:第一個(gè)參數(shù)是回調(diào)函數(shù)時(shí),則針對所有請求生效 路由中間件:第一個(gè)參數(shù)是匹配路由,第二個(gè)參數(shù)為回調(diào)函數(shù) 異常中間件:回調(diào)函數(shù)包含四個(gè)參數(shù) 異常中間件:回調(diào)函數(shù)包含四個(gè)參數(shù) 全局異常捕獲 全局Promise異常捕獲 需要購買或者找免費(fèi)

    2023年04月23日
    瀏覽(110)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包