原型 VS jQuery - 优势和劣势?

64

我不想再开一个"又一个Js VS Js"的讨论帖。

我猜,Prototype和jQuery最终都是JS,并且几乎具有相同的方法和函数,执行相同任务需要几乎相同的代码行数。

对于一个真正的富互联网应用程序,在Prototype和jQuery之间,哪些是真正的优势,哪些是弱点?


4
我们已经有几个关于这个问题的重复了(请参见此搜索)。而这个特定的问题则非常主观和争议性。该如何投票? 注:原文中的"duplicates"指的是相同或类似的问题,"subjective and argumentative"意为主观和争论性强。 - Jørn Schou-Rode
2
当期望别人花时间回答你的问题时,基本的拼写和语法检查可以帮助你走得更远。 - Yarin
2
@Yarin:一旦您达到足够的声望来编辑他人的帖子,请随意编辑语法错误并检查所有拼写!谢谢... ;) - Luca Filosofi
可能是Is there any reason to prefer Prototype to JQuery?的重复问题。 - Nate
14个回答

1

我曾使用过原型框架和jQuery,就我个人而言,我更喜欢jQuery,因为它有noConflict()方法; 在我的JS文件中,我更倾向于这样使用jq noConflict。

(function($){

}(jQuery));

这种方式将使您在JS文件中使用$作为jQuery选择器


我两个都安装了,所以最好两全其美 - 原型使用 $ 和 $$,而jQuery使用noConflict :D - HenchHacker

1

订阅已经标记为正确答案的问题后,我还想分享一个库,它允许您使用大多数实用程序,这些实用程序通常可以在像原型这样的框架中找到,但具有不扩展本机对象的优势。因此,它为您提供了更多控制和灵活性,以便您可以在项目中使用其他补充框架。

Underscore是JavaScript的实用程序库,提供了很多函数式编程支持,这是您在Prototype.js(或Ruby)中所期望的,但没有扩展任何内置的JavaScript对象。它是与jQuery的礼服和Backbone.js的吊带一起使用的绑定工具。


很遗憾没有效果或ajax - 这就是为什么其他框架被用来代替的原因。 - HenchHacker

1

我能否提出这样的论点,使用其中之一是一个虚假的二元选择?通过大量使用jQuery,我知道它可以带来多大的好处,以及应用程序开发可以变得更快。

然而,需要注意的是,在某些情况下,对于最终用户来说,不使用任何库可能会更有益,特别是在不需要时。虽然对于大型应用程序来说肯定很有帮助,但在普通网站上使用可能会适得其反,因为会影响性能。

下载库会产生额外的HTTP请求,尽管通常在缩小后很小,但需要更多的带宽。这可能会导致页面加载时间变慢,移动用户可能会感受到。

此外,在加载时,库将立即执行代码以创建全局可访问的函数和对象,从而消耗更多内存,即使您从未使用过它们。一些库还会向内置对象原型添加函数和对象,这也会增加内存使用率。

最后,虽然jQuery和许多其他库经常经过广泛测试以确保对性能的影响最小,但您编写的代码尽管数量减少,但通常会比其他情况下慢。请记住,您可以使用原始JavaScript完成库所能做的一切,因为从根本上说它们是相同的。

-1
简洁的代码使用缩写风格的操作符往往也倾向于变得深奥晦涩,因此并不一定更好。它可能会减少可读性,并使理解正在发生的事情变得不太清晰。在我多年的编程经验中,我遇到过一些非常聪明但晦涩难懂的加密代码,当它出现问题时,就成了麻烦的来源。个人而言,我喜欢自我记录的代码,并针对特定情况进行优化。如果您的目标是在最少的代码行数中完成最多的任务,则可以使用DOM扩展库,如prototype和jQuery。我个人认为最好充分了解JavaScript语言本身的功能和浏览器的DOM实现,并利用它来完成手头的任务,无论是构建UI小部件还是其他任务。我偶尔会使用script.aculo.us库来制作动画效果,因此我会加载prototype库代码,因为scriptaculous依赖于它。我建议任何使用这两个库的人都应该先学习如何编写面向对象风格的JavaScript,然后再整合适合自己需要的库。学习面向对象风格JavaScript的优秀书籍是“Java设计模式”。

3
Java和Javascript不同。为什么您要推荐一本Java书来学习Javascript呢?(原文已翻译) - Robin Green
@RobinGreen 他推荐了一本学习面向对象编程风格的书籍,"学习面向对象编程风格JavaScript的优秀书籍是"。我可能错了。 - Abdulaziz
1
@AzizAG 面向对象模型有很大的不同。基于类和基于原型的继承。 - user507577

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接