掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在做前后端分離時(shí),***個(gè)關(guān)注到的問(wèn)題就是 渲染,也就是 View 這個(gè)層面的工作。

在傳統(tǒng)的開(kāi)發(fā)模式中,瀏覽器端與服務(wù)器端是由不同的前后端兩個(gè)團(tuán)隊(duì)開(kāi)發(fā),但是模版卻又在這兩者中間的模糊地帶。因此模版上面總不可避免的越來(lái)越多復(fù)雜邏輯,最終難以維護(hù)。
而我們選擇了NodeJS,作為一個(gè)前后端的中間層。試圖藉由NodeJS,來(lái)疏理 View 層面的工作。
使得前后端分工更明確,讓專(zhuān)案更好維護(hù),達(dá)成更好的用戶體驗(yàn)。
渲染這塊工作,對(duì)于前端開(kāi)發(fā)者的日常工作來(lái)說(shuō),佔(zhàn)了非常大的比例,也是最容易與后端開(kāi)發(fā)糾結(jié)不清的地方。
回首過(guò)去前端技術(shù)發(fā)展的這幾年, View 這個(gè)層面的工作,經(jīng)過(guò)了許多次的變革,像是:
可以觀察到在這幾年,大家都傾向?qū)?渲染 這件事,從服務(wù)器端端移向了瀏覽器端。
而服務(wù)器端則專(zhuān)注于 服務(wù)化 ,提供數(shù)據(jù)接口。
瀏覽器端渲染的好處,我們都很清楚,像是
但是在享受好處的同時(shí),我們同樣的也面臨了 瀏覽器端渲染 所帶來(lái)的壞處,像是:
其實(shí)回頭想想,在我們把渲染的工作從 服務(wù)端(Java) 抽出來(lái)到 瀏覽器端(JS) 的時(shí)候,我們的目的只是 明確的前后端職責(zé)劃分,并不是非瀏覽器渲染不可 。
只是因?yàn)樵趥鹘y(tǒng)的開(kāi)發(fā)模式中,出了服務(wù)器就到了瀏覽器,所以前端的工作內(nèi)容只能被限制在瀏覽器端。
也因此很多人認(rèn)定了 后端 = 服務(wù)端 前端 = 瀏覽器端 ,就像下面這張圖。
而在淘寶UED目前進(jìn)行的 中途島Midway 項(xiàng)目中,藉由在 JAVA – Browser中間搭建一個(gè)NodeJS中間層,試圖把這個(gè)前后端的分割線,重新針對(duì) 工作職責(zé) 去區(qū)分,而分針對(duì)硬體環(huán)境去區(qū)分(服務(wù)器 & 瀏覽器)。
因此我們有機(jī)會(huì)做到模版與路由的共享,也是一個(gè)前后端分工中最理想的狀態(tài)。
在中途島項(xiàng)目中,我們把前后端分界的那條線,從瀏覽器端移回到了服務(wù)器端。
藉由一個(gè)由前端 輕松掌控 且 與瀏覽器共通 的Nodejs層,可以更清晰的完成了前后端分離。
也可以讓前端開(kāi)發(fā)針對(duì)不同的情況,自行決定 最適當(dāng)?shù)慕鉀Q方案 。而不是所有事情 都在瀏覽器端來(lái)處理 。
中途島并不是前端試圖搶后端飯碗的項(xiàng)目,目的只是把 模版 這個(gè)模糊地帶切割清楚,取得更明確的職責(zé)劃分。
而不再拘泥于服務(wù)端或?yàn)g覽器端的差異。
在傳統(tǒng)的開(kāi)發(fā)模式中,瀏覽器端與服務(wù)器端是由不同的前后端兩個(gè)團(tuán)隊(duì)開(kāi)發(fā),但是模版卻又在這兩者中間的模糊地帶。因此模版上面總不可避免的越來(lái)越多復(fù)雜邏輯,最終難以維護(hù)。
有了NodeJS,后端同學(xué)可以在JAVA層專(zhuān)注于業(yè)務(wù)邏輯與數(shù)據(jù)的開(kāi)發(fā)。而前端同學(xué)則專(zhuān)注于控制邏輯與渲染的開(kāi)發(fā)。并且自行選擇這些模版是要在 服務(wù)端 (NodeJS) 或是 瀏覽器端 做渲染。
用著一樣的模版語(yǔ)言 XTemplate ,一樣的渲染引擎 JavaScript
在 不同的渲染環(huán)境?。⊿erver-side、PC Browser、Mobile Browser、Web View、etc.) 渲染出 一樣的結(jié)果 。
也因?yàn)橛辛薔odeJS這一層,可以更細(xì)致的控制路由。
假如需要在前端做瀏覽器端路由時(shí),可以同時(shí)配置服務(wù)器端的路由,使其在 瀏覽器端換頁(yè) 或是 服務(wù)端換頁(yè) ,都可以得到一致的渲染效果。
同時(shí)也處理了SEO的問(wèn)題。
通常我們?cè)跒g覽器端渲染一份模版時(shí),流程不外乎是
印在頁(yè)面上從以上的流程可以觀察到,要想要做到模版的跨端共享,重點(diǎn)其實(shí)在 一致的模塊選型 這件事。
市面上流行很多種模塊標(biāo)準(zhǔn),例如 KMD、AMD、CommonJS,只要能將NodeJS的模版檔案透過(guò)一致模塊規(guī)范輸出到NodeJS端,就可以做基本的模版共享了。
而后續(xù)的系列文章會(huì)針對(duì)Model的proxy與共享,做進(jìn)一步的探討。
因?yàn)橛辛酥型緧u這中間層,針對(duì)過(guò)往的一些問(wèn)題都有了更好的解答,例如說(shuō)
過(guò)去的AJAX、Client-side MVC、SPA、Two-way Data Binding 等技術(shù)的出現(xiàn),都是試圖要解決當(dāng)時(shí)的前端開(kāi)發(fā)遇到的瓶頸。
而NodeJS中間層的出現(xiàn),也是在試圖解決現(xiàn)今前端被侷限在瀏覽器端的一個(gè)限制。
這邊文章專(zhuān)注于前后端模版共享,也希望能拋磚引玉,與大家一起討論如何在NodeJS中間層這個(gè)架構(gòu)下,我們可以怎樣的改善我們的工作流程,怎樣的跟 后端配合,來(lái)把 前端 這個(gè)工作做得更好。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流