本文將介紹并比較Node.js和Ruby on Rails在Web技術(shù)方面的一些優(yōu)點(diǎn)和缺點(diǎn)。
先看看兩種技術(shù)的一些相同之處。
* 受歡迎的服務(wù)器端技術(shù)
* 容易學(xué)習(xí)
* 高性能
* 由頂級網(wǎng)站/應(yīng)用程序使用
* 強(qiáng)大的社區(qū)
* 基于類似MVC的結(jié)構(gòu)
* 發(fā)展快速
Node.js和Rails都是備受推崇的服務(wù)器端技術(shù),可以使用許多不同的堆棧和數(shù)據(jù)庫等,可以實(shí)現(xiàn)不同的功能。兩者很容易學(xué)習(xí)。Node使用JavaScript,Rails使用Ruby。但是Ruby和JavaScript相比與Java,C#或其他一些高級語言而言更容易學(xué)習(xí),有大量的資源可供學(xué)習(xí)。 Node.js和Ruby on Rails都非常好,接下來將討論性能水平。使用這兩種技術(shù)的流行網(wǎng)站很多。 Node和Rails都擁有非常強(qiáng)大的社區(qū)。
Rails已經(jīng)存在有一段時(shí)間了,但是Node也越來越受歡迎。現(xiàn)在MVC或模型---視圖---控制器是一種設(shè)計(jì)模式,但Ruby on Rails很難與MVC一起使用。在諸如Express之類的Node中,MVC是可能的。不過,Express比Rails更靈活。用戶可以只采取MVC的某些方面。Node和Rails都用于快速開發(fā)和原型化。 Rails的折疊功能很好,而且Express也有生成器和命令行工具。
Rails優(yōu)點(diǎn)
* 一致的結(jié)構(gòu)
* 數(shù)據(jù)庫遷移
* 發(fā)展速度
* 一門強(qiáng)大語言
* Ruby gems.
* 成熟且有聲望的社區(qū)
Rails有一個(gè)非常強(qiáng)大的MVC結(jié)構(gòu)。大多數(shù)Rails應(yīng)用程序在核心文件和文件夾方面看起來非常相似。有這個(gè)堅(jiān)實(shí)的基礎(chǔ),然后就可以使用gems和自定義的包和數(shù)據(jù)庫來構(gòu)建。
Rails有非常好的數(shù)據(jù)庫遷移功能。允許用戶在數(shù)據(jù)庫中創(chuàng)建和編輯表格和列,而無需手動(dòng)進(jìn)入、添加或更改內(nèi)容,為用戶提供了一個(gè)很好的日志或路徑。
Node,有一些用于遷移的軟件包或模塊,比如DB-migrate,它們可以提高工作效率,但不像Rails那樣深入和易于使用。在原型設(shè)計(jì)和快速開發(fā)方面,Node沒有太多可以打敗Rails的技術(shù)。如果您使用第三方工具和模塊,Node.js和Express在快速開發(fā)方面都相當(dāng)不錯(cuò)。但Rails擁有所有這些東西。
Ruby語言有優(yōu)點(diǎn)也有缺點(diǎn),但在大多數(shù)情況下,它是很受歡迎的。Ruby是一種多范式的語言,可以做程序代碼的功能,但大部分是面向?qū)ο蟮摹ubyGems是Ruby on Rails的包管理器,它用于擴(kuò)展框架的核心功能。這與Node.js的npm相似。所有Rails應(yīng)用程序都有一個(gè)gem文件,可以在其中指定需要的gem。可以運(yùn)行一個(gè)bundler命令來安裝它們,類似于使用Node.js的npm安裝。
關(guān)于Ruby on Rails的另一個(gè)優(yōu)點(diǎn)是,它已經(jīng)存在了一段時(shí)間,擁有一個(gè)非常受人尊敬的社區(qū)。維護(hù)Ruby on Rails的開發(fā)人員非常聰明,對框架非常熱情。核心框架上有大量資源,包括論壇,博客帖子和文檔,以幫助用戶解決問題。這些都是Ruby on Rails的優(yōu)勢。
Rails缺點(diǎn)
* 性能
* 太簡單
* 受歡迎程度
* 缺乏文檔
我們來談?wù)勔恍┤秉c(diǎn)。我們聽說Ruby on Rails最大的一些抱怨是它的相對速度較慢。 Rails是一個(gè)很大的框架,核心功能有很多。除了一些較輕的框架之外,還有g(shù)em和應(yīng)用程序文件等。有太多的自動(dòng)化和搭建,這讓開發(fā)人員沒辦法真正了解Rails框架。
另外一個(gè)缺點(diǎn)是Rails不像Node.js那樣受歡迎。目前,Node.js處于Web開發(fā)的前沿,而用戶對Rails的新鮮感已經(jīng)逐漸消失了。相比于其他語言,更多的公司正在招聘JS開發(fā)人員。如果這是五年前,Rails或Ruby將成為學(xué)習(xí)的三大語言之一,但是現(xiàn)在它已經(jīng)不那么受歡迎了。前面簡單地提到過,核心Rails框架有一些非常好的文檔和示例,允許學(xué)習(xí)簡單的搭建命令和數(shù)據(jù)庫遷移。
Node.js優(yōu)點(diǎn)
* 非常受歡迎
* 高性能
* 異步
* 高擴(kuò)展
* JavaScript前端和后端。
* 靈活的文件結(jié)構(gòu)。
* npm和模塊。
Node.js的一個(gè)優(yōu)勢是它非常受歡迎,基本上是網(wǎng)頁開發(fā)中的最新尖端技術(shù),場需求非常高。Node和Express框架都有非常活躍的開源社區(qū)。在npm上有很多好的模塊,當(dāng)談到速度和性能的時(shí),可以說Node將Rails踢出了舞臺。事實(shí)上,Node幾乎把任何其他都踢出了舞臺。它運(yùn)行在速度如閃電般的Google JavaScript引擎上。 Node用于構(gòu)建幾乎像桌面應(yīng)用程序的實(shí)時(shí)Web應(yīng)用程序。
Node.js也是異步的。這意味著程序向服務(wù)器發(fā)送請求時(shí),不必等待回復(fù),可以繼續(xù)執(zhí)行。Node在單個(gè)線程上運(yùn)行不需要等待請求完成,然后再發(fā)送下一個(gè)。所以Node.js非常具有伸縮性,在單線程中起著很大的作用。Node對像MongoDB這樣的NoSQL數(shù)據(jù)庫也非常高效,比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫更具可擴(kuò)展性。幾乎所有的大公司都轉(zhuǎn)移到了Node.js上,對他們的生產(chǎn)力有了很大的提升。
另一個(gè)重要的因素是Node使用JavaScript,被廣泛用于許多Web棧。很多情況下,前端的語言與后端的語言不同,但是Node.js不存在這種問題。前端和后端都使用JavaScript。
Node.js、Express或Happy.js,這些框架中的任何一個(gè)都具有非常靈活的文件結(jié)構(gòu)。讓你按照自己的想法構(gòu)建想要的應(yīng)用程序。可以將所有內(nèi)容都塞進(jìn)一個(gè)App JS文件中。像Ruby的gem一樣,Node也有它自己的包管理器,稱為npm或Node包管理器。 npm和Ruby gem最大的區(qū)別是依賴關(guān)系的管理方式。使用Ruby,依賴關(guān)系是全局安裝,所以你必須使用捆綁器。Npm實(shí)際上負(fù)責(zé)為模塊提供所有的這些。他們被放入Node模塊文件夾,這些模塊也可以擁有自己的Node模塊文件夾,并具有自己的依賴關(guān)系
Node.js缺點(diǎn)
* 消耗CPU密集型任務(wù)
* 不一致性
* 新技術(shù)
* 回調(diào)
* 太模塊化
Node和許多CRUD風(fēng)格的應(yīng)用程序一樣好,但它絕對會(huì)占用CPU密集型的應(yīng)用程序。因?yàn)樗窃趩尉€程上運(yùn)行,因此只要執(zhí)行某些需要時(shí)間的操作,就會(huì)將所有傳入的東西進(jìn)行請求排隊(duì)。
關(guān)于Node的另一個(gè)缺點(diǎn)是它可能有點(diǎn)不一致。有些人覺得這個(gè)API不斷的改變。有時(shí)不是很向后兼容,不僅如此,Express應(yīng)用程序的結(jié)構(gòu)通常非常自由和靈活,甚至有時(shí)它想讓開發(fā)者掐死自己。
Rails對自身的要求是非常的嚴(yán)格,所以用它想編寫不好的代碼都很困難。由于Node是異步的,所以將會(huì)處理很多的回調(diào)函數(shù)。
這兩個(gè)后端框架都有其優(yōu)點(diǎn)和缺點(diǎn),但在技術(shù)方面它們都是很好的工具。