前端發展史

老葉愛學習發表於2017-12-18

從靜態走向動態

1994年可以看做前端歷史的起點,這一年10月13日網景推出了第一版Navigator;這一年,Tim Berners-Lee建立了W3C;這一年,Tim的基友釋出了CSS。還是這一年,為動態web網頁設計的服務端指令碼PHP以及筆者本人誕生。

全球資訊網(WWW)是歐洲核子研究組織的一幫科學家為了方便看文件、傳論文而創造的,這就是為什麼Web網頁都基於Document。Document就是用標記語言+超連結寫成的由文字和圖片構成的HTML頁面,這樣的功能已經完全滿足學術交流的需要,所以網頁的早期形態和Document一樣,完全基於HTML頁面,並且所有內容都是靜態的。

image.png

隨著網頁從學術機構走向公眾社會,網頁承載的功能便超出了學術範圍而變得愈加豐富,因此早期網頁的侷限性也逐漸顯露出來。

第一,所有的網頁都基於HTML頁面,因為沒有任何手段可以控制區域性內容的顯示和隱藏,因此任何區域性的變化哪怕只多出一個標點符號,都只能重新下載一個新的頁面。

第二,計算任務只能在服務端實現。由於網速限制,與伺服器通訊的過程是非常緩慢的,並且此過程是同步阻塞的,於是會出現這樣的場景:使用者提交一個表單,然後整個頁面消失,瀏覽器呈現白屏,經過漫長的等待,瀏覽器渲染出一個和之前一模一樣的頁面,只不過輸入框旁邊多了一排紅色小字:使用者名稱錯誤。

第三,所有頁面都是靜態的,這意味著一個電商網站有一千種商品,哪怕頁面佈局一模一樣,也必須寫一千個單獨的頁面。

早期網頁形態低下的效率是無法僅僅通過提高網速解決的。

1994年一個叫Rasmus Lerdorf的加拿大人為了維護個人網站而建立了PHP。PHP原意是Personal Home Page,宣傳語是Hypertext Preprocessor(超文字處理者)。PHP實現了與資料庫的互動以及用於生產動態頁面的模板引擎,是Web領域中最主流的服務端語言。

1995年網景推出了JavaScript,實現了客戶端的計算任務(如表單驗證)。

Atwood's Law:Any application that can be written in JavaScript,will even-tually bewritten in JavaScript.(任何應用程式可以用JavaScript寫的,將最終被用javascript所寫。)-------------------------- (via@codinghorror)

image.png

1996年微軟推出了iframe標籤,實現了非同步的區域性載入。

1999年W3C釋出第四代HTML標準,同年微軟推出用於非同步資料傳輸的ActiveX,隨即各大瀏覽器廠商模仿實現了XMLHttpRequest。這標識著Ajax的誕生,但是Ajax這個詞是在六年後問世的,特別是在谷歌使用Ajax技術打造了Gmail和谷歌地圖之後,Ajax獲得了巨大的關注。Ajax是Web網頁邁向Web應用的關鍵技術,它標識著Web2.0時代的到來。

2006年,XMLHttpRequest被W3C正式納入標準。

至此,早期的Document(文件)終於進化為了Web page(網頁),上述三個侷限都得到了妥善的解決。

image.png

image.png

C/S 結構 Client 客戶端/Server 伺服器

B/S 結構 Browser 瀏覽器/Server 伺服器

從後端走向前端

早期的網頁開發是由後端主導的,前端能做的也就是操作一下DOM。2006年 John Resig釋出了jQuery,jQuery主要用於操作DOM,其優雅的語法、符合直覺的事件驅動型的程式設計思維使其極易上手,因此很快風靡全球,大量基於jQuery的外掛構成了一個龐大的生態系統,更加穩固了jQuery作為JS庫一哥的地位。

起初制約Web開發從後到前的因素很簡單,就是前端很多事幹不了或幹不好,當時的瀏覽器效能弱,標準化程度低。特別是佔據大量市場份額的IE,不僅醜陋,並且bug多。

