自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Node.js vs Ruby on Rails:哪個(gè)最適合Web開發(fā)?

開發(fā) 前端 后端
大家好,在本文中,我們將比較Node.js和Ruby on Rails在Web開發(fā)上孰優(yōu)孰劣。我寫這篇文章的主要原因是我們的團(tuán)隊(duì)不斷被問及哪種語言或哪個(gè)框架最適合學(xué)習(xí)。無論如何,我們從不給出一個(gè)簡(jiǎn)單的答案,因?yàn)榫蜎]有一個(gè)明確的答案。

大家好,在本文中,我們將比較Node.js和Ruby on Rails在Web開發(fā)上孰優(yōu)孰劣。我寫這篇文章的主要原因是我們的團(tuán)隊(duì)不斷被問及哪種語言或哪個(gè)框架最適合學(xué)習(xí)。無論如何,我們從不給出一個(gè)簡(jiǎn)單的答案,因?yàn)榫蜎]有一個(gè)明確的答案。

我認(rèn)為***是依據(jù)事實(shí)和統(tǒng)計(jì)數(shù)據(jù)說話。我們將了解Node.js和Ruby on Rails在服務(wù)器端技術(shù)方面的一些優(yōu)缺點(diǎn)。

[[211622]]

在開始之前,我想先說說我的一些看法。有批評(píng)者可能會(huì)質(zhì)疑我們?nèi)绾螌⒆鳛檫\(yùn)行時(shí)的Node.js與作為框架的Ruby on Rails進(jìn)行比較?我接受這樣的質(zhì)疑,但我要比較的是兩個(gè)服務(wù)器端技術(shù)和Web棧。我們要弄清楚現(xiàn)在學(xué)什么更好,以及對(duì)于業(yè)務(wù)哪個(gè)更佳。我的意思并不是說直接比較Ruby on Rails和Node.js的功能,如果你覺得用Express或者其他基于Node的框架代替Node.js會(huì)更好的話。無論如何,我們比較的是后端結(jié)構(gòu)和堆棧,而不是個(gè)別技術(shù)。

我們的團(tuán)隊(duì)已經(jīng)使用過這兩種技術(shù),并且我們中的一些人對(duì)這兩種技術(shù)都很喜歡。我不是在厚此薄彼。重要的是要知道適合我們的可能并不適合你,反之亦然。另外,你應(yīng)該記住,每個(gè)人的大腦都是不同的。所以,孰勝孰劣并不定論。

首先讓我們來看看這兩種技術(shù)之間的一些相似之處。

  • 受歡迎的服務(wù)器端技術(shù)。
  • 相當(dāng)容易學(xué)習(xí)。
  • 高性能。
  • 為***網(wǎng)站/應(yīng)用程序使用。
  • 強(qiáng)大的社區(qū)。
  • 基于類似MVC的結(jié)構(gòu)。
  • 快速開發(fā)。

Node.js和Rails都是備受推崇和流行的服務(wù)器端技術(shù),可以做很多不同的事。它們可以與許多不同的堆棧和數(shù)據(jù)庫(kù)等等協(xié)同工作。兩者都相當(dāng)容易學(xué)習(xí)。Node使用JavaScript,而Rails使用Ruby。但是Ruby和JavaScript比Java,C#或其他一些高級(jí)語言更容易學(xué)習(xí)。它們都是相當(dāng)寬容的語言,有大量的資源可供學(xué)習(xí)。Node.js和Ruby on Rails執(zhí)行優(yōu)良,因此我們將討論性能水平。有很多流行網(wǎng)站使用這兩種技術(shù)。Node和Rails擁有非常強(qiáng)大和堅(jiān)持自我的社區(qū)。

Rails存在的時(shí)間更久一點(diǎn),有更多老前輩。但是Node日漸變得越來越流行?,F(xiàn)在MVC,即Model-View-Controller成為了一種設(shè)計(jì)模式。而Ruby on Rails有很強(qiáng)的MVC。針對(duì)模型、控制器和視圖有一個(gè)文件夾。通過Node中的某些框架,例如Express,可以實(shí)現(xiàn)MVC。不過,Express比Rails更靈活。你可以只采納MVC的某些方面。這不是唯一可能的結(jié)構(gòu)。Node和Rails用于快速開發(fā)和原型。Rails有一個(gè)很棒的折疊功能,當(dāng)然Express也有生成器和命令行工具。

Rails的優(yōu)點(diǎn)

  • 一致的結(jié)構(gòu)。
  • 非常堅(jiān)持自我。
  • 數(shù)據(jù)庫(kù)遷移。
  • 開發(fā)速度。
  • Ruby是一門偉大的語言。
  • Ruby gems。
  • 成熟和受尊重的社區(qū)。

