原型VS jQuery – 优点和缺点?

我不想打开另一个“ 另一个Js VS Js ”的线程。

我想,最终Prototype和jQuery都是JS,并且具有几乎相同的方法和function,并且对于相同的任务需要几乎相同的代码行。

对于一个真正的富互联网应用程序真正的优势是什么,Prototype和jQuery的弱点是什么?

我最初喜欢Prototype用新的或修改过的方法扩展元素的想法。

但是,我发现了很多原因,这是一件坏事(TM)

做一些Googlesearch,你可能会发现一些其他的原因,但主要原因是Prototype不能保证与其他框架或库“玩得很好”,因为其他库期望元素和方法的行为是“标准的”而且由于Prototype所做的事情,你可能会发现一些被破坏的东西。

我发现最近的例子是原型与JSON和stringify拧。 我正在使用EasyXDM,并且在加载prototype.js库的某些情况下,它根本无法使用。 由于我正在编写一个框架供别人使用 ,因此不能控制页面的内容,所以我需要在IFRAME中创build和执行所有的操作,以确保诸如prototype.js之类的东西不会对我正在尝试做什么。

…所以jQuery为我赢得了支持,因为我只是不认为它的框架自动拧与DOM和JavaScript的标准行为的权利。 你应该控制这些东西,Prototype把你的一些控制权从你身上拿走。

我也在原型上使用jQuery,只要看看这个页面的顶部为什么:

jquery标签的问题 : 531,752
原型标记问题 : 2,465
更新9/22/2014,在12/14/2011 jQuery – 135,641 /原型 – 2,327

jQuery非常简洁,简洁的代码。 原型我发现更加冗长,虽然在许多function方面常常相当。 但是,如果您需要帮助入门,则需要较大的社区。 更多的支持,更多相同的问题,你已经在那里回答,易于谷歌,更多的插件,代码你可能正在寻找做…已经写好了。

出于同样的原因,社区越大,代码越多,代码越复杂 ,就意味着简单的东西已经写好了,许多复杂的情况也解决了,如果你正在编写一个非常丰富的应用程序,遇到一些相当复杂的问题或情况…有更多的资源来帮助你处理这个问题。

再一次…由于同样的社区规模的原因,在框架中发现了更多的缺陷,填补了空白,因为一个更大的社区正在仔细审查。 这意味着当你遇到问题的时候,别人也可能会这样做,并且增加了一些方法或者选项来保持你的动作,而不是因为你碰到了框架不能做的事情而被阻塞。

我目前正在从一个应用程序重写大块,从原型转移到jQuery。 为什么? 插件,插件,插件,特别是UI小部件。 原型用户界面元素是相当零散和非常零碎,而jQuery有一个非常丰富的“标准”元素集 。

JQuery的build立是为了给页面添加奇特效果。 它已经取得了100%的成功。

由于添加animation和偶尔的ajax调用是人们通常需要从JavaScript库中需要的,所以JQuery有一个很大的社区。 JQuery的座右铭是“我会添加一些闪闪发光的东西”,这正是我们开发人员经常需要的。

尽pipe如此,Prototype在大多数其他使用情况下仍然胜出。 它具有稳定的基于类的OOP框架(统一解决inheritance构造函数的问题),以及一套处理数据的通用抽象方法。

我select了原型的jQuery,因为:

  • “多做,less写…”
  • jQuery社区更大(因此,更多的插件和资源)

我已经使用和喜欢两个。 这真的取决于你的项目的要求。 对我来说,由于2个不同的要求,这两个平台似乎来自两个不同的方向。 他们都是出于解决编程问题的需要,帮助更快,更好地构build网站/应用程序。

当快速制作网站时,使用标准的技巧工具箱,jquery和它的库很棒。 没有意义重新发明轮子。 但是,当我的工具/技巧不起作用时,我遇到了奇怪的浏览器版本问题,并且总是碰巧是具有该特定版本的客户端。 通常在浏览器版本发布/更新时发生。 所以,我必须去获取新版本的jQuery库文件来更新我的所有网站,也就是说,如果社区已经注意到并解决了这个问题。 这是我唯一的烦恼,因为我没有时间自己弄清楚。 这不是经常发生,但确实发生。

在处理更复杂的Web项目时,可能是由后端API支持的网站,我发现原型很棒。 我充分利用了服务器端的OO编码,并且非常高兴我能用Prototype做同样的事情。 我觉得我对应用程序有更多的“控制权”,并且可以像作者一样快速地解决问题。 我确实听到了人们对开销,DOM扩展等方面的意见,但我没有遇到任何专业问题(敲木头)。 另外,如果我可以用.each(function(){},…)轻松地迭代同一个variables,并且有一点控制权,那么没有“for each”语句的整个问题就不是什么大问题。

所以,每个人都有自己的位置,你必须select自己的药物。

喜欢,