於2008年問世的谷歌V8引擎改變了這一局面。現代瀏覽器的崛起終結了微軟的壟斷時代,前端的計算能力一下子變得過剩了。標準組織也非常配合的在2009年釋出了第五代JavaScript,前端的裝備得到了整體性的提高,前端界如同改革開放走進了一個令人目不暇接的新時代。V8就是chrome瀏覽器用的js解釋引擎,主要是C編寫的

2009年AngularJS誕生,隨後被谷歌收購。

2010年backbone.js誕生。

2011年React和Ember誕生。

2014年Vue.js誕生……前後端分離可謂大勢所趨。

後端只負責資料,前端負責其餘工作,這種分工模式一定是更清晰也更高效的。隨著基礎設定的不斷完善以及程式碼封裝層級的不斷提高,使得前端一個人能夠完成的事越來越多,這是技術積累的必然結果。就好像今天高中生的知識水平,可能遠遠超過五百年前的科學家,今天要成為Web全棧工程師,門檻也只會越來越低。

2014年,第五代HTML標準釋出。H5是由瀏覽器廠商主導,與W3C合作制定的一整套Web應用規範,至今仍在不斷補充新的草案。我們可以清晰的感受到這一系列規範背後隱含的領導者的勃勃雄心:佔領所有螢幕。

從前端走向全端

2009年Ryan Dahl釋出了node.JS,node是一個基於V8引擎的服務端JavaScript執行環境,類似於一個虛擬機器,也就是說js在服務端語言中有了一席之地。如果說ajax是前端的第一次飛躍,那麼node可算作前端的第二次飛躍。它意味著JavaScript走出了瀏覽器的藩籬,邁出了全端化的第一步。

一種流行的組合就是利用Express和Mongo搭建服務端程式。

Web開疆拓土的步伐並不止於此。

2007年第一代iphone釋出,2008年第一臺安卓手機發布。悄然間網際網路進入了移動時代。移動端的發展程式和PC的歷史如出一轍,一開始都是Native App的天下。但瀏覽器試圖取代作業系統的篡位之心從未消減。相比原生應用,Web APP有太多好處:無須開發兩套系統版本、無須安裝、無須手動升級、無須稽核……我認為最大的好處以及驅動軟體形態轉向的主要原因在於降低成本,記得13年的時候韓寒說做一個APP大概需要五十萬,今天網上比較靠譜的分析評估半年時間從零做出一個稍微像樣的APP至少100萬,而開發Web App花的錢一定少得多。

制約Web App的因素有很多,但我們可以看到Web App一直在不斷修復缺陷、突破侷限。你說網頁有tab bar,好吧,給你個fullpage API,你說網頁不能調取系統功能,好吧,Geolocation API、Vibration API、Luminosity API、Orientation API、Camera API……你說網頁不像APP有圖示,IOS早就支援在桌面上新增網頁連結的快捷圖示,還得是喬幫主遠見;你說網頁必須聯網,現在離線的方案也很多啊;你說Web App效能差,這個……你說得對,也就是這個原因,Native App還能作為主流存在一段時間,可是如果Web App的效能逐漸趕上Native了呢?目前的Hybrid、nw.js、Electron、react native、weex等都可以看做Web App在效能方面向Native靠近的嘗試。更何況半路又殺出個微信小程式。

設想:科技就是為人類服務的,就算工程師是超人,但其本質也是人類。所以人類會從最開始01的二進位制語言,到組合語言,到今天的越來越高階越來越自然的開發語言,計算機也是從裸機被越來越簡單的作業系統,應用軟體一層一層所封裝。

所以開發應該也是會類似,困難的、反人性的部分應該會不斷的被封裝,從而去不斷的追求低成本,高效率,高相容性,高安全性,更加接近業務層。

前端能幹什麼

image.png

前端用的工具

image.png


參考文獻:


分享問題:

為什麼 JavaScript 有如此多的框架?
如何實現前後端分離?
小公司的前端應該怎麼做?
2017年前端開發手冊一-2016前端技術回顧 2017年前端入門指南簡單版
前端開發者指南(2017)全版

相關文章