首先,讓我們來看看Ruby on Rails的優(yōu)點(diǎn),然后再看缺點(diǎn)。正如我所說,Rails有一個(gè)非常強(qiáng)大的MVC結(jié)構(gòu)。大多數(shù)Rails應(yīng)用程序在核心文件和文件夾方面看起來非常相似。有了這個(gè)堅(jiān)實(shí)的基礎(chǔ)之后,然后在gems和自定義的包和庫(kù)之上構(gòu)建。另外,Rails非常堅(jiān)持自我,這就意味著它允許你堅(jiān)持自己的做事方式。Rails假設(shè)你將要以某種方式編寫代碼,有些人可能會(huì)說這稍微有點(diǎn)限制。但是它也使代碼變得更簡(jiǎn)單,更簡(jiǎn)潔,而且也使得更不容易創(chuàng)建錯(cuò)誤和出現(xiàn)問題。從某種意義上說,你不能制造你想要的東西,但卻是助你到達(dá)目的地的途徑。如果你以正確的方式去做,那很可能就是最簡(jiǎn)單的方法。

Rails也有非常好的數(shù)據(jù)庫(kù)遷移功能。它們?cè)试S我們?cè)跀?shù)據(jù)庫(kù)中創(chuàng)建和編輯表格與列,而無需手動(dòng)進(jìn)入去添加或更改內(nèi)容。它也會(huì)給你一個(gè)很好的小日志或路徑,允許你查看對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)究竟做了什么。

現(xiàn)在再說Node。有一些用于遷移的軟件包或模塊,比如DB-migrate就可以很好地工作,但不像Rails chord migration system那樣深入和易于使用。在原型設(shè)計(jì)和快速開發(fā)方面,沒有太多技術(shù)可以打敗Rails。所以,通過一些基本配置和一些scaffolding命令,你可以擁有一個(gè)完整的CRUD應(yīng)用程序。數(shù)據(jù)庫(kù)遷移被添加到這個(gè)速度。如果你使用第三方工具和模塊的話,Node.js和Express在快速開發(fā)方面相當(dāng)不錯(cuò)。但Rails擁有的所有這些東西都是開箱即用的。

Ruby語言有優(yōu)點(diǎn)也有缺點(diǎn),但在大多數(shù)情況下,它是很受尊敬的,而且非常干凈。 Ruby是一個(gè)多范式語言,你可以做到程序代碼功能化,但大部分是面向?qū)ο蟮?。一切都可以看作是一個(gè)對(duì)象。RubyGems是Ruby on Rails的包管理器,它用于擴(kuò)展框架的核心功能。這與Node.js的npm相似。所有Rails應(yīng)用程序都有一個(gè)gem文件,你可以在其中指定你的gems。然后運(yùn)行bundler命令來安裝它們,類似于使用Node.js的npm install。

關(guān)于Ruby on Rails的另一個(gè)好處是,它已經(jīng)存在了一段時(shí)間,因此擁有一個(gè)非常受人尊重的智能社區(qū)。維護(hù)Ruby on Rails的開發(fā)人員非常聰明,并且非常熱愛框架。核心框架上有大量資源,包括論壇,博客文章和文檔,以幫助你解決問題。這些都是Ruby on Rails的巨大優(yōu)勢(shì)。

Rails的缺點(diǎn)

  • 性能
  • 太簡(jiǎn)單
  • 聲望
  • 缺乏文檔

我們來談?wù)凴ails的一些缺點(diǎn)。我們知道的關(guān)于Ruby on Rails的***抱怨是它相對(duì)較慢。Rails是一個(gè)很大的框架,有很多很多功能。除了一些較輕便的框架之外,還有g(shù)em和應(yīng)用程序文件依賴的因素。有太多的自動(dòng)化和scaffolding,以致于開發(fā)人員并沒有真正學(xué)習(xí)很多關(guān)于Rails框架如何工作的內(nèi)容。你可能了解Ruby語言,了解應(yīng)用程序的語法或結(jié)構(gòu),但對(duì)于真正了解Rails如何工作的人來說,自動(dòng)化和scaffolding是非常棒的,因?yàn)橛兄诳焖匍_發(fā)。另一方面,一些開發(fā)者的確需要做更多的努力才能真正理解某些事情。Rails對(duì)于大型項(xiàng)目,也比小型應(yīng)用程序更困難。它也有一些縮放問題。

