在Web Service, Ajax, Web 2.0, REST等Web应用与技术话题热潮,带动许多第二代的Web开发技术成长之后,这些话题也渐渐地消退。 不過許多人可能不曾發現,其實這些技術名詞,是在慢慢地顯露一點:Web應用程式逐漸從Server Side轉移到Client Side,也就是瀏覽器身上。不过许多人可能不曾发现,其实这些技术名词,是在慢慢地显露一点:Web应用程式逐渐从Server Side转移到Client Side,也就是浏览器身上。

本篇文章要從以往的Server Side Web應用程式,其開發方式與演進來介紹Single Page Application(SPA) 與現今所有Web技術。本篇文章要从以往的Server Side Web应用程式,其开发方式与演进来介绍Single Page Application(SPA)与现今所有Web技术。

我在Web 2.0過去,現在與未來介紹Ruby On Rails都有提到一些Web技術的演進,比較明顯的趨勢就是從靜態到動態頁面,而設計的方式也更程式化。我在Web 2.0过去,现在与未来介绍Ruby On Rails都有提到一些Web技术的演进,比较明显的趋势就是从静态到动态页面,而设计的方式也更程式化。 而在Web2.0:過去,現在及未來«就是愛程式也有讀者在前言提到,技術並不是將一個名詞安上去就好。而在Web2.0:过去,现在及未来«就是爱程式也有读者在前言提到,技术并不是将一个名词安上去就好。 我相當贊同這句話,因此也在這篇文章中希望來做個總整理,以技術及歷史來看看Web是怎樣成長的。我相当赞同这句话,因此也在这篇文章中希望来做个总整理,以技术及历史来看看Web是怎样成长的。

本篇文章也同步發佈於http://kiwi.csie.chu.edu.tw/blog/archives/156本篇文章也同步发布于http://kiwi.csie.chu.edu.tw/blog/archives/156

目錄目录

[隱藏]

[ 編輯 ] Web應用程式的演進 [ 编辑 ] Web应用程式的演进

[ 編輯 ] 動態網頁 [ 编辑 ] 动态网页

儘管Web並不是一個三言兩語能拿個版本號碼來解釋,但實際上Web技術確實有些明顯的分隔點。尽管Web并不是一个三言两语能拿个版本号码来解释,但实际上Web技术确实有些明显的分隔点。

最早期我們熟知的就是靜態網頁,這應該沒啥問題。最早期我们熟知的就是静态网页,这应该没啥问题。 儘管在2000前,php,asp就開始流行,坊間的書上也都稱之為動態網頁。尽管在2000前,php,asp就开始流行,坊间的书上也都称之为动态网页。 而我在此提及的動態網頁程式 ,實際上卻是從php4釋出的那一年開始。而我在此提及的动态网页程式 ,实际上却是从php4释出的那一年开始。 這邊要讓大家瞭解的分界點,其實是php4開始被許多商業公司所採用,而軟體的形式也更為套裝化,而不再像之前大家認定的「動態」網頁僅僅只是拿來完成一些簡單的區塊來與一般的靜態網頁整合。这边要让大家了解的分界点,其实是php4开始被许多商业公司所采用,而软体的形式也更为套装化,而不再像之前大家认定的「动态」网页仅仅只是拿来完成一些简单的区块来与一般的静态网页整合。

在2004年的時候,Web Framework的產生,創造了Web應用程式另一個新的高峰。在2004年的时候,Web Framework的产生,创造了Web应用程式另一个新的高峰。 而在這個時候也開始有一些Rich Web Client概念的雛形了。而在这个时候也开始有一些Rich Web Client概念的雏形了。 我將Ruby On Rails定為一個分界點是因為,他顛覆了傳統動態網頁還在使用設計方式,而改用MVC。我将Ruby On Rails定为一个分界点是因为,他颠覆了传统动态网页还在使用设计方式,而改用MVC。 但要注意的是Ruby On Rails儘管整合了Ajax與進階Javascript函式庫,但還是沒有改變回傳完整或部分HTML的方式,意思便是HTML的產生始終在Server Side。但要注意的是Ruby On Rails尽管整合了Ajax与进阶Javascript函式库,但还是没有改变回传完整或部分HTML的方式,意思便是HTML的产生始终在Server Side。

