为什么jQuery与其他Javascript框架相比被广泛采用?[关闭]


72

我管理一群程序员。我确实重视员工的意见,但是最近我们在网络项目中使用哪种框架方面存在分歧。

我个人更喜欢MooTools,但是我的一些团队似乎想迁移到jQuery,因为它被更广泛地采用。这本身不足以允许我进行迁移。

我已经使用了jQueryMooTools这篇特别的文章倾向于反映我对这两个框架的看法。jQuery非常适合DOM操作,但似乎仅限于帮助您做到这一点。

功能方面,jQueryMooTools都允许轻松进行DOM选择和操作

// jQuery
$('#someContainer div[class~=dialog]')
    .css('border', '2px solid red')
    .addClass('critical');

// MooTools
$('#someContainer div[class~=dialog]')
    .setStyle('border', '2px solid red')
    .addClass('critical');

双方的jQueryMooTools的允许容易AJAX

// jQuery
$('#someContainer div[class~=dialog]')
     .load('/DialogContent.html');

// MooTools (Using shorthand notation, you can also use Request.HTML)
$('#someContainer div[class~=dialog]')
     .load('/DialogContent.html');

双方的jQueryMooTools的允许容易DOM动画

// jQuery
$('#someContainer div[class~=dialog]')
    .animate({opacity: 1}, 500);

// MooTools (Using shorthand notation, you can also use Fx.Tween).
$('#someContainer div[class~=dialog]')
    .set('tween', {duration: 500}) 
    .tween('opacity', 1);

jQuery提供了以下额外功能:

  • 庞大的支持者社区
  • 插件库
  • 与Microsoft的ASP.NET和VisualStudio集成
  • 由Microsoft,Google和其他公司使用

MooTools提供以下附加功能:

  • 具有面向对象的经典OOP仿真的面向对象框架
  • 扩展本机对象
  • 浏览器之间对本机功能的更高一致性。
  • 更容易的代码重用
  • 由Palm和其他公司的万维网联合会使用。

鉴于此,MooTools似乎可以完成jQuery的所有工作以及更多(某些事情我在jQuery中无法完成,而在MooTools中可以做到),但是jQuery的学习曲线较小。

所以问题是,为什么您或您的团队选择jQuery而不是另一个JavaScript框架?

注意:虽然我知道并承认jQuery是一个很棒的框架,但周围还有其他选择,我正在尝试决定为什么jQuery应该是我们的选择而不是我们现在使用的工具(MooTools)?


3
选择器,链接,插件,与其他JS库兼容,易于编写您自己的插件和选择器,标准。我敢打赌,您可以很快地为jQuery编写OOP插件。我希望每个人都可以使用jQuery,因为它比某个人的复杂JS代码更易于使用。
IAdapter

4
@安德鲁·摩尔(Andrew Moore):我认为,以较少的态度提出问题会减少肠道的负面反应。例如,您可能已经列出了一些在MooTools中可以轻松完成的事情,以及如何在jQuery中解决这些问题。
Tomalak

26
有人请重新打开这篇文章。从这些讨论中可以学到很多东西。这种寻求关闭的事情已经走得太远了
CDR