也不是“最好的”。 这完全取决于 试试他们两个,看看你更喜欢哪一个。 我个人使用的JQuery由于易于使用的原型,这是相当先进的,有更长的学习曲线。

看一下:

原型与JQuery(在Ajaxian)

这是关于jQuery和MooTools的另一个有趣的文章(MooTools和Prototype大多可以互换,至less在本次辩论的范围内): http : //jqueryvsmootools.com/

jQuery使用基于CSS语法的CSS样式select器和filter。 从devise的angular度来看,这有很多好处。 我非常喜欢和精通CSS,所以jQuery对我个人感觉就像在家里一样。 如果你正在寻找一种语法,那么你的全面的编码体验更加愉快,而且你是CSS的忠实粉丝,可以肯定的说你会更喜欢jQuery 。 我在Prototype中学习了一门基础课程,很无聊。 我刚刚完成了Lynda的 “The Essentials of jQuery” ,我非常喜欢它,因为它与CSS有着密切的关系。 我已经在香草JavaScript编程了大约10年,我一直发现它是非常干燥的; 对我来说这是代码矫枉过正 (对于降压没有太大的影响)。 虽然这些年来对我来说非常有用。 从目前为止我所看到的, jQuery是从一开始就应该使用的JavaScript。 但是,再次,花费很多时间,testing和努力来改善事情。 所以jQuery为我赢了。

我还没有jQuery或Prototype的经验。 要开始学习其中之一,将其作为高级ColdFusion开发人员和项目经理添加到我的工具箱中。 我认为这最初是哪一个新来者将决定,因为这反映了行业的收购,恕我直言,这是关键。

基于两者的快速浏览和一些教程阅读,似乎他们都提供相同的核心能力。 然而,看看工作板和其他项目,jQuery似乎是在更多的“需求”,而不仅仅是一个技能,可以使用。 对我来说,jQuery在这里通过采用和需求赢得,社区支持和文档是一个加号。 没有什么反对Prototype,因为有些开发者把它看作是第一个看到的东西,所以很高兴知道项目是否需要它。

我已经使用原型框架和jQuery,而对于我来说,我个人喜欢它的noConflict()的jquery cuz; 我更喜欢在我的js文件中使用jq noConflict

 (function($){ }(jQuery)); 

这种方式将使您使用$为每个js文件的jqueryselect器

订阅已经签名的标记正确的答案,我也不想分享一个lib,允许你使用大部分的工具,你期望在像原型这样的框架上find,但是不能扩展本地对象。 因此,它为您提供更多的控制和灵活性,而不是您希望在项目中使用的补充框架。

Underscore是一个JavaScript实用工具库,它提供了Prototype.js(或Ruby)所期望的许多function性编程支持,但是不扩展任何内置的JavaScript对象。 这跟jQuery的tux和Backbone.js的吊带一起。

我是否也可以提出这样一个观点:使用这个或那个是一个虚假的困境? 在jQuery方面有很多的经验,我知道它有多大的好处以及应用程序开发能够变得多快。

然而,重要的是要注意,在某些情况下,最终用户可能更有利于不使用库,特别是在不需要的情况下。 虽然这对于大型应用程序确实有帮助,但是由于对性能的影响,在通用网站上使用它可能是违反直觉的。

一个额外的HTTP请求是为了下载这个库而做出的,虽然通常在缩小的时候通常很小,但是需要更多的带宽。 这可能会减慢移动用户可能实现的页面加载时间。

另外,在加载时,库会立即执行代码来创build全局可访问的函数和对象,从而即使从不使用它们,也会消耗更多的内存 有些库还会将函数和对象添加到内置的对象原型中,这也增加了内存使用量。

最后,虽然jQuery和许多其他库经常被广泛testing以确保对性能的影响最小,但是您编写的代码尽pipe数量减less,但通常会比其他代码慢。 请记住,你可以用一个图书馆做的一切,你可以用原始的JavaScript,因为从根本上他们是一样的。

使用缩写式操作符的简洁代码往往也是神秘的,所以它不一定更好。 它可以消除可读性,并理解不清楚的情况。 在我多年的编程中,我遇到了一些非常聪明的秘密代码,当它有问题的时候,我们就可以搞清楚这些代码了。 我个人喜欢代码,自己的文件,并针对具体情况进行了优化。 如果你的目标是最less的代码行,那么使用DOM扩展库,如原型和jQuery可能适合你。 我个人认为最好是充分理解JavaScript语言本身的function和浏览器的DOM实现,并将其用于手头的任务,无论是构buildUI小部件还是其他任何东西。 我偶尔使用script.aculo.us库来获得animation效果,所以我发现自己加载了原型库代码,因为scriptaculous取决于它。 我对任何一个使用这些库的人的build议都是要学习如何在完全依赖这些库之前编写OO风格的JavaScript,然后合并最符合你需要的那个。 学习OO风格JavaScript的优秀书籍是“Javadevise模式”。