javascript
出生就遇浏览器大战,亲爹还不爱,命运坎坷的JavaScript终于苦尽甘来
提起JavaScript,很多開(kāi)發(fā)者應(yīng)該都很熟悉了,因?yàn)檫@門語(yǔ)言在語(yǔ)言排行榜上常年霸榜;不僅如此,JavaScript在web開(kāi)發(fā)中占據(jù)著舉足輕重的地位,開(kāi)發(fā)者眾多,數(shù)量上已經(jīng)快要超過(guò)Java開(kāi)發(fā)者了,開(kāi)發(fā)社區(qū)非常活躍,越來(lái)越多的優(yōu)秀開(kāi)發(fā)框架涌現(xiàn),比如Vue、React、Angular等,深受企業(yè)和開(kāi)發(fā)者們的信賴。
盡管如今的JavaScript發(fā)展如此繁榮,但曾經(jīng)的它可沒(méi)這么順利,命運(yùn)坎坷用來(lái)形容一點(diǎn)都不為過(guò)。下面就來(lái)一起梳理梳理吧!如果小伙伴有更詳細(xì)的補(bǔ)充,歡迎在評(píng)論區(qū)留下您的高見(jiàn)!
Mosaic瀏覽器首發(fā)
1990年底,歐洲核能研究組織(CERN)科學(xué)家 Tim Berners-Lee,在互聯(lián)網(wǎng)的基礎(chǔ)上發(fā)明了萬(wàn)維網(wǎng)(World Wide Web),進(jìn)而實(shí)現(xiàn)了在網(wǎng)上瀏覽網(wǎng)頁(yè)文件;因?yàn)樽铋_(kāi)始時(shí)候,網(wǎng)頁(yè)只能在操作系統(tǒng)的終端里瀏覽,只能使用命令行操作,網(wǎng)頁(yè)也都是字符,并沒(méi)有圖片,更沒(méi)有現(xiàn)在美觀的樣式和動(dòng)畫,不僅操作不方便,更沒(méi)有使用體驗(yàn)和美觀可言;萬(wàn)維網(wǎng)的出現(xiàn),網(wǎng)頁(yè)可以通過(guò)互聯(lián)網(wǎng)來(lái)訪問(wèn),使得這種情況得到大大改善。
1992 年,Nombas 公司開(kāi)發(fā)了一種腳本語(yǔ)言: Cmm(C-minus-minus,中文翻譯為C減減,簡(jiǎn)稱 Cmm),盡管Cmm在命名上和C++有些類似,但和C++卻是完全不同的語(yǔ)言,Cmm 是一門可以替代宏操作的腳本語(yǔ)言,在語(yǔ)法上與 C 和 C ++ 很高的相似度。
Nombas 公司為Cmm腳本語(yǔ)言開(kāi)發(fā)了運(yùn)行環(huán)境: CEnvi ,通過(guò)下載CEnvi ,便能在網(wǎng)頁(yè)中嵌入Cmm腳本語(yǔ)言,Cmm的出現(xiàn)使得客戶端腳本語(yǔ)言有了雛形。盡管后來(lái)Nombas 把 Cmm 的名字改成了 ScriptEase,也僅僅是改了名字,雖然名字叫ScriptEase,但他和JavaScript卻沒(méi)有任何關(guān)系,更不是JavaScript語(yǔ)言的源頭。
1992年底,美國(guó)國(guó)家超級(jí)電腦應(yīng)用中心(NCSA)開(kāi)發(fā)了史上第一個(gè)瀏覽器,叫做 Mosaic;Mosaic瀏覽器不僅可以通過(guò)互聯(lián)網(wǎng)訪問(wèn)網(wǎng)頁(yè),同時(shí)也可以顯示圖片,從此網(wǎng)頁(yè)可以在圖形界面的窗口瀏覽,瀏覽器時(shí)代正式開(kāi)啟。
Netscape Navigator 時(shí)代
1994年10月,Mosaic瀏覽器的核心開(kāi)發(fā)成員**馬克·安德森(Marc Andreessen)和吉姆·克拉克(Jim.H.Clark)**共同創(chuàng)立了Mosaic 公司,目的就是基于 Mosaic 繼續(xù)開(kāi)發(fā)瀏覽器。
但由于Mosaic 的商標(biāo)被伊利諾伊大學(xué)擁有,并且Mosaic 瀏覽器的技術(shù)已經(jīng)被轉(zhuǎn)讓給了Spyglass公司,所以新成立的Mosaic 公司不久后改名為 Netscape(中文譯為網(wǎng)景),并重新編寫代碼實(shí)現(xiàn)了一個(gè)新的瀏覽器,這個(gè)新瀏覽器被取名為 Netscape Navigator,即“導(dǎo)航者”。而它的對(duì)內(nèi)稱呼為Mozilla,意為Mosaic殺手。
1994年12月,Navigator 發(fā)布了1.0版,一經(jīng)發(fā)布就取得了巨大成功,在短短的4個(gè)月里就占據(jù)了 90% 的瀏覽器市場(chǎng),短期甚至內(nèi)成為了默認(rèn)瀏覽器;同時(shí),Nombas 也發(fā)布了CEnvi 的首個(gè)可用版本。
上網(wǎng)慢且貴
由于 Netscape Navigator 的成功,更多的應(yīng)用開(kāi)始出現(xiàn)在互聯(lián)網(wǎng)上,讓網(wǎng)上沖浪越來(lái)越流行;但此時(shí),大部分因特網(wǎng)用戶還僅僅通過(guò) 28.8 kbit/s 的調(diào)制解調(diào)器連接到網(wǎng)絡(luò),網(wǎng)速很慢而且上網(wǎng)費(fèi)很貴,所以當(dāng)時(shí)用戶的上網(wǎng)體驗(yàn)不僅不好,而且還很昂貴;
使用體驗(yàn)差
有時(shí)候僅僅是簡(jiǎn)單的表單數(shù)據(jù)驗(yàn)證,就要與服務(wù)器進(jìn)行多次的往返交互。設(shè)想一下,用戶填完一個(gè)表單,點(diǎn)擊提交按鈕,等待了 30 秒的處理后,看到的卻是一條您的用戶名忘記填寫的提示,如果表單更大、更復(fù)雜,交互過(guò)程將會(huì)更加漫長(zhǎng),對(duì)于用戶來(lái)說(shuō),這個(gè)過(guò)程太痛苦了。
客戶端語(yǔ)言提上日程
網(wǎng)景公司很快也發(fā)現(xiàn)了,如果用戶忘記填寫“用戶名”,就點(diǎn)了“發(fā)送”按鈕,到服務(wù)器再發(fā)現(xiàn)這一點(diǎn)就太晚了,最好能在表單數(shù)據(jù)與服務(wù)端交互前,就能檢測(cè)出“用戶名”未填寫,進(jìn)而提示用戶“請(qǐng)?zhí)顚懹脩裘?#xff1b;
更是敏感的意識(shí)到了,此時(shí)的Navigator 瀏覽器需要一種可以嵌入網(wǎng)頁(yè)的腳本語(yǔ)言,這種語(yǔ)言運(yùn)行在瀏覽器端,可以控制瀏覽器行為,并且能和服務(wù)端交互。
于是網(wǎng)景公司便決定開(kāi)發(fā)一門可以Navigator 瀏覽器中運(yùn)行的、輕量級(jí)的客戶端腳本語(yǔ)言,如果此舉成功,那么一些普通的用戶操作便能放在客戶端來(lái)執(zhí)行,進(jìn)而能大大改善用戶操作體驗(yàn),提高網(wǎng)絡(luò)應(yīng)用的運(yùn)行效率。
互聯(lián)網(wǎng)刮起了Java 東風(fēng)
但是又一個(gè)問(wèn)題擺在了網(wǎng)景公司面前,這是一個(gè)選擇題,有兩個(gè)可選項(xiàng):
- 到底是使用現(xiàn)有的語(yǔ)言來(lái)實(shí)現(xiàn),比如:Perl、Python、Tcl、Scheme等;
- 還是重新開(kāi)發(fā)一門新語(yǔ)言來(lái)適應(yīng)當(dāng)前的需求;
兩個(gè)選擇各有利弊。
第一個(gè)選擇,使用現(xiàn)有的編程語(yǔ)言:
- 可以充分利用現(xiàn)有代碼庫(kù)和程序員資源,入門門檻較低;
- 借助現(xiàn)有語(yǔ)言的市場(chǎng),可以更容易推廣開(kāi)來(lái);
- 可能不能完美的實(shí)現(xiàn)當(dāng)下的需求;
第二個(gè)選擇,重新開(kāi)發(fā)新語(yǔ)言:
- 能夠完美實(shí)現(xiàn)當(dāng)前的使用需求,
- 需要重新設(shè)計(jì)語(yǔ)言規(guī)范,吸引開(kāi)發(fā)者使用,這需要時(shí)間和成本;
到底采用哪一個(gè)選擇,網(wǎng)景公司內(nèi)部爭(zhēng)執(zhí)不下,管理層一時(shí)也難以下定決心。就在這時(shí),Java 異軍突起,這種可以 “一次編寫,到處運(yùn)行” (Write Once, Run Anywhere) 的語(yǔ)言一經(jīng)發(fā)布就大火,廣受開(kāi)發(fā)者和企業(yè)的青睞。
網(wǎng)景公司管理層也動(dòng)了心,決定與Sun公司合作,不僅允許Java程序以applet(小程序)的形式,直接在瀏覽器中運(yùn)行;甚至還考慮直接將Java作為腳本語(yǔ)言嵌入網(wǎng)頁(yè),但由于Java語(yǔ)言過(guò)于龐大,并不適合嵌入瀏覽器中,才不得不放棄。
1995年5月,網(wǎng)景公司做出決策,未來(lái)的網(wǎng)頁(yè)客戶端腳本語(yǔ)言必須"看上去與Java足夠相似",使得Java程序員能夠快速上手,功能不需要太強(qiáng),語(yǔ)法簡(jiǎn)單,容易學(xué)習(xí),即使是非專業(yè)的網(wǎng)頁(yè)作者也能快速學(xué)會(huì);這個(gè)決策一出,其實(shí)就已經(jīng)將第一個(gè)選擇排除了,選擇了開(kāi)發(fā)一門新語(yǔ)言。
Brendan Eich 出場(chǎng)
1995年,網(wǎng)景公司找到了公司程序員 Brendan Eich ,任命其為這門新的客戶端腳本語(yǔ)言的設(shè)計(jì)者;但Brendan Eich 的研究方向是函數(shù)式編程,他自身也有很強(qiáng)的函數(shù)式編程背景,所以對(duì)Java 和 OOP并不感冒;
當(dāng)初網(wǎng)景公司招聘他的目的也是研究將Scheme語(yǔ)言作為網(wǎng)頁(yè)客戶端腳本語(yǔ)言的可能性。Brendan Eich本人原本以為進(jìn)入新公司后,將會(huì)是研究Scheme語(yǔ)言,可卻現(xiàn)在接到這樣的任務(wù),自然是不情愿的。
Scheme語(yǔ)言是函數(shù)式語(yǔ)言鼻祖 Lisp語(yǔ)言的一種方言,另外一種比較流行的Lisp方言是Common Lisp。
1995年5月,Brendan Eich 只用了10天,就設(shè)計(jì)完成了這種語(yǔ)言的第一版;它是一個(gè)大雜燴,語(yǔ)法有多個(gè)來(lái)源,當(dāng)時(shí)的設(shè)計(jì)思路是:
- 基本語(yǔ)法:借鑒 C 語(yǔ)言和 Java 語(yǔ)言;
- 數(shù)據(jù)結(jié)構(gòu):借鑒 Java 語(yǔ)言,包括將值分成原始值和對(duì)象兩大類;
- 函數(shù)的用法:借鑒 Scheme 語(yǔ)言和 Awk 語(yǔ)言,引入閉包,把函數(shù)作為語(yǔ)言的核心;
- 原型繼承模型:借鑒 Self 語(yǔ)言(Smalltalk 的一種變種);
- 正則表達(dá)式:借鑒 Perl 語(yǔ)言;
- 字符串和數(shù)組處理:借鑒 Python 語(yǔ)言;
網(wǎng)景公司的這種瀏覽器腳本語(yǔ)言,最初名字叫做 Mocha,1995年9月改為 LiveScript;
但由于網(wǎng)景公司的整個(gè)管理層,都是認(rèn)準(zhǔn)了Java語(yǔ)言的,更想借一下Java的東風(fēng),所以同年12月,網(wǎng)景公司與 Sun 公司達(dá)成協(xié)議,Sun 公司授權(quán)網(wǎng)景公司將這門新的語(yǔ)言命名為 JavaScript,改名后的JavaScript更是被網(wǎng)景公司和Sun兩家公司聯(lián)手推出,官方的宣傳 :JavaScript 是 Java 的補(bǔ)充,屬于輕量級(jí)的 Java;所以JavaScript = Java + Script這樣的宣傳更不是空穴來(lái)風(fēng)。
借此機(jī)會(huì),網(wǎng)景公司便將JavaScript申請(qǐng)成為了商標(biāo)。 這樣一來(lái),網(wǎng)景公司可以借助 Java 語(yǔ)言的聲勢(shì)推廣JavaScript,而 Sun 公司則將自己的影響力擴(kuò)展到了瀏覽器。
僅用10天就設(shè)計(jì)出的語(yǔ)言,其表現(xiàn)可想而知。在其推出后的很長(zhǎng)一段時(shí)間內(nèi),程序運(yùn)行都有著各式各樣的問(wèn)題。就連JavaScript的設(shè)計(jì)者本人Brendan Eich都不喜歡他自己設(shè)計(jì)的這門語(yǔ)言:
“與其說(shuō)我愛(ài)Javascript,不如說(shuō)我恨它。它是C語(yǔ)言和Self語(yǔ)言yiyeqing的產(chǎn)物。十八世紀(jì)英國(guó)文學(xué)家約翰遜博士說(shuō)得好:‘它的優(yōu)秀之 處并非原創(chuàng),它的原創(chuàng)之處并不優(yōu)秀。’ (the part that is good is not original, and the part that is original is not good.)”
—— Brendan Eich對(duì)JavaScript的評(píng)價(jià)
JavaScript 正式誕生
1995年12月4日,網(wǎng)景公司與 Sun 公司聯(lián)合發(fā)布了 JavaScript 語(yǔ)言,對(duì)外宣傳 JavaScript 是 Java 的補(bǔ)充,屬于輕量級(jí)的 Java,專門用來(lái)操作網(wǎng)頁(yè),實(shí)現(xiàn)動(dòng)態(tài)效果。
JavaScript 和 Java
盡管名字里都有Java,但Java和JavaScript是兩種不同的語(yǔ)言,這兩種語(yǔ)言有一定的相似性,因?yàn)镴avaScript的基本語(yǔ)法在設(shè)計(jì)過(guò)程中是借鑒了Java的。
- Java 是強(qiáng)類型的靜態(tài)語(yǔ)言,是一門純面向?qū)ο蟮恼Z(yǔ)言,以類和對(duì)象為核心,在Java中沒(méi)有函數(shù)一說(shuō),有的只是方法。
- JavaScript是弱類型的動(dòng)態(tài)語(yǔ)言,在JavaScript 中,語(yǔ)言的函數(shù)是一種獨(dú)立的數(shù)據(jù)類型,且JavaScript是以函數(shù)為核心的,采用基于原型對(duì)象(prototype)的繼承鏈。
另外,Java 程序要經(jīng)過(guò)編譯才能運(yùn)行,而 JavaScript 語(yǔ)言的運(yùn)行時(shí)解釋器已經(jīng)集成到瀏覽器中,所以JavaScript 可在瀏覽器直接運(yùn)行。
1996年3月,Navigator 2.0 瀏覽器正式內(nèi)置了 JavaScript 腳本語(yǔ)言。
同年,Netscape Navigator 3.0發(fā)布,此版本有分為“Standard Edition”和“Gold Edition”兩個(gè)版本,兩個(gè)版本區(qū)別在于,后者具備郵件軟件和所見(jiàn)即所得的網(wǎng)頁(yè)編輯程式。
瀏覽器大戰(zhàn)
Netscape 春風(fēng)得意
從1995年開(kāi)始,萬(wàn)維網(wǎng)慢慢開(kāi)始被大眾認(rèn)知,受到越來(lái)越多的關(guān)注。 能夠顯示圖形的Mosaic 瀏覽器俘獲了不少用戶的芳心;Netscape Navigator 更是一經(jīng)發(fā)布就占據(jù)了超過(guò)90%的瀏覽器市場(chǎng),一度變成最受歡迎的網(wǎng)絡(luò)瀏覽器。這時(shí)的Netscape 可謂是春風(fēng)得意,但是好景不長(zhǎng)**。**
IE 瀏覽器加入
由于微軟對(duì)互聯(lián)網(wǎng)發(fā)展的誤判,輕視了瀏覽器的發(fā)展,使得Netscape Navigator 有機(jī)會(huì)發(fā)展壯大,但后知后覺(jué)的微軟也看到了瀏覽器市場(chǎng)發(fā)展的前景,開(kāi)始重視起來(lái),并從Spyglass公司處獲得了Mosaic的授權(quán),開(kāi)發(fā)出了自家的瀏覽器:IE 瀏覽器1.0,幾個(gè)月后,IE 瀏覽器2.0發(fā)布,并免費(fèi)向用戶提供;而此時(shí)的Netscape Navigator 是收費(fèi)的。
大戰(zhàn)一觸即發(fā)
1995年,Netscape Navigator 2.0 發(fā)布后,瀏覽器市場(chǎng)都以網(wǎng)景的JavaScript為標(biāo)準(zhǔn);微軟公司雖然有IE 瀏覽器,但卻沒(méi)有JavaScript,所以IE瀏覽器在Netscape Navigator 2.0面前不堪一擊。
于是,微軟便找上了網(wǎng)景,想要收購(gòu)網(wǎng)景,但春風(fēng)得意的網(wǎng)景公司自然是不會(huì)同意的;微軟自然也不會(huì)放棄,更不會(huì)放任網(wǎng)景做大,緊接著便是全力投入到了IE瀏覽器新版本的開(kāi)發(fā)中。
1996年8月,微軟的IE 3.0發(fā)布,同時(shí),微軟也開(kāi)發(fā)出了自己的客戶端腳本語(yǔ)言:JScript(這個(gè)名字怎么看怎么像JavaScript的縮寫),在對(duì)自家的IE瀏覽器的宣傳上,微軟也更是不遺余力;
1997年 IE4.0發(fā)布,IE4.0有著更好的W3C標(biāo)準(zhǔn)的實(shí)現(xiàn),更是被捆綁在了Windows中,隨Windows系統(tǒng)一同發(fā)布;正是這一舉措,IE瀏覽器的市場(chǎng)份額開(kāi)始暴增;
到了1999年,微軟的IE瀏覽器已經(jīng)占據(jù)了絕大部分瀏覽器市場(chǎng),而此時(shí)網(wǎng)景公司已被美國(guó)在線收購(gòu),留下Netscape Navigator在茍延殘喘。
至此,第一次瀏覽器大戰(zhàn)以IE大獲全勝而告終。
火狐瀏覽器涅槃重生
1998年,網(wǎng)景深知瀏覽器大戰(zhàn)中的Netscape Navigator敗局已定,面對(duì)著無(wú)法挽回的市場(chǎng)份額,網(wǎng)景公司做了一個(gè)重大決定: 將Netscape Navigator 5.0開(kāi)源;
同年,網(wǎng)景公司成立非營(yíng)利性組織: Mozilla 基金會(huì),主要負(fù)責(zé)Netscape Navigator的開(kāi)源和維護(hù);Mozilla 基金會(huì)獨(dú)立于網(wǎng)景公司運(yùn)行,所以就算后來(lái)網(wǎng)景公司雖被美國(guó)在線收購(gòu),Mozilla 基金會(huì)卻能一直獨(dú)立運(yùn)作至今。
在Mozilla 基金會(huì)的手中,Netscape Navigator開(kāi)放了源代碼,分兩個(gè)分支:
- 一個(gè)是Netscape Navigator,相繼推出了Netscape Navigator6、7、8;
- 另一個(gè)便是Firefox,一直維護(hù)至今;
無(wú)論是開(kāi)源后的Netscape Navigator,還是Firefox,都是基于Gecko渲染引擎來(lái)構(gòu)建的。關(guān)于這段故事,還有一部紀(jì)錄片,叫《奔騰的代碼》,主要講述的就是Netscape Navigator的開(kāi)源和Firefox(火狐瀏覽器)的誕生的故事,想要詳細(xì)了解的同好可以去搜來(lái)看看。
開(kāi)源后的Firefox(火狐瀏覽器)重新開(kāi)發(fā)了渲染引擎Gecko并且積極擁抱JavaScript標(biāo)準(zhǔn),無(wú)論是在性能,還是用戶體驗(yàn)上,都有了極大的提升;不僅是在Windows系統(tǒng),在Linux系統(tǒng)、Mac系統(tǒng),也都有著不俗的表現(xiàn),甚至在Linux系統(tǒng)中,比Chrome瀏覽器的表現(xiàn)都要好。
優(yōu)異的性能,再加上在Mozilla 基金會(huì)的良好運(yùn)作下,火狐瀏覽器逐漸了獲得用戶認(rèn)可,原本被IE 瀏覽器占據(jù)的市場(chǎng)逐漸被火狐瀏覽器奪回。
反觀IE瀏覽器,并沒(méi)有積極適配EcmaScript,始終沉浸在自己的世界中,玩著只有自己的游戲,跟標(biāo)準(zhǔn)越走越遠(yuǎn),漸漸被用戶拋棄,原本的用戶市場(chǎng)也被逐漸被涅槃后的火狐瀏覽器所取代。
縱觀瀏覽器發(fā)展歷史,不得不說(shuō),歷史總是驚人的相似。
WebKit
得益于 KDE 的 KHTML 和 KJS,蘋果公司也開(kāi)發(fā)了自家的JavaScript 引擎:Webkit渲染引擎,蘋果公司不僅將Webkit渲染引擎開(kāi)源免費(fèi) ,而且還基于Webkit渲染引擎開(kāi)發(fā)了 Safari 瀏覽器。
V8
谷歌于2008年12月發(fā)布了 Chrome 瀏覽器, 與Safari 瀏覽器使用相同的 WebKit 渲染引擎和一個(gè)名為 V8 引擎。V8使用C++開(kāi)發(fā),相比其它的JavaScript引擎轉(zhuǎn)換成字節(jié)碼或解釋執(zhí)行,V8引擎會(huì)將JavaScript程序其編譯成原生機(jī)器碼,所以JavaScript程序在V8引擎下的運(yùn)行速度足以媲美二進(jìn)制程序。
不久之后,谷歌便以 Chromium項(xiàng)目開(kāi)放了Chrome瀏覽器的源碼;新功能會(huì)率先在Chromium上實(shí)現(xiàn),穩(wěn)定后才會(huì)應(yīng)用在Chrome上。
JavaScript 標(biāo)準(zhǔn)化
三個(gè)巨頭三足鼎立
在微軟進(jìn)入瀏覽器市場(chǎng),發(fā)布了JScript之后,有 3 種不同的 JavaScript 實(shí)現(xiàn)同時(shí)存在,分別是:
三個(gè)巨頭三足鼎立,形成了三分天下之勢(shì),網(wǎng)景公司也面臨喪失瀏覽器腳本語(yǔ)言的主導(dǎo)權(quán)的局面;而由此導(dǎo)致的版本不兼容問(wèn)題日益加劇,當(dāng)時(shí)的一個(gè)網(wǎng)頁(yè)程序往往要對(duì)三個(gè)平臺(tái)提供不同的實(shí)現(xiàn),開(kāi)發(fā)和維護(hù)的成本都越來(lái)越高;
ECMA出手拯救JavaScript
1996年11月,網(wǎng)景公司面對(duì)著逐漸被微軟蠶食的瀏覽器市場(chǎng),于是決定將 JavaScript 提交給國(guó)際標(biāo)準(zhǔn)化組織 ECMA(European Computer Manufacturers Association),希望 JavaScript 能夠成為國(guó)際標(biāo)準(zhǔn),以此抵抗微軟。
ECMA接受了這個(gè)請(qǐng)求,并決定由39號(hào)技術(shù)委員會(huì)(Technical Committee 39)負(fù)責(zé)制定和審核這個(gè)標(biāo)準(zhǔn),委員會(huì)成員由業(yè)內(nèi)各大公司派出的工程師組成,該委員會(huì)定期開(kāi)會(huì),所有的郵件討論和會(huì)議記錄,都是公開(kāi)的。
1997年7月,ECMA 組織發(fā)布262號(hào)標(biāo)準(zhǔn)文件(即:ECMA-262)的第一版,規(guī)定了瀏覽器腳本語(yǔ)言JavaScript的標(biāo)準(zhǔn),并該語(yǔ)言標(biāo)準(zhǔn)取名為 ECMAScript。
之所以不叫 JavaScript,一方面是由于商標(biāo)的關(guān)系,因?yàn)镴ava 是 Sun公司的商標(biāo),根據(jù)一份授權(quán)協(xié)議,只有 網(wǎng)景公司可以合法地使用 JavaScript 這個(gè)名字,且 JavaScript 已經(jīng)被 網(wǎng)景公司注冊(cè)為商標(biāo);另一方面是ECMA也想體現(xiàn)ECMAScript并不同于曾經(jīng)的JavaScript,ECMA組織也不同于網(wǎng)景,這樣就有利于保證這門語(yǔ)言的開(kāi)放性和中立性。
完整的JavaScript實(shí)現(xiàn)
至此,完整的JavaScript實(shí)現(xiàn)包含三個(gè)部分:ECMAScript,文檔對(duì)象模型(DOM),瀏覽器對(duì)象模型(BOM)。 符合ECMA-262 3rd Edition標(biāo)準(zhǔn)的實(shí)現(xiàn)有:
- Microsoft公司的JScript;
- Mozilla的JavaScript-C,后改名為SpiderMonkey;
- Mozilla的Rhino;
- Digital Mars公司的DMDScript;
- Google公司的V8;
- WebKit;
需要注意的是,ECMAScript 只用來(lái)標(biāo)準(zhǔn)化 JavaScript 語(yǔ)言的基本語(yǔ)法,與部署環(huán)境相關(guān)的標(biāo)準(zhǔn)都由其他標(biāo)準(zhǔn)規(guī)定,比如 DOM 的標(biāo)準(zhǔn)就是由 W3C組織制定的。
ECMA-262 標(biāo)準(zhǔn)后來(lái)也獲得國(guó)際標(biāo)準(zhǔn)化組織 ISO的批準(zhǔn),并以標(biāo)準(zhǔn)號(hào) ISO-16262命名。
ECMAScript 步入正軌
1997年7月,ECMAScript 1.0發(fā)布,這個(gè)版本做了些小改動(dòng):支持Unicode標(biāo)準(zhǔn),對(duì)象與平臺(tái)無(wú)關(guān)等,其他的特性與網(wǎng)景發(fā)布的JavaScript1.1并無(wú)二致;
1998年6月,ECMAScript 2.0發(fā)布,這個(gè)版本主要做的是細(xì)節(jié)優(yōu)化,沒(méi)有新功能發(fā)布;
1999年12月,ECMAScript 3.0版發(fā)布,這個(gè)版本對(duì)JavaScript標(biāo)準(zhǔn)做了大量的修改。修復(fù)了包括字符串處理、錯(cuò)誤定義和數(shù)值輸出等一系列問(wèn)題。新增了對(duì)正則表達(dá)式、新控制語(yǔ)句、try-catch異常處理的支持。此時(shí)的ECMAScript才能算是一門真正的編程語(yǔ)言。
2007年10月,ECMAScript 4.0版草案發(fā)布,草案的標(biāo)準(zhǔn)跟第3版比起來(lái),幾乎是定義了一門新語(yǔ)言;因?yàn)椴莅覆粌H包含了強(qiáng)類型變量、新的數(shù)據(jù)結(jié)構(gòu)和繼承,還添加了JSON對(duì)象、繼承的方法和高級(jí)屬性定義,以及嚴(yán)格模式。由于改動(dòng)過(guò)大,所以4.0草案發(fā)布后,遭到了Yahoo、Microsoft、Google等公司的反對(duì)。
2008年7月,由于各方爭(zhēng)執(zhí)不下,ECMAScript 4.0 的開(kāi)發(fā)被終止,ECMAScript 4.0中改動(dòng)較少的一部分被拿出來(lái),作為 ECMAScript 3.1開(kāi)發(fā),項(xiàng)目代號(hào)為Harmony,而其他的改動(dòng)較大的功能將會(huì)逐步推出,會(huì)后不久,ECMAScript 3.1 改名為 ECMAScript 5;
2009年12月,ECMAScript 5.0版 正式發(fā)布;Harmony 項(xiàng)目則一分為二,一些可行性較高的功能優(yōu)先開(kāi)發(fā),后來(lái)成了 ECMAScript 6;而另一些不太成熟的設(shè)想,則會(huì)考慮放在ECMAScript 7中;
2011年6月,ECMAScript 5.1版發(fā)布,并且成為 ISO 國(guó)際標(biāo)準(zhǔn)(ISO/IEC 16262:2011);
2012年底,所有的主流瀏覽器全面支持 ECMAScript 5.1;
2015年6月,ECMAScript 6 正式發(fā)布,并且更名為“ECMAScript 2015”。同時(shí), TC39 委員會(huì)也計(jì)劃以后每年發(fā)布一個(gè) ECMAScript 的版本;2016年發(fā)布的版本,稱為“ECMAScript 2016”,2017年發(fā)布“ECMAScript 2017”,以后的版本以此類推。
AJAX
Ajax這個(gè)詞首先出現(xiàn)在《Ajax: A New Approach to Web Applications》一文中,該文的作者是Jesse James Garrett,在該文中,將Ajax定義為了:Asynchronous JavaScrpt + XML的組合,代表并不是單一的技術(shù),而是多種技術(shù)的組合。
該文的迅速流傳使得Ajax被更多開(kāi)發(fā)者認(rèn)知、認(rèn)可,并在1998年得到了廣泛應(yīng)用。Ajax允許客戶端腳本發(fā)送HTTP請(qǐng)求動(dòng)態(tài)加載局部的網(wǎng)頁(yè)內(nèi)容,實(shí)現(xiàn)網(wǎng)頁(yè)的異步加載,也就意味著不必因?yàn)榫植烤W(wǎng)頁(yè)內(nèi)容的修改而加載整個(gè)網(wǎng)頁(yè),從而能夠帶來(lái)更加友好的網(wǎng)頁(yè)體驗(yàn)。
Ajax的第一個(gè)組件由Outlook Web Access小組寫成,被用于微軟Exchange Server,因此Outlook Web Access成了第一個(gè)應(yīng)用了Ajax技術(shù)的商業(yè)應(yīng)用程序。
2005年,Google在它的很多應(yīng)用中都使用了Ajax,如Google討論組、Google地圖、Google搜索建議、Gmail等。
自此以后,Ajax迅速竄紅,進(jìn)而引發(fā)了一場(chǎng)互聯(lián)網(wǎng)革命,使得基于Ajax的綜合框架和JS庫(kù)的急劇增加,越來(lái)越多的優(yōu)秀框架出現(xiàn),不僅Web應(yīng)用的構(gòu)建變得更加容易,也改進(jìn)了 JavaScript 編程實(shí)踐,對(duì)JavaScript的發(fā)展推進(jìn)做出了巨大的貢獻(xiàn)。
JQuery
jQuery是一個(gè)快速、簡(jiǎn)潔的JavaScript框架,于2006年8月發(fā)布第一個(gè)穩(wěn)定版本,是繼Prototype之后又一個(gè)優(yōu)秀的JavaScript代碼庫(kù)。它封裝JavaScript常用的功能代碼,并提供了一種更加簡(jiǎn)便的操作模式,使得HTML文檔操作、事件處理、動(dòng)畫設(shè)計(jì)和Ajax交互變得更加容易。
此外,jQuery具有高效靈活的CSS選擇器,并且可對(duì)CSS選擇器進(jìn)行擴(kuò)展;擁有便捷的插件擴(kuò)展機(jī)制和豐富的插件。jQuery兼容各種主流瀏覽器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。
Node.js
就在Chromium 發(fā)布半年后,Ryan Dahl創(chuàng)建了一個(gè)基于 Chrome V8 引擎的 JavaScript 開(kāi)發(fā)平臺(tái):Node.js, Node .js提供了一個(gè)可以JavaScript運(yùn)行在服務(wù)端的運(yùn)行環(huán)境,使得JavaScript程序可以運(yùn)行在服務(wù)端;可以說(shuō),Node.js的出現(xiàn)讓 JavaScript 提升了一個(gè)層次,讓前端程序員不再局限于客戶端開(kāi)發(fā),也讓全棧開(kāi)發(fā)成為了可能。
隨Node.js發(fā)布的還有包管理工具:npm,通過(guò)npm可以:
- 允許用戶從NPM服務(wù)器下載別人編寫的第三方包到本地使用;
- 允許用戶從NPM服務(wù)器下載并安裝別人編寫的命令行程序到本地使用;
- 允許用戶將自己編寫的包或命令行程序上傳到NPM服務(wù)器供別人使用;
三大框架
由于Node.js的成功,在npm管理工具的帶動(dòng)下,一大批優(yōu)秀的JavaScript開(kāi)發(fā)框架開(kāi)始涌現(xiàn),其中有代表性的便是Vue.js、Angular.js、React.js,這些框架語(yǔ)法簡(jiǎn)單、性能優(yōu)越、文檔豐富,使用這些框架能夠快速搭建前端應(yīng)用,而且,由于活躍的開(kāi)發(fā)社區(qū),這些框架都有著豐富的系統(tǒng)組件,能夠完成一切的業(yè)務(wù)需求。
Vue.js是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架,自底向上增量開(kāi)發(fā)的設(shè)計(jì),專注于視圖層,非常容易學(xué)習(xí),也非常容易與其它庫(kù)或已有項(xiàng)目整合,作者是尤雨溪;作者和框架無(wú)論在國(guó)內(nèi)、國(guó)外都有著不小的知名度;
Angular.js是一套Google推出的JavaScript開(kāi)發(fā)框架,誕生于2009年,該框架有著MVVM、模塊化、自動(dòng)化雙向數(shù)據(jù)綁定、語(yǔ)義化標(biāo)簽、依賴注入等諸多核心特性;Angular的理念是 組建視圖(UI)和寫軟件邏輯可同時(shí)進(jìn)行,將DOM操作和應(yīng)用邏輯解耦,將測(cè)試和開(kāi)發(fā)同等看待,將客戶端和服務(wù)器端解耦,在整個(gè)開(kāi)發(fā)流程里都引導(dǎo)著開(kāi)發(fā)者:從設(shè)計(jì)UI,到編寫業(yè)務(wù)邏輯,再到測(cè)試。
React.js 是Facebook 推出的JavaScript框架,起源于 Facebook 的內(nèi)部項(xiàng)目,由于 React 的設(shè)計(jì)思想極其獨(dú)特,和Vue一樣,React不是一個(gè)完整的MVC框架,很多人都認(rèn)為是MVC中的V(View)。此外,React Native框架可用于開(kāi)發(fā)跨平臺(tái)的App應(yīng)用,一套代碼便能同時(shí)運(yùn)行IOS和Android。
桌面軟件開(kāi)發(fā)
通過(guò)對(duì)Chromium 的移植,JavaScript還能用于開(kāi)發(fā)桌面應(yīng)用,典型應(yīng)用便是NW.js和Electron.js;都是使用HTML + CSS + JavaScript便能開(kāi)發(fā)出同時(shí)在Linux,Mac OS X和Windows上可運(yùn)行的桌面軟件。
Deno
今天,Deno 1.0 正式發(fā)布,什么是Deno呢?Deno是使用V8引擎并內(nèi)置于Rust的JavaScript和TypeScript的新運(yùn)行時(shí),致力于在Web瀏覽器之外執(zhí)行JavaScript和TypeScript程序。
它和Node.js的設(shè)計(jì)者是同一人:Ryan Dahl,是Ryan Dahl繼Node.js之后的又一大作;Deno的設(shè)計(jì)特別注重安全,有著眾多優(yōu)點(diǎn):
雖然都支持V8引擎,但Deno卻并不是Node.js的分支,它甚至都不和Node(NPM)兼容;Deno是一個(gè)全新的JavaScript和TypeScript程序運(yùn)行時(shí),意在構(gòu)建更加安全和高效的JavaScript和TypeScript程序,雖然目前和Node.js并不兼容,Deno卻希望在將來(lái)能夠使用Deno來(lái)運(yùn)行更多的Node項(xiàng)目。
小結(jié)
縱觀JavaScript的發(fā)展,可謂感慨良多!曾經(jīng)的JavaScript是命運(yùn)坎坷,還未出生就不受親生父親的待見(jiàn),出生后更是常年被籠罩在Java 的陰影之下,甚至一度被認(rèn)為是Java 的補(bǔ)充;被卷入瀏覽器大戰(zhàn),差點(diǎn)被遺棄。
但是好在它遇到了自己真正的歸宿:ECMA組織,不僅獲得了重生,更是廣受開(kāi)發(fā)者青睞,隨著Node.js的出現(xiàn),Vue.js、Angular.js、React.js蓬勃發(fā)展,JavaScript有了更大的應(yīng)用;Deno的誕生,使得JavaScript已經(jīng)不僅限于Web瀏覽器,又會(huì)掀起一場(chǎng)更大的互聯(lián)網(wǎng)革命,讓我們拭目以待。
完結(jié),老夫雖不正經(jīng),但老夫一身的才華!關(guān)注我,獲取更多編程科技知識(shí)。
總結(jié)
以上是生活随笔為你收集整理的出生就遇浏览器大战,亲爹还不爱,命运坎坷的JavaScript终于苦尽甘来的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php7 ob get contents
- 下一篇: 黑客帝国中代码雨如何实现?用 Pytho