4
@ 01:实际上,在生态系统中单一使用一个平台和/或框架是安全明智的做法,也是明智的进步,这已被广泛接受。如果一个竞争者占多数,那么生态系统就不会进化[这就是为什么我们这么长时间以来一直让IE6这样的怪物统治市场。
Andrew Moore

3
@安德鲁·摩尔 但是,jQuery的数量之多,具有使其能够与新浏览器兼容的优势。当浏览器升级出现时(以及新手机推出新的移动浏览器时),将针对比Moo页面更多的jQuery页面进行测试。如果jQuery是大多数页面使用的“标准”,那么浏览器将必须遵循使用它的要求,而不是相反。
Nosredna

Answers:


62

这是一个奇怪的问题……我给人的印象是……

  1. 您对mootools非常熟悉,并充分利用了其OOP模型,从而使您的代码更易于管理和支持。
  2. 您会意识到jQuery的用途有所不同,并且针对DOM操作和AJAX进行了调整,并且mootools可以完成jQuery的所有工作,然后再执行某些工作。
  3. 听起来好像您不需要在第三方插件中使用太多,这使jQuery的普及和支持变得不那么重要了。

底线是炒作吗?jQuery正在变成“ AJAX”,。NET和Web 2.0等这些神奇的营销流行语之一,这对他们来说非常有用,但是为什么需要证明坚持使用对您来说如此好的框架呢?我认为还有一些商业方面的考虑,其中包括:

  • 框架的寿命,或者mootools可能会在不断增长的jQuery面前消失-非常令人怀疑,因为他们刚刚发布了1.3 beta 1,并且有2.0即将在年底发布。
  • 人员成本和他们的培训(我想找到mootools程序员比在其简历/简历上打jquery的难度更大)。
  • 在资源允许的情况下,在每个框架下维护和扩展系统所花费的时间(和成本)。

两种框架都很棒,但是我相信与mootools一起使用可以最好地满足您的兴趣。


30
这也是我做出的决定。最后我最后说了Mootools。事实是,我见过许多开发人员通过了将jQuery放在简历上的决定,并且完全不知道document.getElementById()做了什么,实际上,除了“这就是问题所在”之外,几乎没有什么其他关于jQuery的线索$符号”。这就是流行语技术的危险。人们开始将其放入简历中,即使他们只是对它的含糊不清的想法。
Andrew Moore

2
鉴于最近的发展,您可能同时拥有两全其美的优势。看看前段时间
2010年

60

就个人而言,jQuery完全可以满足我的需求。

我尝试在服务器端代码中完成大部分工作,这些代码结构合理:它具有适当的OOP,层和MVC架构。当我需要用Java脚本做某事时,我发现(到目前为止)jQuery满足了我的需要。坦白地说,可分为三类:

  • 简单的DOM操作,通常显示/隐藏内容而无需访问服务器。
  • Ajax通话,纳夫说。
  • UI特权,包括模式弹出窗口,动画,从/隐藏/显示的淡入淡出过渡。我是一个顽固的后端编码专家,并且擅长UI方面的工作。我真的很喜欢jQuery,它可以让我以编程方式制作看上去很吸引人的东西。

最重要的是,jQuery插件库很大,而且我发现了很多简化了我的客户端工作的库。好东西。

MooTools引入了面向对象的思想,这很不错,但不是我所需要的。我想将结构化保持在后端,而不必在我的客户端代码中引入这种想法。对我来说,客户端代码只是重点的一小部分,从类的角度考虑它是一种过分的杀伤力,并且是更多的工作。我觉得如果我要使用MooToools的最佳实践,我将构建两个应用程序而不是一个。

我认为这就是为什么它如此受欢迎的原因,尤其是在这里。总的来说,我们是后端代码人,而jQuery使我们能够以编程方式创建吸引人的UI,并使我们专注于后端核心。


6
在简单的UI特权点上+1 –我讨厌UI编程,并且不喜欢包含一个或两个插件,可以添加几行JS,并将带有表单的简单div转换为模式弹出窗口真是太棒了
Jonathan Rupp

3
一个简单的问题:显示/隐藏元素与服务器有什么关系(请参阅“简单DOM操作”)?
史蒂夫·哈里森

9
自我说明:固执己见的线程中的建设性答案仍然会让您
不满

2
@Andrew Moore:表示感谢:)我很惊讶在这里获得3票赞成票-我希望人们能发表他们的推理,以便我更好地充实答案。希望对您有所帮助,我一定会对您对我发布的内容的想法感兴趣。对主导(甚至不是主导)范式的批评是一件好事!
JoshJordan

5
我迄今为止最不满意的答案也是迄今为止我最不满意的答案。仍然以14票赞成。当您称赞一项技术时,有些人会讨厌他们不喜欢的技术,或者提及他们所犯的技术中的缺陷,然后他们会投票表决,让他们讨厌。
查克(Chuck)

16