[ 編輯 ] Rich Internet Application [ 编辑 ] Rich Internet Application

一直到現在,有相當多的Web應用程式,都還是維持使用URL來切換各種功能與畫面。一直到现在,有相当多的Web应用程式,都还是维持使用URL来切换各种功能与画面。 而這些以「頁面」為主的程式,並不太需要控制DOM,就不常遇到跨瀏覽器問題。而这些以「页面」为主的程式,并不太需要控制DOM,就不常遇到跨浏览器问题。 然而自從Firefox逐漸也在市場佔有一席之地,Javascript的應用普及之後,跨瀏覽器問題也接著發生。然而自从Firefox逐渐也在市场占有一席之地,Javascript的应用普及之后,跨浏览器问题也接着发生。 為了避開各種不同的瀏覽器所帶來的問題,各大企業都獨力發展自己可以嵌入在瀏覽器的應用程式。为了避开各种不同的浏览器所带来的问题,各大企业都独力发展自己可以嵌入在浏览器的应用程式。 早期如Java Applet及微軟的的Active X,算是Rich Internet Application(RIA)的開始,但效能方面還是差強人意。早期如Java Applet及微软的的Active X,算是Rich Internet Application(RIA)的开始,但效能方面还是差强人意。

直到2004年的時候,RIA出現了兩種不同的實做方法:一種是承襲以往需要安裝額外Runtime或是在特定瀏覽器才能執行的方式,稱做Sandbox;另一種是只採用CSS,HTML,並以Javascript控制HTML DOM的Dynamic HTML方式,優點就是只需要瀏覽器就可以執行。直到2004年的时候,RIA出现了两种不同的实做方法:一种是承袭以往需要安装额外Runtime或是在特定浏览器才能执行的方式,称做Sandbox;另一种是只采用CSS,HTML,并以Javascript控制HTML DOM的Dynamic HTML方式,优点就是只需要浏览器就可以执行。 而後者也延伸出利用Offline Database或是Ajax+Web Service來傳送與儲存程式資料,並可以儲存成一個獨立頁面的Web應用程式,稱做Single Page Application(SPA)而后者也延伸出利用Offline Database或是Ajax+Web Service来传送与储存程式资料,并可以储存成一个独立页面的Web应用程式,称做Single Page Application(SPA) SPA最典型的例子,就是Gmail。 SPA最典型的例子,就是Gmail。 Google盡力克服了跨瀏覽器的問題,將Javascript發揮的淋漓盡致,讓大家驚嘆光靠純粹的Web技術竟能做到如此程度。 Google尽力克服了跨浏览器的问题,将Javascript发挥的淋漓尽致,让大家惊叹光靠纯粹的Web技术竟能做到如此程度。

而我將2005定為Sandbox RIA真正開始的年代,也是因為Adobe併購Macromedia,而有了較完整的開發環境與資源,並不是以往單純地嵌入Flash。而我将2005定为Sandbox RIA真正开始的年代,也是因为Adobe并购Macromedia,而有了较完整的开发环境与资源,并不是以往单纯地嵌入Flash。 這個契機也促使微軟改變策略,比起效能較差的Asp.Net,而拿Sliverlight作為Web下一代主力軍。这个契机也促使微软改变策略,比起效能较差的Asp.Net,而拿Sliverlight作为Web下一代主力军。

