為什么現(xiàn)在又流行服務(wù)端渲染html?
網(wǎng)友解答: 作為一名多年經(jīng)驗(yàn)的前端,路過(guò),來(lái)回答一下。其實(shí),這是一個(gè)前端技術(shù)發(fā)展與分工的一個(gè)過(guò)程。最開(kāi)始的時(shí)候,是沒(méi)有前端這一角色的,你可以想象為從服務(wù)器端獲取一個(gè)文件,扔到瀏覽器端顯示
作為一名多年經(jīng)驗(yàn)的前端,路過(guò),來(lái)回答一下。
其實(shí),這是一個(gè)前端技術(shù)發(fā)展與分工的一個(gè)過(guò)程。
最開(kāi)始的時(shí)候,是沒(méi)有前端這一角色的,你可以想象為從服務(wù)器端獲取一個(gè)文件,扔到瀏覽器端顯示,因?yàn)橐浜蠟g覽器端解析,文件內(nèi)容格式就需要特殊約定,也即HTML。也就是所謂的Web 1.0時(shí)代,大概在95年之前,那時(shí)我還沒(méi)接觸互聯(lián)網(wǎng),所以沒(méi)有經(jīng)歷過(guò)。
然后瀏覽器端有了最原始的交互需求,常見(jiàn)的就是點(diǎn)擊一下,會(huì)看到一定的變化。很顯然,源文件已經(jīng)在用戶(hù)側(cè)瀏覽器端,服務(wù)端是做不到的,也就有了Javascript,當(dāng)然微軟也為IE開(kāi)發(fā)了對(duì)應(yīng)的JScript。于此同時(shí),人們對(duì)顏值要求越來(lái)越高,這個(gè)可以理解,最開(kāi)始僅僅幾個(gè)人玩(主要是科學(xué)家),后來(lái)隨著WWW的新起,更多的人參與進(jìn)來(lái),一看"真丑"。參與的人多了,也就有人商量著使用CSS來(lái)解決"丑"的問(wèn)題。也就是1995到1999年這段時(shí)間,主要是伴隨著功能的完善,版本的迭代。那時(shí),我還在讀書(shū),可能還沒(méi)接觸互聯(lián)網(wǎng),所以也沒(méi)有經(jīng)歷過(guò)。
很顯然,隨著時(shí)間的推移,技術(shù)的發(fā)展,人們的需求越來(lái)越高,人們已經(jīng)不滿(mǎn)足這種"文件包"的方式,更希望今天看到的是這樣,明天看到的是那樣,我昨天操作過(guò)的記錄可以保存到今天甚至以后繼續(xù)操作,也就是對(duì)數(shù)據(jù)有了保存的需求。不在滿(mǎn)足你給我什么我看什么,而是希望看到自己想要的。也就需要數(shù)據(jù)庫(kù)操作,后端技術(shù)要求就高了,也就出現(xiàn)了以PHP,JSP,ASP為代表的"3P",實(shí)現(xiàn)了動(dòng)態(tài)頁(yè)面。很顯然,這些技術(shù)除了處理數(shù)據(jù)庫(kù),處理數(shù)據(jù),以及頁(yè)面邏輯也非常不錯(cuò)。后端技術(shù)得到了重視,相反前端技術(shù)則被忽略,后端技術(shù)蓬勃發(fā)展,這種重后端,輕前端的狀態(tài)一直持續(xù)到2005年。此時(shí)我應(yīng)該已經(jīng)觸碰到了電腦,不過(guò)那個(gè)時(shí)候主要是用來(lái)玩,瀏覽瀏覽網(wǎng)頁(yè)啥的,沒(méi)有深入研究過(guò)底層技術(shù)與實(shí)現(xiàn)。
AJAX技術(shù)的新起,進(jìn)入Web2.0時(shí)代。前端技術(shù)伴隨著瀏覽器大戰(zhàn),處于混亂不堪的局面,不論怎樣,前端技術(shù)同后端技術(shù)一樣得到了人們的重視,此時(shí)jQuery應(yīng)運(yùn)而生。我也就是從2008-2009年的時(shí)候,開(kāi)始接觸互聯(lián)網(wǎng)相關(guān)技術(shù),當(dāng)時(shí)是ASP.net,主要以C#語(yǔ)言為主。也就是以后端為主,那時(shí)候才剛剛開(kāi)始有了所謂的"前端",有了前后端分離的意識(shí),那時(shí)候的前端分離,無(wú)非就是前端處理視圖呈現(xiàn)和頁(yè)面交互,通過(guò)AJAX調(diào)用后端提供的各種接口,返回相應(yīng)數(shù)據(jù)。殊不知,其實(shí)那個(gè)時(shí)候一些前端技術(shù)已經(jīng)在開(kāi)始醞釀,HTML5,CSS3,ES5等等,都將推動(dòng)后來(lái)Web的繁榮,可以說(shuō)前端相關(guān)技術(shù)引起了人們非常高的重視。我從2010年開(kāi)始工作,其實(shí)在學(xué)校沒(méi)怎么接觸前端,以為都是ASP.net那一套,拖拖拽拽就OK了,面試的給我說(shuō)要考JS,不過(guò)還好讓我第二天去。于是那天晚上到網(wǎng)吧下載了一本Javascript相關(guān)的書(shū)籍啃了一晚上,第二天去筆試,得了個(gè)65分剛夠及格的分?jǐn)?shù)?;蛟S當(dāng)時(shí)前端人員稀缺,給了我一個(gè)試用期的機(jī)會(huì),后來(lái)順利轉(zhuǎn)正。一入前端深似海,于是開(kāi)始系統(tǒng)的學(xué)習(xí)前端的相關(guān)技術(shù)。
前后端分離,是各自蓬勃發(fā)展,繁榮的表現(xiàn)。后端有自己的業(yè)務(wù)邏輯要處理,前端也有各自的呈現(xiàn)要處理,前端提供模板,后端負(fù)責(zé)渲染,你干你的,我干我的,分工明確。后端有成熟的MVC模式和架構(gòu),前端出于配合的地位。當(dāng)時(shí)的網(wǎng)站主要以官網(wǎng)+后臺(tái)管理的形式存在,多以后端為重,因?yàn)楹蠖擞写罅康臉I(yè)務(wù)邏輯需要處理,所以在MVC架構(gòu)下,有的前端也需要掌握一門(mén)后端語(yǔ)言,讓前端接手處理渲染。其實(shí),這時(shí)候的前后端配合不像一開(kāi)始那么"親密",開(kāi)始"打架",前端說(shuō)這里需要后端處理,后端說(shuō)這里前端也可以處理,因?yàn)槎哂邢嗷B透之嫌。比如,后端處理前端提供的靜態(tài)頁(yè)面模板,勢(shì)必需要對(duì)其做一些了解,如果前端處理渲染,勢(shì)必也要對(duì)后端是如何提供數(shù)據(jù)要有一定了解。程序猿本身作為一種物種,為了進(jìn)化的需要,技多不壓身,想必也會(huì)有所涉獵。于是乎,前后端就在這種撕逼與配合中各自前行。
"Duang,Duang,Duang",NodeJS重磅來(lái)襲,其實(shí)JS運(yùn)行在后端很早就有了,只是沒(méi)有NodeJS徹底,來(lái)得那么及時(shí)。為了應(yīng)對(duì)前后端的撕逼,有一些公司其實(shí)之前就嘗試過(guò)將PHP的模板渲染也納入前端,后端只處理業(yè)務(wù)邏輯,提供數(shù)據(jù)。這樣在前端和后端,出來(lái)了一個(gè)中間層由PHP來(lái)完成,以為添加了這道磨合劑就相安無(wú)事了。卻發(fā)現(xiàn)提高了人工成本的同時(shí),不過(guò)是把撕逼提到了另一個(gè)層面。隨著NodeJS的完善,相關(guān)NPM模塊日趨增多,為何不讓Node接手PHP那一層呢?于是Node解脫了PHP的尷尬境地,又回歸到它的本質(zhì)。
一般業(yè)務(wù)復(fù)雜,大公司都會(huì)采取類(lèi)似分離解藕的策略,前后端這種模糊的存在也還有其用武之地。
前后端分離之后,前后端得到相同的重視,前端有了更多的思考空間,也為了應(yīng)對(duì)人們?nèi)找嬖鲩L(zhǎng)的個(gè)性化需求,同時(shí)前端相關(guān)技術(shù)也落地生根。前端開(kāi)始有了獨(dú)立的架構(gòu)設(shè)計(jì)。隨著移動(dòng)端的新起,前端交互開(kāi)始變得尤為重要,為了更好的交互體驗(yàn),單頁(yè)面客戶(hù)端渲染開(kāi)始流行,多頁(yè)面服務(wù)器端渲染一個(gè)很重要的原因就是網(wǎng)絡(luò)延時(shí)嚴(yán)重影響用戶(hù)體驗(yàn)。隨著用戶(hù)訪(fǎng)問(wèn)量的激增,客戶(hù)端渲染可以緩解服務(wù)器端的壓力。
題主所說(shuō)的又開(kāi)始后端渲染,其實(shí)跟最原始的后端渲染還是有區(qū)別的,更多的是引入Node這樣的中間層渲染。
至于很多人說(shuō)的是因?yàn)镾EO的緣故需要后端渲染,也是有的,其實(shí)當(dāng)移動(dòng)端新起的時(shí)候,SEO的因素已經(jīng)顯得不那么重要。主要的還是隨著技術(shù)的發(fā)展,業(yè)務(wù)的沉淀,系統(tǒng)化的思維本身就是"分離-合并"的過(guò)程。還有就是現(xiàn)在網(wǎng)絡(luò)帶寬,服務(wù)器集群等基礎(chǔ)設(shè)施的完善,也會(huì)對(duì)相應(yīng)的架構(gòu)設(shè)計(jì)有一定的影響。
以上是根據(jù)自己親身經(jīng)歷與實(shí)踐,在手機(jī)上一個(gè)字一個(gè)字敲擊而成,或有失偏頗,還望諒解,可留言評(píng)論交流。
網(wǎng)友解答:榮榮榮榮ge'r'ge'r