我不喜欢在JavaScript上使用经典的面向对象。有很多方法可以做到,一个JavaScript程序员可能正在使用Base2 for OO,而另一个使用Prototype或Moo或JS.Class或Joose。Resig故意决定不向jQuery添加类,这鼓励了人们找到更多本机JavaScript解决问题的方法。

结果,对于我来说,阅读其他jQuery作家编写的JavaScript以及编写易于他人阅读的jQuery代码更容易。我通常不尝试在JavaScript中模拟类OOP。取而代之的是,我动态创建对象并传递它们,而且我有很多对象数组。很容易理解,我什至发现自己将这种想法带到了OOP语言中!

就我所知,Moo很有可能赶上jQuery或超越了jQuery。但是我无法花时间跟踪6或7个出色的JavaScript库,以了解领先者。

我认为这很大程度上是时间问题。当大量的程序员加入AJAX时,jQuery是解决他们问题的热门新奇事物。

其他图书馆在很大程度上已经赶上了。YUI,ExtJS,Dojo,Moo都很棒。但是我不能全部使用它们。

我努力工作,试图找出该库新功能的后果。 用。例如,jQuery从1.3开始增加了Live事件。实际上,这使我可以从许多页面中剪切代码。Moo现在也提供这种服务吗?如果发生的话,我应该怎么知道呢?

我确定Moo很棒。我希望有时间学习它。但是你看过道场吗?我不得不在一个项目上使用它,并且发现它也从jQuery中汲取了很多很棒的想法。并且它具有pubsub和对Comet的良好支持。

我很同情你。但是您的程序员说的很有道理。学习jQuery对他们的职业生涯是有好处的,并且有更多的书籍,示例和其他程序员在使用jQuery时寻求帮助。

如果您决定使用jQuery,那么在决定是否使用OO库之前要三思而后行。有一些很棒的代码(例如JS.Class或Joose),但是采取这一步骤意味着将自己与大多数JavaScript程序员的代码隔离。


7
我的首要任务不是员工的职业,而是客户满意度。我们目前正在三(3)个项目上使用jQuery,与具有相同复杂度的MooTools项目相比,这些项目上的javascript似乎更难维护。
Andrew Moore

3
另外,MooTools不会在JavaScript上强加经典的OO。您可以使用或完全关闭该功能。实际上,MooTools OO实现将原型继承和经典继承的最佳结合在一起!
Andrew Moore

如果您有内部经验表明MooTools项目比jQuery项目要好,那么您有一个很好的方法来论证。你能告诉我为什么jQuery项目变酸了吗?是否缺少OOP模型?
Nosredna

@安德鲁,我毫不怀疑。只是说,当我看到JavaScript中的类时,它使我震惊,因为实现中有许多微妙的变化。如果您坚持一,我确定您还好。但是,有多少百分比的JavaScript项目使用MOO OOP?我敢打赌,这个比例很小。我并不是说这有什么问题。我只是避免使用它,因为它不是语言的组成部分,这是另一回事,这只会占我所遇到的JS项目的一小部分。
Nosredna 2009年

1
实际上,由于所有事情都是通过jQuery对象完成的(因此如果没有noConflict运行,则是$),jQuery项目变得很糟糕。我们最终还获得了约75个函数的链[但是我需要将此归咎于我的程序员]。
Andrew Moore

11

现在,我一直在问自己一个非常相同的问题,只是试图把我的头缠在争论上。经过阅读的讨论,绝大多数人的反应是“被更广泛地采用-因此更好”。

我是一个广泛使用两者的人。工作中使用的JQuery(由于“被广泛采用”而被采用)和用于个人项目的Mootools。结果,我不断发现自己在使用JQuery时感到残废;加上JSON支持,元素创建,事件处理等等。在工作中,我发现自己写了75个事件,而且时间很长……结果让我感到很脏。

