【问题标题】:What are the current differences between jQuery and Prototype? [closed]jQuery 和 Prototype 目前的区别是什么? [关闭]
【发布时间】:2011-01-05 01:54:00
【问题描述】:

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

一方面,jQuery 似乎是更流行的一种,但另一方面,Prototype 已经内置在 Rails 中。几年前,我还在网上阅读了一堆文章,谈论 jQuery 如何在某些方面更简洁,而在其他方面则草率,并给出了各种其他意见。

所以我的问题是针对使用过这两种方法的人(最好是最近):

  • 从纯 JavaScript 和从 Ruby on Rails 的角度使用 Prototype 和 jQuery 有什么区别?
  • 它们之间是否存在显着差异,或者它们现在在功能和代码编写方面是否非常接近?
  • 就必须重新学习的内容和必须重写的代码而言,转换成本有多高?

谢谢

【问题讨论】:

    标签: javascript jquery ruby-on-rails prototypejs


    【解决方案1】:

    之前的讨论

    已经讨论了很多,如果不是所有问题的话。请参阅search 或:

    从 Prototype 切换到 JQuery

    我正在从 Protoype 切换到 JQuery,主要是出于性能原因(我已经看到太多基准测试,Prototype 总是排在 JQuery、MooTools 和 Dojo 之后。)我想说切换成本并不可怕,因为大多数基本概念(Selection、Effects、Ajax)都非常相似。然而,原型代码的每一行都必须仔细重写——尤其是因为许多辅助函数和构造($$$)看起来非常相似。

    如果您的代码包含许多复杂的链式结构,这些结构也可能在 Jquery 中可用,但功能不同,则迁移可能会成为一项非常繁琐的任务。如果您仅将它用于快速 $() 元素选择、效果和一点 Ajax,那么就没有那么多了。

    无论哪种方式,都要为紧张学习阶段做好准备。 JQuery 构造小而智能,但恕我直言,阅读起来很糟糕(与原生 Javascript 块相比看起来很糟糕,但这是一个不同的讨论)。如果您来自不同的框架或原生 Javascript,那么熟悉语法和原则肯定需要时间。

    【讨论】:

      【解决方案2】:

      Pekka 的回答很好,但应该补充的一点是,Rails 正朝着与 Javascript 框架无关的方向发展。尽管 Rails 刚问世时,它的 AJAX 集成是创新的,但此后 Javascript 环境发生了巨大变化,Rails 集成不再符合最佳实践。因此,Prototype 集成现在不应被视为 Rails 2.3 的主要因素,而在可能会在未来几个月内发布的 Rails 3.0 中它甚至更不是一个因素。我最近阅读了an interesting article,描述了多年来 Rails 的 Javascript 集成的一些最重要的变化。

      我当前的项目有数千行遗留原型代码,但我们最近开始使用 jQuery,因为它的好处实在是太大了,不容错过。我的印象:

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

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

      【讨论】:

        【解决方案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 助手并让他们使用 jQuery 而不是原型。我在许多项目中都这样做过,从来没有遇到过任何问题。

        最后你应该看看原型和jQuery,看看哪一个适合你的编码风格。您可以使用这两个框架完成相同的事情,只是语法和思维方式略有不同。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 是什么让你说原型对深度 Javascript 开发更有效?图书馆本身效率更高?作为开发人员,您的效率更高?
          • jQuery 中几乎所有内容都与 DOM 相关。但是prototypejs 提供了许多非常有用的Function 方法(curry、wrap...:api.prototypejs.org/language/function.html),以及一个具有出色API 的Enumerable 对象(invoke、pluck...:api.prototypejs.org/language/enumerable.html)
          • 所以我所说的“更高效”是“提供高级功能”,因此“让我们更高效”。
          • 好吧,这就是我想你的意思,只是想确定一下:)。关于更高级的功能,Underscore.js (documentcloud.github.com/underscore) 有很多你提到的内容,并且与 jQuery 很好地结合在一起。我相信还有一个用于 jQuery 的 Enumerable 插件,尽管我从来没有真正感觉到需要所有这些。
          • Underscore.js 看起来很棒。我猜想用这个库从 Ruby on Rails 开发 jQuery 不会那么奇怪。
          猜你喜欢
          • 2020-12-28
          • 2013-03-05
          • 2019-11-29
          • 1970-01-01
          • 1970-01-01
          • 2011-03-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多