2010-01-14 101 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合作,因为这似乎是创新发生的地方(至少在这两个选择之间)。

相关问题