不过,我在JQuery方面的主要要点是,在插件和第三方开发人员方面缺乏一致性或实践。当插件之间在结构上或其他方面没有一致性时,轶事“更多插件可用”确实对我没有帮助。我花了几周的时间来学习“可接受的”插件模型,即使到那时,由于发现当前结构中存在错误和效率低下,我也将自己的务实风格适应了其中。可以说这是一个“专业版”,任何人都可以加入并开始JQuerying它。但是,我更倾向于将其称为“骗局”,因为您将看到30种不同的方式来完成某项任务,并且很难确定一个公认的标准。

那么,“知道JQuery”意味着什么,是否意味着您知道如何晃动一点.hide()。show()。fadeIn()。fadeOut()?

当我不得不在工作中让我的JS变得黑帮时,我想念一些Mootools。我的意思是不支持本机JSON?来...

作为对“被广泛采用”的回应,我们都知道OSCommerce是最“被广泛采用”的购物车,而且我们都知道那是一堆屎。我绝不将JQuery与OSCommerce进行比较。我只是指出“广泛采用”响应的错误。

至于插件,苹果的App Store有什么……10万个应用程序?50,000个放屁应用程序。当然,JQuery有很多插件,但是垃圾与值得使用的比率很大。


7

jQuery使您可以访问简洁明了的功能编程方法。自从C#3.0中(LINQ)中的方法链接版本发布以来,这对于.NET程序员来说非常有效。因此,从一种语言到另一种语言的流程很容易。能够在DOM中查询对象或对象列表,对我们来说要好得多。首先是jQuery的选择能力使它如此吸引人,然后是它的可扩展性,当然,它附带的所有内置功能都很好。另外,背后的社区非常棒,因为我首先查看别人是否做了某事,然后在找不到解决方案的情况下尝试自己做。最后……但同样重要的是……微软将在Visual Studio 10中包含并支持它的事实非常棒。Moo Tools,Prototype等无法与以上所有竞争。


3
我承认,jQuery背后的社区很棒(而且它也集成在VS中),但是MooTools具有与jQuery相同的选择功能。
Andrew Moore

7

无论如何,JS框架是如此相似。如果您使用Mootools已有一段时间,请坚持使用。因此,了解您的框架比选择一个框架重要得多。

在我看来,mootools对于高级javascript程序员更好,而jquery对于非JavaScript程序员更好。那是我在阅读了两个文档之后的想法,请注意,我没有使用任何文档。jQuery缺少对javascript核心,函数绑定,对象克隆,线程堆栈等的支持。


5

jQuery和其他框架一样,可以完成其工作,如果不符合您的需求,则应使用其他工具。我不使用jQuery在javascript中进行复杂的编程,而是使用它,因为它使DOM操作和CSS3样式的东西变得简单,而且95%的时间就是我所需要的。


5

我也有一段时间没有看过MooTools了。但是这是我对JQuery的观点:

  1. 一致的编程模型(有一种有效的JQuery方式)
  2. 优秀的文档。当我开始时,JQuery拥有最好的文档。
  3. 广泛的第三方插件
  4. Microsoft支持-我是一个asp.net开发人员,这有助于减轻客户的烦恼。另外,它现在随我的工具一起提供。
  5. 许多入门指南。
  6. JQuery的网站看起来比MooTool的网站更好。很抱歉,这很重要,但确实如此。请记住,其中许多工具都需要吸引设计师和开发人员。

5

亚尼

是的,这里有点不合适,但这是jQuery具有比MooTools更大的基础的主要原因。MooTools带来的所有这些额外功能都不错,但YAGNI却不错。

这不是最好的,而是满足的-找到当前问题的适当解决方案。jQuery易于使用,其主要目的是DOM操作。由于95%的使用JavaScript的人只是为了操作DOM而已,因此经历更长的MooTools学习曲线毫无意义。MooTools根本不会为他们带来任何jQuery可以轻松交付的东西。

在使用MooTools之前,您需要做更多的事情,jQuery使您可以快速地完成一些事情。如果您开始编写大型的重型js应用程序,则可能会遇到这种方法的一些缺点,但是95%的编写js的人都不会这样做,因此这些事情对他们来说并不重要。他们为繁重的工作使用服务器端语言,为DOM使用JavaScript。

