原文在這裏。node
導讀:Arunr 把過去 15 年以來,Web開發從最初的純 HTML 到 CGI、PHP\JSP\ASP、Ajax、Rails、NodeJS 這個過程簡要地進行了介紹。web
在接下來的幾個月時間裏,我打算寫一系列關於完整web開發的文章。這第一篇文章雖然有所粗略,但也可以充分歸納了在以前15年或者更久的時間裏web應用程序如何進行演變。而且最後我會囊括下這段時間內所寫的相關技術。mongodb
在過去的美好日子裏,咱們使用的是簡單的web頁面(包括動態gif圖片!)。做爲精美設計的典範,蘋果有着這樣的一個網站:數據庫
在那時,Web開發還比較簡單,開發者常常會去操做web服務器(主要仍是他本身的機器),而且他會寫一些HTML頁面放到服務器指定的文件夾(/www)下。這些HTML頁面,就在瀏覽器請求頁面時使用。express
問題就出現了,你只能獲取到靜態內容。假若你想讓訪問者看到有多少其餘訪問者訪問了這個網站呢(還記得那些統計流量的旋轉圖片嗎?!),或者假若你想讓訪問者去填寫這樣一個表單,包含有姓名和郵件地址呢?於此就轉向了CGI和Perl腳本,在web服務器端運行一段短小的代碼,並能與文件系統或者數據庫進行交互。瀏覽器
當時組織CGI/Perl這樣的腳本代碼太混亂了。CGI伸縮性不是太好(常常是爲每一個請求分配一個新的進程),也不太安全(直接使用文件系統或者環境變量),同時也沒提供一種結構化的方式去構造動態應用程序。幾年來一直很困惑,直到大約2005年左右,出現了Java Server Pages(JSP),微軟的ASP,以及PHP!我喜歡把當時的參考架構比做成IIS和ASP.NET,你能夠用Visual Studio快速構建一個可伸縮而且安全的應用程序。安全
直到當時,web服務器多半會返回整個頁面或者文檔,但AJAX(2005)的出現,讓事情變得頗有意思。AJAX容許客戶端的JavaScript腳本爲局部頁面提供請求服務,而後能夠在無需回到服務器狀況下動態刷新部分頁面,也就是更新瀏覽器中的document對象,一般稱做DOM,或者文檔對象模型。服務器
雖然從服務器端返回的仍然是HTML,但瀏覽器上的代碼能把這HTML片斷內嵌到當前頁面中。也就是說web應用的響應能夠更快,這時咱們真正用web應用取代了web頁面。谷歌的GMail和谷歌地圖都是當時AJAX的殺手級產品。隨後用AJAX局部刷新就如雨後春筍般出現。架構
在隨後的幾年時間裏,AJAX成爲了焦點,但在服務器端仍然使用着舊有的技術。大概在2007年,37signals公司公開其成員–Ruby on Rails。那個基於Ruby on Rails 5分鐘構建博客的演示徹底征服了全世界的開發者。一晚上之間,因此談論的焦點都是關於Rails!Rails的不一樣之處在於使用規定的方式去設計你的web應用程序,運用一種已經普遍在桌面應用開發,但未被搬到web應用上的開發模式。這種模式就叫作模式(數據)-視圖(模板)-控制器(業務邏輯)。Rails強調,「這事就該這麼作」,而且經過許多插件讓構建web應用再一次更加健全。框架
在2007到2010年期間,涌現了3種開發潮流:
第一個是智能手機和移動應用潮流。一般狀況下,許多應用程序同時有web和移動應用兩種版本。儘管如此,服務端仍然返回的是HTML頁面,而不是其它移動應用能夠識別。所以,你須要返回的是結構化數據來取代HTML。
第二個開發潮流是jQuery。這是一個很是流行的JavaScript庫,可以很容易構建動態、美妙的web應用,甚至是AJAX!
第三個潮流是Node.JS的發佈。這是第一次能讓你用JavaScript開發高性能的服務端程序,進而可能結束「客戶端開發者」要知道HTML/JavaScript,「服務端開發者」要知道.NET/C#/Ruby這樣的噩夢。
儘管這是一個不錯的架構,但咱們能夠重用一些在客戶端的收穫去簡化那些曾經發生在像客戶端意大利麪似的jQuery代碼。和Rails精神相似,咱們須要用一種規定的方式從服務端獲取到數據,再對客戶端的HTML頁面進行包裝。所以,在接下來的2年時間裏,業界出現了許多用於簡化客戶端開發的框架,諸如Backbone,Ember,Derby和Meteor,固然也包括個人最愛,AngularJS。
所以,這就是咱們看到的今天,而我後面要講到的參考架構是這樣的,mongodb做爲數據庫服務器,node/express做爲web應用服務器,客戶端使用AngularJS,同時也使用Bootstrap樣式風格。我發現這種架構容許我可以快速構建web服務以及基於AngularJS的客戶端接口,甚至和其它的服務,如PhoneGap或者其它原生移動開發工具同樣,進行移動應用的開發。