2006年至今,咱們時常能夠看到JavaScript的新聞,剛開始只是JavaScript引擎性能的提高,到後來發現不少是來自HTML5和Node創造的奇蹟。若是隻看表面,很容易讓人感受這又是一顆衛星。這種現象讓人以爲不可信,因此出現瞭如下各類版本的誤解。
爲了後端然後端,有意思嗎?
怎麼又發明了一門新語言?
JavaScript承擔的責任過重了。
直覺上,JavaScript不該該運行在後端。
前端工程師要逆襲了。
一方面,你們看到JavaScript在各個地方放出異彩,其餘語言的開發者既羨慕它的成果,又擔憂它對當前所從事的語言形成衝擊;另外一方面,人們仍是有JavaScript只能作前端腳本的定勢思惟。究其緣由,仍是由於人們缺少歷史觀層次上的認知,因此會產生一些莫須有的惴惴不安。
1995年,JavaScript隨網景公司發佈的Netscape Navigator 2.0發佈,它最先命名爲LiveScript,隨後改名爲JavaScript。它出自現在的Mozilla公司的CTO——Brendan Eich之手,其產生來源於網景公司發佈的Netscape Navigator瀏覽器須要一種腳本語言來協助瀏覽器作一些簡單的動態操做。當時網景公司與Sun公司合做密切,不懂技術的管理層但願獲得一個Java的腳本版語言,以期能像Java同樣風靡。Brendan Eich本來進入網景公司是但願作Scheme語言的開發,可是卻接到了一個不喜歡的任務,但迫於當時形勢,不得不完成此事,因而JavaScript之父在10天的時間裏倉促完成了JavaScript的設計,當時的項目代號是Mocha,名字叫LiveScript。
這門語言除了看起來像Java外,本質與Java語言相去甚遠,管理層指望的Java Script其實借鑑了C、Scheme、Self、Java的設計。儘管倉促,可是這門語言仍是借鑑了其餘語言的很多優勢,如函數式、原型鏈繼承等。處於Java陰影下的這門語言得到了它最終的名字:JavaScript。至今,仍然還有許多人分不清Java與JavaScript的關係,就像分不清雷鋒與雷峯塔同樣。
雖然JavaScript的產生與Netscape Navigator瀏覽器的需求有關係,但它並不是只是設計出來用於瀏覽器前端的。早在1994年,網景公司就公佈了其Netscape Enterprise Server中的一種服務器端腳本實現,它的名字叫LiveWire,是最先的服務器端JavaScript,甚至早於瀏覽器中的JavaScript公佈。對於這門圖靈完備的語言,網景早就開始嘗試將它用在後端。
隨後,微軟在第一次瀏覽器大戰時,於1996年發佈的IE 3.0中也包含了它的腳本語言:JScript。基於商標的緣由,它叫JScript,可是與JavaScript兼容。在1997年年初,微軟在它的服務器IIS 3.0中也包含了JScript,這就是咱們在ASP中能使用的腳本語言。鑑於微軟到處與網景針鋒相對,出於保護本身的目的,網景公司推動了JavaScript的標準化進程,於1996年11月將JavaScript遞交給ECMA國際標準組織,在1997年7月公佈了第一個版本,是爲ECMA-262號標準,又稱ECMAScript。
能夠看到,JavaScript一早就能運行在先後端,但風雲變幻,在先後端各自的待遇卻不盡相同。伴隨着Java、PHP、.NET等服務器端技術的風靡,與前端瀏覽器中的JavaScript愈來愈重要相比,服務器端JavaScript逐漸式微。只剩下Rhino、SpiderMonkey用於工具。
然而,這個世界是變化的。第一次瀏覽器大戰落幕後的JavaScript的世界有些平靜,但依然在萌生一些變化。Google對Ajax的應用讓JavaScript變得愈來愈重要。Firefox的發佈掀起了對IE的反攻,迎來了第二次瀏覽器大戰,競爭令JavaScript的性能不斷提高,Chrome的加入令它高潮迭出。CommonJS規範的提出,不斷在完善JavaScript。ECMAScript標準的不斷推動,令語言更加精煉簡潔,不停地去蕪存菁。
瀏覽器端JavaScript在Web應用中盛行,甚至讓人們忘掉了JavaScript能夠在服務器端運行這碼事。可是,服務器端JavaScript如今回來了,由於Node誕生了。Node的誕生離不開上述的歷史契機,服務器端JavaScript在漫長的歷史中長期停滯留下空白,但Node從新將這個領域激活。Ryan Dahl基於對高性能Web服務器的探索,無心間促成了服務器端JavaScript領域的面目一新。Node憑藉V8的高性能和異步I/O模型將JavaScript從新推向了一個高潮。如今,Node不只知足JavaScript同時運行在先後端,並且性能還十分高效。與傳統印象中的不一樣,它甚至可比於當前的高效腳本語言。
奇妙的反應還在繼續,先後端要跨語言開發的現狀已經開始改變,由於語言堆棧的不一樣,開發者的分工也進行了細分:前端工程師和後端工程師。專業技能由於分工而精進,但也將技能變爲專利,彷佛前端工程師不能進行後端開發,後端工程師搞不定前端開發,猶如樹立的牆。但Node的出現令這種分工的界限又開始模糊了。同時一些後端工程師也關注到Node,他們甚至不關心先後端語言是否一致,而是赤裸裸地表示對Node高性能的垂涎,如實時、高併發等。
大量的先後端工程師加入了Node的開發陣營,GitHub上JavaScript是最活躍的開發語言,NPM社區第三方模塊恐怖的增加速度和下載量都昭示着這個過程不可逆,在這裏吼一聲萬能的NPM,總能找到你須要的解決方案。不少不斷涌現的項目和創意都由於Node和前端開發能共用一種語言而獨特。換言之,Node的本意是提供一個高性能的面向網絡的執行平臺,但無心間促成了JavaScript社區的繁榮,並進而造成強大的生態系統。
前端
目前,尚未一本書將Node自身結構介紹出來,大多停留在Node介紹或者框架、庫的使用層面上,本書但願從不一樣的視角揭示Node本身內在的特色和結構。也許你已經用過Node進行相關的開發,在使用了Node帶來的欣喜後,還能在閱讀本書時,發出一句「哦,原來Node是這樣的」,這就是本書的簡單寄望。
對於Node初學者,目前市面上也已經有Node相關的入門書,它們能夠快速地領你進入Node開發之旅。在瞭解了這些基本過程後,想了解更多Node知識的好奇心,會領你來閱讀本書的。後端