因此,它们对您的团队也可能无关紧要。要带您浏览列表,请逐点(首先使用jQuery):

庞大的支持者社区-仅与项目相关。与团队个人更相关,因为它与您之后的生活息息相关。如果不幸发生(请上帝保佑),而您的公司不见了,那么jQuery会给他们带来比MooTools更多的工作。

插件存储库-非常相关,因为它有助于避免重新发明轮子。

与Microsoft的ASP.NET和VisualStudio集成-如果您是.NET商店,则非常相关。实际上,如果您使用.NET,则仅此一个原因就应该进行切换。

被Microsoft,Google和其他公司使用-谁在乎?

现在进入MooTools列表:

带有面向JS的经典OOP仿真的面向对象框架-无关紧要,除非您的项目的性质对此有所帮助。我不知道您要建造什么,但是对于网上商店来说,这很少相关。大多数网上商店没有足够的代码来加分。

扩展的本机对象-对大多数网上商店而言都不重要

浏览器之间对本机功能的更高一致性。-相关

更容易的代码重用-这与大型存储库的jQuery优势有些冲突。大型存储库本身就意味着重用代码。我怀疑您在这里使用的是代码重用的狭义定义,这可能无关紧要。我已经重用了我构建的许多jQuery代码以及MT代码。

由Palm和其他公司的万维网联合会使用。-不相关。如果您想在那里工作,则有关谁还在使用什么的唯一相关性。与使用它的任何特定商店相比,使用多少商店的意义更大。

没有一种真正的方法来进行JavaScript编码。消除偏见,与团队成员坐下,消除偏见。谈论有关您正在执行(和想要进行)的特定项目类型以及适用于这些情况的每个库的优势的土耳其。(因为其他情况不存在,它们如何处理其他情况无关紧要。)您应该从中达成共识。

(YAGNI =如果我需要解释,您将不需要它。)


1
我不明白为什么您说MooTools要求您更多以产生结果。如果不想,则不需要将OOP与MooTools一起使用。通过代码重用,我并不是说复制粘贴。我的意思是构建例如一个PointedTips类,然后可以通过执行类似新PointedTips($('#myElement'))的操作将其应用于元素[jQuery带有插件:$('#myElement')。PointedTips()]。
Andrew Moore

MooTools具有用于与VS集成的第三方插件。我应该说“开箱即用的集成”。但是我们是一个PHP盒子。
Andrew Moore

实际上,您实际上就是一个很好的例子。在MooTools中创建一个类,在jQuery中编写1-2行js。如果您的目标是在js中构建一个复杂的应用程序,那么MT的方法是合适的,但是大多数人只是使用js来达到一种特殊的效果,而这通常是一行jQuery代码。我并不是说jQuery总是更好,而是说“课程马”。通常,您尝试做的事情可以在jQuery中更快,更轻松地完成,因此很受欢迎。
阿伦

4

我之所以选择使用jQuery作为默认的UI库,正是因为它不扩展或以其他方式猴子修补本机对象,这与prototype.js或mootools不同。从文档角度出发,对于使用哪种框架确实没有疑问。


我只是看了MooTools的网站。原生类型的增加使我感到紧张,但我喜欢它们如何散列。mootools.net/docs/core/Native/Hash
Nosredna,2009年

2

您自己说一句:

鉴于此,MooTools似乎可以完成jQuery的所有工作,并且做更多(某些事情我在jQuery中无法完成,而我在MooTools中可以做到),但是jQuery的学习曲线较小。

MooTools所做的大多数额外工作都是我们根本不需要的工作

就像您自己说的那样,jQuery更易于学习,实际上对于大多数人来说,选择框架时更重要。


1

我在JavaScript中不需要的是明确的OOP和一些丑陋的对象仿真。

上一次我检查MooTools(可能在1.5年前:-)时,它在浏览器兼容性方面存在多种操作。

所以jQuery在我看来完全可以。


1

jQuery不仅是一个不错的库,而且它的创建者John Resig作为Pro Javascript Techniques的作者也享有一定的声誉。