所以另外一個(gè)缺點(diǎn)是Rails不像Node.js那樣受歡迎。此時(shí),Node.js處于Web開發(fā)的前沿,而且Rails令人興奮的時(shí)代已經(jīng)逝去。我們認(rèn)為,如果你正在找工作,那么我們言之鑿鑿地建議學(xué)習(xí)Node,以及可能的話還有Express。比起其他語言,有更多的公司正在招聘JS開發(fā)人員。如果是在五年前,那么Rails或Ruby必將是值得學(xué)習(xí)的前三大語言之一。但是現(xiàn)在它沒有那么受歡迎了。所以我在前面簡(jiǎn)單地提到,核心Rails框架有一些非常好的文檔和示例,可以讓你學(xué)習(xí)簡(jiǎn)單的scaffolding命令和數(shù)據(jù)庫(kù)遷移。這一切都很好。然而,當(dāng)你試圖學(xué)習(xí)更高級(jí)的編程,并且試圖了解特定的gems時(shí),有時(shí)候感覺就像大海撈針一樣。

一些名氣相當(dāng)大的平臺(tái)曾經(jīng)使用過或正在使用Ruby on Rails。Twitter就是其中一個(gè)巨頭。另外,由于一些擴(kuò)展問題,他們已經(jīng)把很多后端服務(wù)移到了Scala和Java上。但是由于他們使用過Rails很長(zhǎng)一段時(shí)間,所以我非常確定他們?nèi)匀辉谄脚_(tái)的其他方面使用它,比如與Shopify的合作。此外,作為項(xiàng)目管理解決方案的Basecamp表示,Rails是他們項(xiàng)目的核心和靈魂。運(yùn)行GitHub的軟件是建立在Rails上的。Soundcloud和Hulu,流行的流媒體服務(wù),都是建立在Rails上的。從一開始,Groupon和LivingSocial,SlideShare和Urban Dictionary就在他們的開發(fā)中使用Rails。

Node.js的優(yōu)點(diǎn)

  • 非常受歡迎。
  • 高性能。
  • 異步。
  • 非??蓴U(kuò)展。
  • JavaScript前端和后端。
  • 靈活的文件結(jié)構(gòu)。
  • npm和模塊。

看了Rails之后,現(xiàn)在讓我們開始看看Node.js。我們將從它的優(yōu)點(diǎn)開始。Node.js的一個(gè)巨大的優(yōu)勢(shì)是它非常受歡迎。它基本上是web開發(fā)中的***的***技術(shù)。市場(chǎng)需求非常大。極其受創(chuàng)業(yè)公司的歡迎。圍繞Node和Express框架有一個(gè)繁榮的開源社區(qū)。在npm基礎(chǔ)上有很多開發(fā)良好的模塊,并且當(dāng)談到速度和性能的時(shí)候,Node對(duì)上Rails有著絕對(duì)的優(yōu)勢(shì)。事實(shí)上,Node幾乎所向披靡。它運(yùn)行在速度如閃電般的Google JavaScript引擎上。Node用于構(gòu)建幾乎感覺像桌面應(yīng)用程序一樣的實(shí)時(shí)Web應(yīng)用程序。

接下來,Node.js也是異步的。這意味著程序向服務(wù)器發(fā)送請(qǐng)求時(shí),不必等待回復(fù)。它可以繼續(xù)執(zhí)行。Node運(yùn)行在單個(gè)線程上,而不像其他語言一樣發(fā)送請(qǐng)求。這些語言需要等待,直到請(qǐng)求完成,然后發(fā)送下一個(gè),再等待。所以Node.js也是非??蓴U(kuò)展的,在單線程中發(fā)揮了很大的作用。Node也可以和像MongoDB這樣的NoSQL數(shù)據(jù)庫(kù)一起工作,它比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)如MySQL更具可擴(kuò)展性。幾乎所有我了解的大公司都轉(zhuǎn)移到了Node.js上,他們報(bào)告說生產(chǎn)力有了很大提高。

Node的另一個(gè)很棒的優(yōu)勢(shì)是它使用JavaScript,而JavaScript被廣泛用于許多Web棧。很多時(shí)候,前端的語言與后端的語言是不一樣的,但是在使用Node.js的時(shí)候并不是這樣。我們?cè)谇岸撕秃蠖硕伎梢允褂肑avaScript。有很多主導(dǎo)業(yè)界的客戶端框架——React,Angular,Vue.js。所以這對(duì)Node.js來說是一個(gè)巨大的優(yōu)勢(shì)。顯然,JavaScript也和非常受歡迎的JSON API也可以協(xié)同工作。

