在Web Service, Ajax, Web 2.0, REST等Web應(yīng)用與技術(shù)話題熱潮,帶動許多第二代的Web開發(fā)技術(shù)成長之后,這些話題也漸漸地消退。
不過許多人可能不曾發(fā)現(xiàn),其實(shí)這些技術(shù)名詞,是在慢慢地顯露一點(diǎn):Web應(yīng)用程式逐漸從Server Side轉(zhuǎn)移到Client Side,也就是瀏覽器身上。不過許多人可能不曾發(fā)現(xiàn),其實(shí)這些技術(shù)名詞,是在慢慢地顯露一點(diǎn):Web應(yīng)用程式逐漸從Server Side轉(zhuǎn)移到Client Side,也就是瀏覽器身上。
本篇文章要從以往的Server Side Web應(yīng)用程式,其開發(fā)方式與演進(jìn)來介紹Single Page Application(SPA) 與現(xiàn)今所有Web技術(shù)。本篇文章要從以往的Server Side Web應(yīng)用程式,其開發(fā)方式與演進(jìn)來介紹Single Page Application(SPA)與現(xiàn)今所有Web技術(shù)。
我在Web 2.0過去,現(xiàn)在與未來及介紹Ruby On Rails都有提到一些Web技術(shù)的演進(jìn),比較明顯的趨勢就是從靜態(tài)到動態(tài)頁面,而設(shè)計(jì)的方式也更程式化。我在Web 2.0過去,現(xiàn)在與未來及介紹Ruby On Rails都有提到一些Web技術(shù)的演進(jìn),比較明顯的趨勢就是從靜態(tài)到動態(tài)頁面,而設(shè)計(jì)的方式也更程式化。 而在Web2.0:過去,現(xiàn)在及未來«就是愛程式也有讀者在前言提到,技術(shù)並不是將一個(gè)名詞安上去就好。而在Web2.0:過去,現(xiàn)在及未來«就是愛程式也有讀者在前言提到,技術(shù)并不是將一個(gè)名詞安上去就好。 我相當(dāng)贊同這句話,因此也在這篇文章中希望來做個(gè)總整理,以技術(shù)及歷史來看看Web是怎樣成長的。我相當(dāng)贊同這句話,因此也在這篇文章中希望來做個(gè)總整理,以技術(shù)及歷史來看看Web是怎樣成長的。
本篇文章也同步發(fā)佈於http://kiwi.csie.chu.edu.tw/blog/archives/156本篇文章也同步發(fā)布于http://kiwi.csie.chu.edu.tw/blog/archives/156
[ 編輯 ] Web應(yīng)用程式的演進(jìn) [ 編輯 ] Web應(yīng)用程式的演進(jìn)
[ 編輯 ] 動態(tài)網(wǎng)頁 [ 編輯 ] 動態(tài)網(wǎng)頁
儘管Web並不是一個(gè)三言兩語能拿個(gè)版本號碼來解釋,但實(shí)際上Web技術(shù)確實(shí)有些明顯的分隔點(diǎn)。盡管Web并不是一個(gè)三言兩語能拿個(gè)版本號碼來解釋,但實(shí)際上Web技術(shù)確實(shí)有些明顯的分隔點(diǎn)。
最早期我們熟知的就是靜態(tài)網(wǎng)頁,這應(yīng)該沒啥問題。最早期我們熟知的就是靜態(tài)網(wǎng)頁,這應(yīng)該沒啥問題。 儘管在2000前,php,asp就開始流行,坊間的書上也都稱之為動態(tài)網(wǎng)頁。盡管在2000前,php,asp就開始流行,坊間的書上也都稱之為動態(tài)網(wǎng)頁。 而我在此提及的動態(tài)網(wǎng)頁程式 ,實(shí)際上卻是從php4釋出的那一年開始。而我在此提及的動態(tài)網(wǎng)頁程式 ,實(shí)際上卻是從php4釋出的那一年開始。 這邊要讓大家瞭解的分界點(diǎn),其實(shí)是php4開始被許多商業(yè)公司所採用,而軟體的形式也更為套裝化,而不再像之前大家認(rèn)定的「動態(tài)」網(wǎng)頁僅僅只是拿來完成一些簡單的區(qū)塊來與一般的靜態(tài)網(wǎng)頁整合。這邊要讓大家了解的分界點(diǎn),其實(shí)是php4開始被許多商業(yè)公司所采用,而軟體的形式也更為套裝化,而不再像之前大家認(rèn)定的「動態(tài)」網(wǎng)頁僅僅只是拿來完成一些簡單的區(qū)塊來與一般的靜態(tài)網(wǎng)頁整合。
在2004年的時(shí)候,Web Framework的產(chǎn)生,創(chuàng)造了Web應(yīng)用程式另一個(gè)新的高峰。在2004年的時(shí)候,Web Framework的產(chǎn)生,創(chuàng)造了Web應(yīng)用程式另一個(gè)新的高峰。 而在這個(gè)時(shí)候也開始有一些Rich Web Client概念的雛形了。而在這個(gè)時(shí)候也開始有一些Rich Web Client概念的雛形了。 我將Ruby On Rails定為一個(gè)分界點(diǎn)是因?yàn)?,他顛覆了傳統(tǒng)動態(tài)網(wǎng)頁還在使用設(shè)計(jì)方式,而改用MVC。我將Ruby On Rails定為一個(gè)分界點(diǎn)是因?yàn)?,他顛覆了傳統(tǒng)動態(tài)網(wǎng)頁還在使用設(shè)計(jì)方式,而改用MVC。 但要注意的是Ruby On Rails儘管整合了Ajax與進(jìn)階Javascript函式庫,但還是沒有改變回傳完整或部分HTML的方式,意思便是HTML的產(chǎn)生始終在Server Side。但要注意的是Ruby On Rails盡管整合了Ajax與進(jìn)階Javascript函式庫,但還是沒有改變回傳完整或部分HTML的方式,意思便是HTML的產(chǎn)生始終在Server Side。
[ 編輯 ] Rich Internet Application [ 編輯 ] Rich Internet Application
一直到現(xiàn)在,有相當(dāng)多的Web應(yīng)用程式,都還是維持使用URL來切換各種功能與畫面。一直到現(xiàn)在,有相當(dāng)多的Web應(yīng)用程式,都還是維持使用URL來切換各種功能與畫面。 而這些以「頁面」為主的程式,並不太需要控制DOM,就不常遇到跨瀏覽器問題。而這些以「頁面」為主的程式,并不太需要控制DOM,就不常遇到跨瀏覽器問題。 然而自從Firefox逐漸也在市場佔(zhàn)有一席之地,Javascript的應(yīng)用普及之後,跨瀏覽器問題也接著發(fā)生。然而自從Firefox逐漸也在市場占有一席之地,Javascript的應(yīng)用普及之后,跨瀏覽器問題也接著發(fā)生。 為了避開各種不同的瀏覽器所帶來的問題,各大企業(yè)都獨(dú)力發(fā)展自己可以嵌入在瀏覽器的應(yīng)用程式。為了避開各種不同的瀏覽器所帶來的問題,各大企業(yè)都獨(dú)力發(fā)展自己可以嵌入在瀏覽器的應(yīng)用程式。 早期如Java Applet及微軟的的Active X,算是Rich Internet Application(RIA)的開始,但效能方面還是差強(qiáng)人意。早期如Java Applet及微軟的的Active X,算是Rich Internet Application(RIA)的開始,但效能方面還是差強(qiáng)人意。
直到2004年的時(shí)候,RIA出現(xiàn)了兩種不同的實(shí)做方法:一種是承襲以往需要安裝額外Runtime或是在特定瀏覽器才能執(zhí)行的方式,稱做Sandbox;另一種是只採用CSS,HTML,並以Javascript控制HTML DOM的Dynamic HTML方式,優(yōu)點(diǎn)就是只需要瀏覽器就可以執(zhí)行。直到2004年的時(shí)候,RIA出現(xiàn)了兩種不同的實(shí)做方法:一種是承襲以往需要安裝額外Runtime或是在特定瀏覽器才能執(zhí)行的方式,稱做Sandbox;另一種是只采用CSS,HTML,并以Javascript控制HTML DOM的Dynamic HTML方式,優(yōu)點(diǎn)就是只需要瀏覽器就可以執(zhí)行。 而後者也延伸出利用Offline Database或是Ajax+Web Service來傳送與儲存程式資料,並可以儲存成一個(gè)獨(dú)立頁面的Web應(yīng)用程式,稱做Single Page Application(SPA) 。而后者也延伸出利用Offline Database或是Ajax+Web Service來傳送與儲存程式資料,并可以儲存成一個(gè)獨(dú)立頁面的Web應(yīng)用程式,稱做Single Page Application(SPA) 。 SPA最典型的例子,就是Gmail。 SPA最典型的例子,就是Gmail。 Google盡力克服了跨瀏覽器的問題,將Javascript發(fā)揮的淋漓盡致,讓大家驚嘆光靠純粹的Web技術(shù)竟能做到如此程度。 Google盡力克服了跨瀏覽器的問題,將Javascript發(fā)揮的淋漓盡致,讓大家驚嘆光靠純粹的Web技術(shù)竟能做到如此程度。
而我將2005定為Sandbox RIA真正開始的年代,也是因?yàn)锳dobe併購Macromedia,而有了較完整的開發(fā)環(huán)境與資源,並不是以往單純地嵌入Flash。而我將2005定為Sandbox RIA真正開始的年代,也是因?yàn)锳dobe并購Macromedia,而有了較完整的開發(fā)環(huán)境與資源,并不是以往單純地嵌入Flash。 這個(gè)契機(jī)也促使微軟改變策略,比起效能較差的Asp.Net,而拿Sliverlight作為Web下一代主力軍。這個(gè)契機(jī)也促使微軟改變策略,比起效能較差的Asp.Net,而拿Sliverlight作為Web下一代主力軍。
RIA或SPA都是學(xué)習(xí)歷程長,語言多又複雜的Web應(yīng)用程式技術(shù),也因此發(fā)展速度相當(dāng)緩慢,但不可小看的是這些優(yōu)點(diǎn): RIA或SPA都是學(xué)習(xí)歷程長,語言多又復(fù)雜的Web應(yīng)用程式技術(shù),也因此發(fā)展速度相當(dāng)緩慢,但不可小看的是這些優(yōu)點(diǎn):
- 相較以往在Server上產(chǎn)生HTML並回傳至瀏覽器,任何畫面皆利用瀏覽器本身或附加的功能來產(chǎn)生。相較以往在Server上產(chǎn)生HTML并回傳至瀏覽器,任何畫面皆利用瀏覽器本身或附加的功能來產(chǎn)生。 形同於借用了Client Side CPU的運(yùn)算資源,減少Server成本。形同于借用了Client Side CPU的運(yùn)算資源,減少Server成本。 使用者感受到的互動性與回應(yīng)速度皆有大幅的提升。使用者感受到的互動性與回應(yīng)速度皆有大幅的提升。
- 由於Server並不是回傳複雜龐大的HTML,而是純粹傳輸資料,使用的頻寬也相對變小。由于Server并不是回傳復(fù)雜龐大的HTML,而是純粹傳輸資料,使用的頻寬也相對變小。
- Server Side除了使用傳統(tǒng)XML Web Service,更可以採用REST,讓Client的應(yīng)用程式可以更快速掌握資料的新增修改刪除(CRUD)。 Server Side除了使用傳統(tǒng)XML Web Service,更可以采用REST,讓Client的應(yīng)用程式可以更快速掌握資料的新增修改刪除(CRUD)。
- 能夠快速M(fèi)ashup其他的Web應(yīng)用程式資源,又能擁有高速的執(zhí)行效能。能夠快速M(fèi)ashup其他的Web應(yīng)用程式資源,又能擁有高速的執(zhí)行效能。
下表列出了Web技術(shù)的演進(jìn),要注意到後三種技術(shù)集合,其時(shí)間是並行的:下表列出了Web技術(shù)的演進(jìn),要注意到后三種技術(shù)集合,其時(shí)間是并行的:
|
靜態(tài)網(wǎng)頁 靜態(tài)網(wǎng)頁 |
動態(tài)網(wǎng)頁程式 動態(tài)網(wǎng)頁程式 |
Web應(yīng)用程式 Web應(yīng)用程式 |
Rich Internet Application with Sandbox Rich Internet Application with Sandbox |
Single Page Application Single Page Application |
時(shí)期 時(shí)期 |
2000以前 2000以前 |
2000(php4釋出)~2004 2000(php4釋出)~2004 |
2004(Ruby On Rails釋出)以後 2004(Ruby On Rails釋出)以后 |
2005(macromedia被adobe併購)以後 2005(macromedia被adobe并購)以后 |
2004(Gmail釋出beta)以後 2004(Gmail釋出beta)以后 |
表現(xiàn)層 表現(xiàn)層 |
CSS CSS |
CSS,HTML,Javascript CSS,HTML,Javascript |
CSS,HTML,Javascript CSS,HTML,Javascript |
Flash, Sliverlight Flash, Sliverlight |
CSS,HTML(DOM) CSS,HTML(DOM) |
邏輯層 邏輯層 |
Javascript Javascript |
Template或自行撰寫 Template或自行撰寫 |
Web Framework Web Framework |
Action Script, C# Action Script, C# |
Javascript或是撰寫Web Service的語言 Javascript或是撰寫Web Service的語言 |
資料層 資料層 |
HTML HTML |
Database(SQL) Database(SQL) |
Database(ORM) Database(ORM) |
Database(ORM) Database(ORM) |
Offline Database, Web Service Offline Database, Web Service |
開發(fā)方式 開發(fā)方式 |
網(wǎng)頁編輯程式網(wǎng)頁編輯程式 |
整合HTML及Server Side語言的編輯器整合HTML及Server Side語言的編輯器 |
整合Web Framework的IDE整合Web Framework的IDE |
整合Sandbox的IDE整合Sandbox的IDE |
整合Server Side與Client Side語言的IDE整合Server Side與Client Side語言的IDE |
運(yùn)算資源 運(yùn)算資源 |
所有資料直接透過Web Server送出,除了硬碟讀取,幾乎不需要額外的運(yùn)算所有資料直接透過Web Server送出,除了硬碟讀取,幾乎不需要額外的運(yùn)算 |
因?yàn)槭褂昧薙erver Side語言來Render表現(xiàn)層,運(yùn)算多半會消耗在Server因?yàn)槭褂昧薙erver Side語言來Render表現(xiàn)層,運(yùn)算多半會消耗在Server |
因?yàn)槭褂昧薙erver Side語言來Render表現(xiàn)層,運(yùn)算多半會消耗在Server因?yàn)槭褂昧薙erver Side語言來Render表現(xiàn)層,運(yùn)算多半會消耗在Server |
運(yùn)算資源平均被分散在Server及Client,但Client需要Sandbox去執(zhí)行,所以會消耗更多CPU資源運(yùn)算資源平均被分散在Server及Client,但Client需要Sandbox去執(zhí)行,所以會消耗更多CPU資源 |
運(yùn)算資源平均被分散在Server及Client運(yùn)算資源平均被分散在Server及Client |
資料格式 資料格式 |
傳送完整的HTML傳送完整的HTML |
傳送完整的HTML傳送完整的HTML |
傳送部分或完整的HTML傳送部分或完整的HTML |
只需第一次傳送HTML及內(nèi)嵌程式(Flash或Sliverlight),其餘傳送XML只需第一次傳送HTML及內(nèi)嵌程式(Flash或Sliverlight),其余傳送XML |
只需第一次傳送HTML及Javascript,其餘可傳送XML或JSON只需第一次傳送HTML及Javascript,其余可傳送XML或JSON |
優(yōu)點(diǎn) 優(yōu)點(diǎn) |
簡單易學(xué)簡單易學(xué) |
學(xué)習(xí)同一種Server Side語言,搭配簡單的HTML,CSS,JS觀念便能夠有成果學(xué)習(xí)同一種Server Side語言,搭配簡單的HTML,CSS,JS觀念便能夠有成果 |
整合Ajax或進(jìn)階Javascript函式庫,REST及MVC。整合Ajax或進(jìn)階Javascript函式庫,REST及MVC。 使得設(shè)計(jì)概念更為物件導(dǎo)向化使得設(shè)計(jì)概念更為物件導(dǎo)向化 |
使用者介面反應(yīng)快速,變化多且美觀。使用者介面反應(yīng)快速,變化多且美觀。 兼顧視窗程式的反應(yīng)速度,且能部分相容傳統(tǒng)HTML應(yīng)用。兼顧視窗程式的反應(yīng)速度,且能部分相容傳統(tǒng)HTML應(yīng)用。 |
完全相容傳統(tǒng)HTML應(yīng)用,及任何可能的Web應(yīng)用程式Mashup。完全相容傳統(tǒng)HTML應(yīng)用,及任何可能的Web應(yīng)用程式Mashup。 可以採用不同的傳輸方式,併和REST及瀏覽器快取來節(jié)省頻寬,使得整體反應(yīng)相當(dāng)快速。可以采用不同的傳輸方式,并和REST及瀏覽器快取來節(jié)省頻寬,使得整體反應(yīng)相當(dāng)快速。 |
缺點(diǎn) 缺點(diǎn) |
無法讓使用者儲存任何應(yīng)用程式資料,任何資料必須藉由人工設(shè)計(jì)無法讓使用者儲存任何應(yīng)用程式資料,任何資料必須藉由人工設(shè)計(jì) |
對於龐大的應(yīng)用程式,便得花上大量的Server成本。對于龐大的應(yīng)用程式,便得花上大量的Server成本。 程式反應(yīng)速度受限於伺服器負(fù)載,需要叢集架構(gòu)來彌補(bǔ)。程式反應(yīng)速度受限于伺服器負(fù)載,需要叢集架構(gòu)來彌補(bǔ)。 |
設(shè)計(jì)方式更為簡單快速,但相對於傳統(tǒng)的動態(tài)網(wǎng)頁程式付出更大的Server成本。設(shè)計(jì)方式更為簡單快速,但相對于傳統(tǒng)的動態(tài)網(wǎng)頁程式付出更大的Server成本。 |
除了CSS,HTML,JS以外還需學(xué)習(xí)一兩種不同的語言才能進(jìn)行開發(fā)。除了CSS,HTML,JS以外還需學(xué)習(xí)一兩種不同的語言才能進(jìn)行開發(fā)。 RIA通常程式資料較大,在開始使用前必須等候一段下載時(shí)間。 RIA通常程式資料較大,在開始使用前必須等候一段下載時(shí)間。 |
除了CSS,HTML,JS以外還需學(xué)習(xí)一種撰寫Web Service的語言。除了CSS,HTML,JS以外還需學(xué)習(xí)一種撰寫Web Service的語言。 需要相當(dāng)熟悉DOM及CSS,也需考慮瀏覽器的差異,開發(fā)起來相對地困難許多。需要相當(dāng)熟悉DOM及CSS,也需考慮瀏覽器的差異,開發(fā)起來相對地困難許多。 |
表現(xiàn)層的演進(jìn)可以得知,不管是RIA利用sandbox或者是SPA利用DHTML作為表現(xiàn)層,相較起來傳統(tǒng)以文字HTML拼湊出畫面的作法已經(jīng)無法符合使用者的需求。表現(xiàn)層的演進(jìn)可以得知,不管是RIA利用sandbox或者是SPA利用DHTML作為表現(xiàn)層,相較起來傳統(tǒng)以文字HTML拼湊出畫面的作法已經(jīng)無法符合使用者的需求。 更動態(tài),更彈性的作法才能讓使用者獲得操作感。更動態(tài),更彈性的作法才能讓使用者獲得操作感。
而在邏輯層上,演進(jìn)到了SPA則是變得較為複雜。而在邏輯層上,演進(jìn)到了SPA則是變得較為復(fù)雜。 如果是使用Web Service作為Server Side,除了必須撰寫該語言外,也還是得撰寫Javascript來控制畫面的呈現(xiàn)。如果是使用Web Service作為Server Side,除了必須撰寫該語言外,也還是得撰寫Javascript來控制畫面的呈現(xiàn)。 而這也影響到開發(fā)方式,以往的編輯器多半著重一種主要的語言上,但現(xiàn)在的Web IDE多半都可以完整的處理所有瀏覽器的語言,及多種Server Side語言。而這也影響到開發(fā)方式,以往的編輯器多半著重一種主要的語言上,但現(xiàn)在的Web IDE多半都可以完整的處理所有瀏覽器的語言,及多種Server Side語言。 例如Aptana IDE就是最好的例子。例如Aptana IDE就是最好的例子。
資料層的演進(jìn)就比較簡單,直到RIA的時(shí)期,還是相當(dāng)依賴傳統(tǒng)的Database。資料層的演進(jìn)就比較簡單,直到RIA的時(shí)期,還是相當(dāng)依賴傳統(tǒng)的Database。 但SPA的時(shí)期,就可以採用Offline Database,這裡指的就是Google Gears 。但SPA的時(shí)期,就可以采用Offline Database,這里指的就是Google Gears 。 但如果要使用傳統(tǒng)的Online Database,全部都尚未有Javascript的Client,就必須透過Web Service來轉(zhuǎn)換資料。但如果要使用傳統(tǒng)的Online Database,全部都尚未有Javascript的Client,就必須透過Web Service來轉(zhuǎn)換資料。 而在SQL到ORM的演進(jìn)上,雖然使用物件導(dǎo)向的作法減緩執(zhí)行速度,但相對降低開發(fā)難度,帶來更大的價(jià)值。而在SQL到ORM的演進(jìn)上,雖然使用物件導(dǎo)向的作法減緩執(zhí)行速度,但相對降低開發(fā)難度,帶來更大的價(jià)值。
[ 編輯 ] 小結(jié) [ 編輯 ] 小結(jié)
本篇說明了Web技術(shù)的歷史,來帶出現(xiàn)今的Web技術(shù)。本篇說明了Web技術(shù)的歷史,來帶出現(xiàn)今的Web技術(shù)。 下一篇要介紹的是Single Page Application與它在Ruby On Rails上的應(yīng)用。下一篇要介紹的是Single Page Application與它在Ruby On Rails上的應(yīng)用。