jQuery和Prototype目前有什么区别?

最近几个月我一直在构建Ruby on Rails站点,我只使用了少量的内置JavaScript函数。 但是,我将在未来几周和几个月内进行更多的JavaScript开发,并且我正在讨论要使用哪个JavaScript框架。

一方面,jQuery似乎更受欢迎,但是再次将Prototype内置到Rails中。 几年前我还在网上阅读了一些文章,讨论jQuery在某些方面是如何更简洁,但在其他方面却很邋and,并提出了各种其他意见。

所以我的问题是那些使用过两者的人(最近最近)

  • 从纯JavaScript和Ruby on Rails角度使用Prototype和jQuery有什么区别?
  • 它们之间是否存在显着差异,或者它们在function和代码编写方面现在彼此非常接近?
  • 在必须重新制作的事物和必须重写的代码方面,转换成本有多高?

谢谢

以前的讨论

很多,如果不是你的所有问题都已经讨论过了。 查看搜索或:

  • 您将如何将站点从Prototype切换到jQuery
  • 原型,dojo还是jQuery?
  • 为什么每个人都喜欢jQuery而不是prototype / script.aclo.us或mootools或者其他什么?
  • Jquery + Rails是否有问题?
  • 在Rails中使用jquery

从Prototype切换到JQuery

我正在从Protoype转换到JQuery,主要是出于性能原因(我看到过很多基准测试,Prototype总是排在JQuery,MooTools和Dojo之后。)我会说切换成本并不可怕,因为大多数基本概念(Selection,Effects,Ajax)非常相似。 但是,每一行Prototype代码都必须仔细重写 – 特别是因为许多辅助函数和结构( $ $$ )看起来很相似。

如果您的代码包含许多可能在Jquery中可用的复杂链式构造,但function不同,迁移可能会变得非常麻烦。 如果你只使用它来快速$()元素选择,效果和一些Ajax,而不是。

无论哪种方式,都要为激烈学习的阶段做好准备。 JQuery构造虽然小而且聪明,但是阅读IMHO很糟糕(与原生Javascript块相比看起来很糟糕,但这是一个不同的讨论)。 如果您来自不同的框架或本机Javascript,那么熟悉语法和原则肯定需要时间。

Pekka的答案很棒,但有一点需要补充的是,Rails正朝着Javascript框架无关的方向发展。 虽然当Rails第一次出现时,其AJAX集成是创新的,Javascript格局自那时起发生了巨大的变化,而Rails集成并不能真正实现最佳实践。 因此,原型集成不应该被认为是Rails 2.3今天的主要因素,并且它将在不太可能在未来几个月内发布的Rails 3.0中成为一个因素。 我最近阅读了一篇有趣的文章,描述了多年来Rails的Javascript集成的一些最重要的变化。

我目前的项目有数千行遗留原型代码,但我们最近开始使用jQuery,因为它的好处太大了,无法理解。 我的印象:

Prototype是一个成熟的框架,可以很好地支持浏览器差异并提供非常全面的function。 不幸的是,它对默认Javascript环境的改变有点笨拙,而且它没有看到快速开发并且没有重要的插件生态系统。

jQuery是一个更新的框架,能够利用像Prototype这样的早期JavaScript框架的一些课程来创建更模块化,更少突兀,更强大和简洁的东西。 我仍然喜欢Prototype,但jQuery的DOM操作和插件生态系统太好了,不能再忽视了。 如果我开始一个绿地项目,我必须使用jQuery,因为这似乎是创新发生的地方(至少在这两个选择之间)。

与原型相比,使用jQuery的方式有很大的不同,一旦你习惯了框架的细微差别,就可以很容易地在它们之间切换。

一开始最大的障碍是Prototype立即将自己挂入dom。 只要将其包含在页面中,您查找的所有dom元素都将附加原型function。 使用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,看看哪个适合你的编码风格。 你可以用两个框架完成相同的事情,它只是略有不同的语法和思维方式。

jQuery对小型智能客户端效果更有效。 prototypejs对于深度javascript开发更有效。

jQuery有很多用于强大UI效果的插件。 prototypejs有一个完整的Enumerables,Functions,Hashes库。