我们在办公室附近有2-3本书。

jQuery很小(有意如此),但是可以通过插件添加功能。


1

使我对mootools感到不愉快的一件事是API的文档和稳定性:我根本找不到与使用的mootools-Version相关的文档。如果定义的API是稳定的,那不会有太大的问题。但是由于某些功能在较新的版本中消失了(经过数小时的搜索后找到了ChangeLog),也无法进行迁移。在那之后,mootools对我来说已经不合时宜了。

像许多其他应用程序一样,我不想将基于类的OOP引入简单的用户界面操作中。那就是我使用jQuery的目的:没有那么复杂的用户界面。当我必须构建丰富的浏览器端应用程序时,我总是会切换到大型解决方案(ExtJS,YUI,qooxdoo),这些解决方案提供了多种随时可用的小部件。


1

在比较提供类似功能和概念的工具/库时,更大的用户社区和更广泛的采用会带来很大的不同。更大的社区意味着更多的支持,更多的示例,更多的好主意以及更多的可重用代码段,当您在罕见的场景中工作时(这很可能是其他人以前遇到过的),这一点尤其重要。

其次,在我看到的基准测试中,jQuery比MooTools更快。

我也非常喜欢他们强调保持小型内核并通过插件添加功能的强调。防止核心库变得太大而笨拙。

我从来没有亲自使用过MooTools,但毫无疑问,它是一个很棒的库,它提供了与大多数jQuery功能或概念相当的可接受的等同语言,但是第一点对我来说很重要。



我在Chrome和Firefox中测试过,MooTools的性能要比jQuery差很多。
Nosredna

2
在几台机器上的所有5个主要浏览器中进行的多次测试中,我的平均结果倾向于是jQuery和MooTools的性能相当,但在jQuery的支持上有明显优势。在所有测试中,YUI是明显而悲惨的失败者,而原型则明显滞后。无论如何,这些测试似乎表明,在jQuery和MooTools之间进行选择时,性能不应成为您的主要考虑因素,因为MooTools拥有自己的优势。感谢您的漂亮链接安德鲁!
布赖恩·莱西

1

另一个原因:将jquery出售给管理层更容易。在公司环境中进行基于asp.net的内部开发时,神奇的一句话是“ Visual Studio支持”。


对于我来说,我并不十分在意,因为我是管理层,我们也没有在开发ASP.NET。
Andrew Moore

3
您问为什么jQuery被更广泛地采用,而不是为什么您更喜欢它。
克里斯,

0

一方面,这还不是全部。有相当一些 其他的 功能, 。另一方面,并​​不是每个人都使用它。但是我不想打断好人。


2
看到j​​Query的强大功能后,我俩都使用了它。但是在jQuery中我无法做的事在MooTools中无法做,而事实并非如此。我不喜欢jQuery,我只是不完全理解为什么它被如此广泛地采用。
Andrew Moore

0

我必须回答很多答案……出色的文档和社区支持至关重要。我曾经讨厌js编程,并且会像它那样避免使用它,但是由于jquery和快速的学习曲线,现在我已经完全接受了它。

谁拥有最好的技术并不总是如此!


0

Mootools,在使用jquery原型等时无法正常运行或完全无法运行。同意绝对没有理由同时使用它们,但是偶尔它们会出现在同一页面上(例如插件,幻灯片,小部件)等),然后事情就停止了。

这本身是不能接受的。因此,jquery的所有道具都不会造成不必要的麻烦!


4
@Dheer:最新版本已不再是这样,而且,除了缺乏计划外,绝对没有理由使用多个JavaScript框架。
Andrew Moore

0

人们为什么开始使用传真机?在某些时候,收益成倍增加。


1
我是否应该使用传真机不是问题,我已经了解了传真机的功能并了解它们的需求。我要问的是,当三星的传真机具有惠普的所有功能以及某些功能时,为什么它比三星的传真机更受欢迎。
Andrew Moore 2010年

1
@安德鲁·摩尔(Andrew Moore):很棒的类比。
大通威尔逊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.