Node.js,Express或Happy.js,這些框架中的任何一個(gè)都具有非常靈活的文件結(jié)構(gòu)。它們能讓你構(gòu)建你想要的應(yīng)用程序。你可以將所有內(nèi)容都塞進(jìn)應(yīng)用程序的單個(gè)JS文件。如果你想有更多傳統(tǒng)的MVC結(jié)構(gòu),那就有利有弊了。但是大多數(shù)情況下,如果你知道你在做什么,而且你是一個(gè)好的程序員,那么靈活性是一件好事。和Ruby gems一樣,Node也有它自己的包管理器,稱為npm或Node包管理器。npm和Ruby gem***的區(qū)別就是依賴關(guān)系的管理方式。使用Ruby,依賴關(guān)系是全局安裝的。所以你必須使用捆綁器,并且必須自己管理它們。 npm實(shí)際上負(fù)責(zé)你的所有模塊。它們被放入Node模塊文件夾。這些模塊也可以擁有自己的Node模塊文件夾,并具有自己的依賴關(guān)系。npm模塊似乎也有更好的文檔,至少以我的經(jīng)驗(yàn)來看是這樣的。

Node.js的缺點(diǎn)

  • 糟透了的CPU密集型任務(wù)。
  • 不一致性。
  • 較新的技術(shù)。
  • 回調(diào)地獄。
  • 太模塊化。

好的,既然我們了解了Node.js的優(yōu)勢(shì)之后,讓我們來看看它的一些缺點(diǎn)。對(duì)于許多CRUD類應(yīng)用程序來說,Node是很好,但對(duì)于CPU密集型應(yīng)用程序來說,這絕對(duì)是一件非常糟糕的事情。原因是,只要執(zhí)行某些操作一些時(shí)間(例如CPU操作),它就會(huì)將所有傳入的請(qǐng)求排隊(duì),因?yàn)樗趩蝹€(gè)線程上運(yùn)行。像Apache這樣有更多可用線程的,將會(huì)在它們之間分配CPU時(shí)間。只有IO操作是并行的,因?yàn)樗鼈兪钱惒綀?zhí)行的。CPU密集型任務(wù)的例子為3D渲染,視頻編碼,科學(xué)建模等等。

關(guān)于Node的另一個(gè)抱怨是它可能有點(diǎn)不一致。有些人覺得API保持經(jīng)常的改變。它有時(shí)不是很向后兼容。不僅如此,而且Express應(yīng)用程序的結(jié)構(gòu)通常非常自由和靈活。因此,有時(shí)它反而會(huì)使得開發(fā)者作繭自縛。

Rails是非常嚴(yán)格的,所以編寫壞代碼更困難。由于Node是異步的,所以你將會(huì)處理很多回調(diào)函數(shù),它們經(jīng)常會(huì)蜂擁而至并進(jìn)入所謂的回調(diào)地獄(callback hell)。對(duì)此的解決方案有異步工具和使用promises。你也可以做一些事情來預(yù)防。我覺得就我個(gè)人而言這不是問題,但我知道一些不習(xí)慣異步編程的開發(fā)人員對(duì)回調(diào)真的很頭疼。

正如你可以看到這兩個(gè)后端選擇都有其優(yōu)點(diǎn)和缺點(diǎn),但它們都是很棒的技術(shù)。我們應(yīng)該根據(jù)具體情況具體對(duì)待,而不是絕對(duì)地說這個(gè)比另一個(gè)更好。

責(zé)任編輯:未麗燕 來源: 碼農(nóng)網(wǎng)
相關(guān)推薦

2024-03-19 08:36:19

2017-01-15 11:14:47

超融合數(shù)據(jù)中心IT基礎(chǔ)設(shè)施

2023-10-08 13:42:00

Python Web框架

2012-05-30 09:12:46

NodeJSRubyRails

2017-03-09 13:30:13

Linux游戲AMD

2012-03-07 14:32:41

Node.js

2015-12-11 13:36:17

WebAPPNodeJS

2016-04-18 09:33:52

nodejswebapp

2022-12-26 14:51:48

人工智能

2023-03-07 14:31:44

Node.jsPython應(yīng)用程序

2019-09-01 19:19:04

TensorFlowPyTorch深度學(xué)習(xí)

2020-03-17 15:55:12

Redis數(shù)據(jù)庫(kù)命令

2022-08-24 08:00:00

Node.isJavaScriptDeno

2023-01-13 10:46:42

2022-07-11 10:17:19

Swift編程語言項(xiàng)目

2012-05-16 11:53:39

虛擬化

2015-03-10 10:59:18

Node.js開發(fā)指南基礎(chǔ)介紹

2015-07-16 09:59:55

PHP Node.js討論

2013-12-13 15:21:44

Html5企業(yè)移動(dòng)開發(fā)框架

2022-08-12 08:00:00

編碼語言開發(fā)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)