背景
WEB前端的技術(shù),用一個(gè)詞來形容,可謂——“亂象叢生”!哪怕是在前端行業(yè)深耕了十幾年的老司機(jī),也是一臉的懵逼, 到底學(xué)什么是好? 暫不說 Angular、 React 、Vue,這三個(gè)學(xué)哪個(gè)是好, 僅就 Angular來說,就有 AngularJS 1. X 與 Angular 之分。 從表象上來看,它們只是版本之分,但其背后,是兩門不同語言的紛爭,那就是 JavaScript 與 TypeScript之間的差異!
所以說,要想理解 AngularJS 與 Angular的區(qū)別,首先要了解 JavaScript 與 TypeScript之間的本質(zhì)區(qū)別。
他山之石: 觀望下 Apple 的 Objective-C 與 Swift
在講述 JavaScript 與 TypeScript 之間的區(qū)別之前,我們先來看一段蘋果公司的旗下的語言: Objective -C 與 SWIFT 語言的發(fā)展歷史。
Apple 公司一向秉承創(chuàng)新, 原本用的好好的 Objective-C, 在2012年推出 swift 語言, 5年過去了。 Swift 版本也經(jīng)歷了幾次大的改動(dòng),其優(yōu)勢不斷在網(wǎng)上煽情,結(jié)果呢? 國內(nèi)公司就是不買賬,盡管 Swift 編譯從入門到精通的書已經(jīng)遍地都是,但用Swift 開發(fā) iOS APP, 可謂“寥寥無幾” !其原因主要有以下幾個(gè)方面:
考慮已有項(xiàng)目的延續(xù)性: Objective-C 已經(jīng)有20年的歷史, 從2009年開始,人們普遍用 Objective-C 做開發(fā),可以說,幾乎每一位學(xué)習(xí) iOS APP 開發(fā)的人,都是從Objective-C 開始的。 公司的產(chǎn)品也都是用 Objective-C 開發(fā)的。 現(xiàn)在突然要換成 Swift, 你得給出個(gè)理由吧。 總不至于說 Swift 是新推出的、輕量級的語言,這是沒有說服力的。 一個(gè)新技術(shù),從誕生到推廣,必須給出足夠多的選擇理由。 新的東西能做的,老的也能做的,其差異微乎其微,這就沒有什么被選用的動(dòng)力了。要知道, 采用一項(xiàng)新的技術(shù),就意味著要踩無數(shù)個(gè)坑,老板關(guān)注的是業(yè)務(wù),至于采用什么技術(shù),只要是成本低,也能用,不會(huì)刻意強(qiáng)求員工改技術(shù)。
考慮下學(xué)習(xí)曲線 : 熟悉一門新的技術(shù),需要一個(gè)踩坑的過程;了解下容易,用它做出產(chǎn)品來,一個(gè)字——“難”!
新型技術(shù),需要生態(tài)的支持: 僅憑熱情是不夠的, 并不是說,用新的技術(shù),做幾個(gè)demo,就算驗(yàn)證了技術(shù)的成熟度。這還得需要周邊生態(tài)的支持。 比如: 遇到問題,有多少資料可查閱; 有多少第三方庫可支持,這都是要考慮的。
AngularJS的歷史變遷
再回到 JavaScript 與 TypeScript , 當(dāng)聽到 AngularJS改名了,2.0 版的 Angular 去掉了 JS , 因?yàn)?1.X 是 AngularJS。 JS 是 JavaScript的縮寫, AngularJS 表明,它是用 JavaScript 編寫的; 而 Angular呢? 是用 TypeScript 語言編寫的。 兩種語言完全不同,你這明白了為什么 1.X 與 2 的版本差異有多大了 吧。 這與蘋果的 Objective-C 與 Swift 的歷史,驚人的相似。
TypeScript 出身于微軟名下, MicroSoft 無愧于是一家軟件公司,推出的軟件產(chǎn)品真是不少, 但能用起來的,在互聯(lián)網(wǎng)行業(yè),真的不多。 比如: 微軟家的 C# (.net),這次推出的 TypeScirpt,其前景如何呢? 讓我們拭目以待。
再來看下JavaScript 與 TypeScript 的區(qū)別
JavaScript 可以直接在瀏覽器中運(yùn)行代碼;
TypeScript不能直接在瀏覽器中運(yùn)行代碼,必須經(jīng)過編譯,所以必須使用構(gòu)建工具。
(1 )對比結(jié)果: TypeScript 并沒有帶來什么便利,而學(xué)習(xí) TypeScript 可不是一朝一夕就能搞定的,這得考慮下學(xué)習(xí)曲線了。
(2 )MVC vs. MVVM 設(shè)計(jì)模式之爭: AngularJS 采用 MVC,而 Angular 采用 MVVM ,采用面向組件的開發(fā)模式。 二者僅僅是設(shè)計(jì)模式不同, 而MVC是再成熟不過的設(shè)計(jì)模式了。 MVC并沒有什么短板。
小結(jié):
整體來看,因?yàn)?Angular 2 及以上版本,使用 TypeScript 編程語言,導(dǎo)致前端開發(fā)工程師不容易上手,AngularJS 從2009推出,到現(xiàn)在已經(jīng)有了十年的沉淀,相比 React 是 2013年推出,從IT發(fā)展周期來看, 相差了5年。
直白地說, 市面上,使用AngularJS 開發(fā)的產(chǎn)品實(shí)在太多了。 它需要持續(xù)地維護(hù),不斷的迭代。 試想,在這種情況下,有哪個(gè)老板輕易冒這個(gè)險(xiǎn),把原本好好的 AngularJS 框架改為 Angular呢?