2010-01-14 202 views
8

最近幾個月我一直在構建一個Ruby on Rails站點,而且我只使用了少量內置的JavaScript函數。不過,我將在未來幾周和幾個月內開展更多的JavaScript開發工作,我正在討論要使用哪種JavaScript框架。jQuery和Prototype之間的當前差異是什麼?

一方面jQuery似乎是比較流行的一個,但是Prototype已經內置到Rails中了。我還從幾年前在線閱讀了大量的文章,談論jQuery如何在某些事情上更簡潔,但是對其他人更爲sl,,並給出了各種其他意見。

所以我的問題是使用了誰的人都(最好是最近)

  • 是什麼在使用兩種原型和jQuery從純JavaScript和從Ruby on Rails的角度看有什麼區別?
  • 它們之間是否存在顯着差異,或者它們在功能和代碼編寫方面是否彼此非常接近?
  • 轉換成本有多高,必須重新考慮,代碼必須重寫?

感謝

回答

13

前面的討論

多,如果不是所有的問題已經被討論。見search或:

從原型切換到JQuery的

我正在從Protoype切換到JQuery,主要是出於性能方面的原因(我看到太多的基準,Prototype總是來自JQuery,MooTools和Dojo。)我會說轉換成本不是可怕的,因爲大多數基本概念(選擇,效果,Ajax)非常相似。但是,原型代碼的每一行都必須仔細重寫 - 尤其要注意,因爲許多輔助函數和構造($$$)看起來非常相似。

如果您的代碼包含許多複雜的鏈式結構,這些結構在Jquery中也可用,但功能不同,遷移可能變成一項非常繁瑣的任務。如果僅將它用於快速$()元素選擇,效果和一點Ajax,則不是那麼重要。

無論哪種方式,準備一個強烈的學習階段。 JQuery構造體積小巧,但對於閱讀恕我直言(閱讀更加神奇 - 與一段本地Javascript相比看起來非常糟糕,但這是一個不同的討論)。如果您來自不同的框架或原生Javascript,那麼熟悉語法和原則肯定需要時間。

+0

+1很好的答案佩卡! – 2010-01-15 09:00:19

3

與原型相比,使用jQuery的方式有很大的不同,一旦您習慣了框架的細微差別,就很容易在它們之間切換。

最初的最大障礙是Prototype立刻將自己吸引到dom中。只要你將它包含到頁面中,你所查找的所有dom元素都會附帶原型功能。使用jQuery,它將單獨保留所有元素,直到您使用jQuery選擇器$('css-class')訪問它。您從該調用中獲得的對象將附帶jQuery方法。

如果你想自己輕鬆進入jQuery的,你可以使用原型放棄一切,包括jQuery和調用jQuery.noConflict();http://docs.jquery.com/Core/jQuery.noConflict。這會將'$'方法返回到原型,並讓您通過調用jQuery('css-class')來使用jQuery。

如果你想完全跳入jQuery,我會推薦使用jRails插件(http://github.com/aaronchi/jrails)。它將取代所有的rails ajax helper,讓他們使用jQuery而不是原型。我在很多項目中都這樣做過,並且從來沒有遇到過任何問題。

最後,你應該看看原型和jQuery,看看哪一個適合你的編碼風格。你可以用兩個框架來完成同樣的事情,這只是一個稍微不同的語法和思維方式。

2

對於小巧,智能的客戶端效果,jQuery更高效。 prototypejs對深度javascript開發更有效。

jQuery有一系列插件可以提供強大的UI效果。 prototypejs擁有Enumerables,Functions,Hashes的完整庫。

+0

是什麼讓你說原型對深度Javascript開發更有效率?圖書館本身更高效?你作爲開發人員更高效? – 2010-01-15 13:57:19

+0

幾乎jQuery中的所有內容都與DOM有關。但prototypejs提供了許多令人難以置信的有用的函數方法(咖喱,包裝...:http://api.prototypejs.org/language/function.html),以及一個帶有美妙API的Enumerable對象(invoke,pluck ...:http ://api.prototypejs.org/language/enumerable.html) – Alsciende 2010-01-15 16:09:16

+0

所以我的意思是「更高效」是「提供高級功能」,因此「使我們更高效」。 – Alsciende 2010-01-15 16:10:41

9

Pekka的回答非常好,但應該補充的一件事是Rails正朝着Javascript框架不可知的方向發展。儘管當Rails首次推出時,它的AJAX集成很有創意,自那時起Javascript的格局發生了巨大變化,Rails集成並沒有真正達到最佳實踐。因此,原型集成不應該被認爲是Rails 2.3今天的主要因素,並且它在Rails 3.0中的一個因素甚至可能會在未來幾個月內發佈。我最近讀了an interesting article,描述了幾年來Rails的Javascript集成的一些最重大的變化。

我目前的項目有數千行原型代碼,但最近我們開始使用jQuery,因爲它的好處太大了,無法傳遞。我的印象:

原型是一個成熟的框架,做了很好的工作夯實瀏覽器的差異,並提供非常全面的功能。不幸的是,它對默認JavaScript環境的改變有些過分,並沒有看到快速的發展,也沒有一個重要的插件生態系統。

jQuery是一個較新的框架,它能夠利用像Prototype這樣的早期javascript框架的一些經驗教訓,來創建更模塊化,不那麼突兀,更強大和簡潔的東西。我仍然喜歡Prototype,但jQuery的DOM操作和插件生態系統太好了,無法忽視。如果我開始一個綠地項目,我不得不與jQuery合作,因爲這似乎是創新發生的地方(至少在這兩個選擇之間)。

相關問題