RIA或SPA都是學習歷程長,語言多又複雜的Web應用程式技術,也因此發展速度相當緩慢,但不可小看的是這些優點: RIA或SPA都是学习历程长,语言多又复杂的Web应用程式技术,也因此发展速度相当缓慢,但不可小看的是这些优点:

  • 相較以往在Server上產生HTML並回傳至瀏覽器,任何畫面皆利用瀏覽器本身或附加的功能來產生。相较以往在Server上产生HTML并回传至浏览器,任何画面皆利用浏览器本身或附加的功能来产生。 形同於借用了Client Side CPU的運算資源,減少Server成本。形同于借用了Client Side CPU的运算资源,减少Server成本。 使用者感受到的互動性與回應速度皆有大幅的提升。使用者感受到的互动性与回应速度皆有大幅的提升。
  • 由於Server並不是回傳複雜龐大的HTML,而是純粹傳輸資料,使用的頻寬也相對變小。由于Server并不是回传复杂庞大的HTML,而是纯粹传输资料,使用的频宽也相对变小。
  • Server Side除了使用傳統XML Web Service,更可以採用REST,讓Client的應用程式可以更快速掌握資料的新增修改刪除(CRUD)。 Server Side除了使用传统XML Web Service,更可以采用REST,让Client的应用程式可以更快速掌握资料的新增修改删除(CRUD)。
  • 能夠快速Mashup其他的Web應用程式資源,又能擁有高速的執行效能。能够快速Mashup其他的Web应用程式资源,又能拥有高速的执行效能。

下表列出了Web技術的演進,要注意到後三種技術集合,其時間是並行的:下表列出了Web技术的演进,要注意到后三种技术集合,其时间是并行的:

靜態網頁 静态网页 動態網頁程式 动态网页程式 Web應用程式 Web应用程式 Rich Internet Application with Sandbox Rich Internet Application with Sandbox Single Page Application Single Page Application
時期 时期 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)以后
表現層 表现层 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
開發方式 开发方式 網頁編輯程式网页编辑程式 整合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
運算資源 运算资源 所有資料直接透過Web Server送出,除了硬碟讀取,幾乎不需要額外的運算所有资料直接透过Web Server送出,除了硬碟读取,几乎不需要额外的运算 因為使用了Server Side語言來Render表現層,運算多半會消耗在Server因为使用了Server Side语言来Render表现层,运算多半会消耗在Server 因為使用了Server Side語言來Render表現層,運算多半會消耗在Server因为使用了Server Side语言来Render表现层,运算多半会消耗在Server 運算資源平均被分散在Server及Client,但Client需要Sandbox去執行,所以會消耗更多CPU資源运算资源平均被分散在Server及Client,但Client需要Sandbox去执行,所以会消耗更多CPU资源 運算資源平均被分散在Server及Client运算资源平均被分散在Server及Client
資料格式 资料格式 傳送完整的HTML传送完整的HTML 傳送完整的HTML传送完整的HTML 傳送部分或完整的HTML传送部分或完整的HTML 只需第一次傳送HTML及內嵌程式(Flash或Sliverlight),其餘傳送XML只需第一次传送HTML及内嵌程式(Flash或Sliverlight),其余传送XML 只需第一次傳送HTML及Javascript,其餘可傳送XML或JSON只需第一次传送HTML及Javascript,其余可传送XML或JSON
優點 优点 簡單易學简单易学 學習同一種Server Side語言,搭配簡單的HTML,CSS,JS觀念便能夠有成果学习同一种Server Side语言,搭配简单的HTML,CSS,JS观念便能够有成果 整合Ajax或進階Javascript函式庫,REST及MVC。整合Ajax或进阶Javascript函式库,REST及MVC。 使得設計概念更為物件導向化使得设计概念更为物件导向化 使用者介面反應快速,變化多且美觀。使用者介面反应快速,变化多且美观。 兼顧視窗程式的反應速度,且能部分相容傳統HTML應用。兼顾视窗程式的反应速度,且能部分相容传统HTML应用。 完全相容傳統HTML應用,及任何可能的Web應用程式Mashup。完全相容传统HTML应用,及任何可能的Web应用程式Mashup。 可以採用不同的傳輸方式,併和REST及瀏覽器快取來節省頻寬,使得整體反應相當快速。可以采用不同的传输方式,并和REST及浏览器快取来节省频宽,使得整体反应相当快速。
缺點 缺点 無法讓使用者儲存任何應用程式資料,任何資料必須藉由人工設計无法让使用者储存任何应用程式资料,任何资料必须藉由人工设计 對於龐大的應用程式,便得花上大量的Server成本。对于庞大的应用程式,便得花上大量的Server成本。 程式反應速度受限於伺服器負載,需要叢集架構來彌補。程式反应速度受限于伺服器负载,需要丛集架构来弥补。 設計方式更為簡單快速,但相對於傳統的動態網頁程式付出更大的Server成本。设计方式更为简单快速,但相对于传统的动态网页程式付出更大的Server成本。 除了CSS,HTML,JS以外還需學習一兩種不同的語言才能進行開發。除了CSS,HTML,JS以外还需学习一两种不同的语言才能进行开发。 RIA通常程式資料較大,在開始使用前必須等候一段下載時間。 RIA通常程式资料较大,在开始使用前必须等候一段下载时间。 除了CSS,HTML,JS以外還需學習一種撰寫Web Service的語言。除了CSS,HTML,JS以外还需学习一种撰写Web Service的语言。 需要相當熟悉DOM及CSS,也需考慮瀏覽器的差異,開發起來相對地困難許多。需要相当熟悉DOM及CSS,也需考虑浏览器的差异,开发起来相对地困难许多。

表現層的演進可以得知,不管是RIA利用sandbox或者是SPA利用DHTML作為表現層,相較起來傳統以文字HTML拼湊出畫面的作法已經無法符合使用者的需求。表现层的演进可以得知,不管是RIA利用sandbox或者是SPA利用DHTML作为表现层,相较起来传统以文字HTML拼凑出画面的作法已经无法符合使用者的需求。 更動態,更彈性的作法才能讓使用者獲得操作感。更动态,更弹性的作法才能让使用者获得操作感。

而在邏輯層上,演進到了SPA則是變得較為複雜。而在逻辑层上,演进到了SPA则是变得较为复杂。 如果是使用Web Service作為Server Side,除了必須撰寫該語言外,也還是得撰寫Javascript來控制畫面的呈現。如果是使用Web Service作为Server Side,除了必须撰写该语言外,也还是得撰写Javascript来控制画面的呈现。 而這也影響到開發方式,以往的編輯器多半著重一種主要的語言上,但現在的Web IDE多半都可以完整的處理所有瀏覽器的語言,及多種Server Side語言。而这也影响到开发方式,以往的编辑器多半着重一种主要的语言上,但现在的Web IDE多半都可以完整的处理所有浏览器的语言,及多种Server Side语言。 例如Aptana IDE就是最好的例子。例如Aptana IDE就是最好的例子。

資料層的演進就比較簡單,直到RIA的時期,還是相當依賴傳統的Database。资料层的演进就比较简单,直到RIA的时期,还是相当依赖传统的Database。 但SPA的時期,就可以採用Offline Database,這裡指的就是Google Gears但SPA的时期,就可以采用Offline Database,这里指的就是Google Gears 但如果要使用傳統的Online Database,全部都尚未有Javascript的Client,就必須透過Web Service來轉換資料。但如果要使用传统的Online Database,全部都尚未有Javascript的Client,就必须透过Web Service来转换资料。 而在SQL到ORM的演進上,雖然使用物件導向的作法減緩執行速度,但相對降低開發難度,帶來更大的價值。而在SQL到ORM的演进上,虽然使用物件导向的作法减缓执行速度,但相对降低开发难度,带来更大的价值。

[ 編輯 ] 小結 [ 编辑 ] 小结

本篇說明了Web技術的歷史,來帶出現今的Web技術。本篇说明了Web技术的历史,来带出现今的Web技术。 下一篇要介紹的是Single Page Application與它在Ruby On Rails上的應用。下一篇要介绍的是Single Page Application与它在Ruby On Rails上的应用。