本机JavaScript开发有什么好处?[关闭]


33

与本地JavaScript相比,jQuery开发要简单得多,是什么使人们完全放弃了jQuery之类的库?

这是因为jQuery有局限性还是速度慢?我的意思是,如果jQuery与本机javascript相比是如此简单,那么人们为什么仍要使用纯javascript是什么原因呢?


1
jQuery只是一个库-使用jQuery编写本机JS仍在编写本机JS。这就像在问:“原生C ++开发有什么好处?” 当您谈论“没有Boost的C ++开发”时。
2012年


1
jQuery和其他旧库的主要目标是在具有不同js接口(例如XMLHttpRequestvs ActiveXObject,或addEventListenervs. attachEventcss selectorsvs xpath selectorsvs no selector support等)的不同浏览器之上创建外观。在最近的浏览器中,大多数这些问题都没有存在,因为它们遵循相同的标准。
inf3rno

Answers:


89

让我们谈谈汽车。

哦,等等,我们已经做到了-还记得我们认识的那段时间吗?我们谈到了汽车。实际上,您似乎是汽车方面的专家。您可以详细解释有关最新一级方程式赛车的所有对,错和令人兴奋的事情。您完全知道兰博基尼的所有型号,包括价格和供货情况。您甚至考虑过购买自己的Ferrari 599 GTB Fiorano,并为此省了下来(我敢打赌,牛排晚餐并没有太大帮助)。

当您用激动而激动的声音解释丰田的缺点时,您突然从椅子上跳下来,向空中尖叫,挥舞着拳头:“该死,我是与汽车相关的一切方面的杰出专家!我!我要当汽车修理工!”

所以你去了。您接受了一次采访,您对博斯人的印象与我一样深刻,因此您被录用了。第一位客户进来。他的离合器坏了。您检查了它,却不知道该怎么办。事实上,您绝对不知道如何遵循老板人给您的建议。你被解雇了。

但是怎么可能呢?你知道的一切关于汽车!除了...关于汽车的一切。您可能非常了解自己梦想中的汽车具有V12发动机,但是您实际上并不知道这意味着什么。

因此,您实际上不是汽车修理工-您是汽车狂热者。并且,在您学习汽车的工作原理之前,您将始终是一个狂热者。

现在让我问你。$.fn.text工作如何?那又如何$.fn呢?他们到底是什么意思?如何$(something)返回一个包含事物的巨大东西,那东西到底是什么?从理论上讲,您是否可以至少复制一点?没有jQuery,您能应付吗?

说“原生JavaScript很难”只是……错误。首先,因为JavaScript作为一种语言与DOM无关,而DOM则主要是jQuery的抽象。其次,因为一旦您对DOM有所了解,就可以浏览最常见的跨浏览器错误。但是,这只是一个小秘密-起初一切都很难。五年级的时候,长师是个bit子

作为此答案的第二个类比:jQuery就像Array.prototype.forEachto 一样,是JavaScript-DOM(不是JavaScript语言,只是DOM)for。它适用于99%的情况。而且效果很好。但是对于那未涵盖的1%,您仅是为了实际就需要知道如何使用for循环。整个答案是基于问题的“纯”方面,甚至不是基于技术方面(例如,库的大小,以及迈克尔·多兰特的回答中所解释的其他几件事)。因为我喜欢JavaScript,而当人们似乎只是随随便便把它扔到一边,说“ pah,那些愚蠢的javascript人”并挥舞着花哨的白手套时,它就沦为道德。

如果您可以接受自己始终都是JavaScript爱好者的事实,那么我该阻止谁?但是,如果您想成为一名JavaScript程序员,则首先必须具备至少在使用jQuery(或任何其他库)和不使用库之间进行选择的知识。了解DOM。了解如何使用它。编写自己的小型库或一些辅助函数。并且一旦您对DOM有所了解,并选择使用jQuery-godspeed。懒惰是为那些努力工作的人而设的。


15
龙师依然辛苦!
雷诺斯2012年

13
@anonymousDownvoter祈祷解释。是因为你是素食主义者吗?我可以将牛排变成豆腐汉堡,但是不能老实地说,有这样的东西,例如“豆腐汉堡”
Zirak,2012年

10
+1“ $(something)如何返回包含事物的巨大事物,这事物到底是什么?” 哈哈!
ThinkingStiff

3
另外,@ Mike这是犯罪分子,从来没有得到过回应,因为这是纯洁的@@ $ ing天才。
Erik Reppen 2013年

5
帖子中的“大牛排”是一个自愿的错字,请勿尝试对其进行编辑。如果需要的话,请参考这个荟萃讨论一下吧
蚊蚋

12

我知道的原因:

  1. 当需求极少时,说1 onclick。

  2. 当下载速度至关重要并且jQuery库太大而您不必编写太多(自定义)代码来替换它时。

  3. 与其他技术集成时,有时原始js更好。

  4. 在已经使用js和既定模式编写的旧版系统(也称为“生产”)上工作时。


13
我不知道#2实际上多久是一次真的。您保存了92K(可能已缓存的下载),但最终编写了更多样板JS代码。
亚当·拉基斯

4
我不知道 您可以将JS保持在所需的状态,而不必为功能的一部分包括整个库。
Ryan Kinal

4
@Ryan Kinal-Adam Rackis有一个要点,如果您使用Google的API加载Jquery,则可以从用户可能已经从中检索到的相同位置加载它。
Ben DeMott

我不同意#4。如果旧代码太可怕了,并且团队中的每个人都同意,那么最好添加jQuery并在以后的代码中使用它。
ThiefMaster 2012年

7

jQuery只是一个框架-一组用JavaScript编写的工具。通过使用该组工具,您仍在使用JavaScript。有些人喜欢使用jQuery提供的工具编写JavaScript,有些人选择不使用,另一些人选择其他工具集。

您可能想在不使用jQuery的情况下编写“纯” JavaScript的一些原因:

  • 页面加载速度更快,无需包含额外的jQuery文件
  • 一些框架可能与jQuery不兼容
  • 编写的代码无法执行jQuery帮助的任何事情
  • 该代码正在编写供其他人使用,并且要求将jQuery作为依赖项将使共享更加困难
  • 代码作者想要比jQuery提供更多的控制权

5

jQuery与任何库或框架一样,增加了另一层bug。我喜欢它,但是我也浪费了一天的时间来寻找一个错误,该错误竟然是jQuery核心而不是我的代码(这种情况很少见,但并不罕见)。

除此之外,我找不到其他原因不使用它:

  • 开销很小,尤其是如果您选择 托管的Google版本
  • 它可以帮助经验不足的Javascript开发人员编写更简洁,更高效的代码,
  • 它的 主要是跨平台的,当您必须使用较旧的浏览器时,可以节省生命,
  • 庞大的插件库可帮助我在很短的时间内编写原型,
  • DOM是有道理的,
  • 等等等等等等...

但是,它绝不能替代Javascript知识。如果您不知道如何使用纯Javascript编写代码,则最初可能会放弃使用库,但从长远来看,您将为此付出代价。

当然,我们所有人都已经在IE6的致命战斗中挣扎了很多年,并且不会轻易放弃旧的学校招数而使用闪亮的新玩具。


2
您使用jQuery插件吗?他们中的大多数人不是可怕的越野车,并且充满了缓慢而糟糕的代码吗?
雷诺斯

@Raynos The huge gallery of plugins help me write prototypes in very short times...只是原型,我尽可能避免在生产代码中使用它们。有一些插件,当然是有出色的代码,但你必须看起来很他们很难...
雅尼斯

原型通常意味着“本来应该是一次性的,但是现在是生产代码”。如果将它们用于一次性原型,那就很好了。
雷诺斯2011年

@Raynos原型不仅涉及一次性原型。进化原型是Web开发的核心过程...-这么晚才回复:P
yannis 2012年

“进化原型”被称为“现在偷工减料,希望我们能从中得到更多的好处,然后是我们将要获得的所有代码债务的成本”。当然,只有在出现捷径的情况下,您才能成功从事业务,这才是正确的。这是贷款。
雷诺斯(Raynos)2012年

5

在浏览器环境中,您需要一个跨浏览器标准化工具。这样的工具有两种风格

  • 用新对象包装宿主对象,新对象在浏览器中的行为方式相同
  • 扩展主机对象以实现DOM API。

通常,您可以通过以下三种方式之一使用这些实用程序

  • 在需要的时间和地点使用类似addClasssetText在整个代码中使用的小功能
  • 编写自己的跨浏览器标准化库
  • 使用现有的。

您需要某种标准化的机制,否则您将获得零跨浏览器支持。

至于使用现有的,那很好。我只是不会使用jQuery。我个人目前正在编写自己的库(DOM填充程序,它可以在不暴露外国专有API的情况下修复浏览器。它将您的浏览器变成一个行为良好的标准化浏览器)。


3

如果您不需要DOM抽象,跨浏览器和旧版浏览器支持-您可以轻松使用jQuery。

这是在开发浏览器扩展,greasemonkey脚本(有时),数字运算的东西,为Node.js或其他非浏览器环境开发的情况。


2

加上这里的其他答案,尤其是Michael Durrant的答案,我会看到速度是我偶尔选择使用原始JavaScript的主要原因。

最近,我一直在处理许多动画或其他占用大量CPU的任务,有时原始JavaScript比通过jQuery时要快得多。

一个示例是我要更改position: fixed元素的不透明度,以改变用户在页面上滚动的深度。当我为此使用jQuery时,效果太慢,导致滚动变得生涩,并且淡入淡出效果被破坏了。我改用直接的JavaScript,除了IE <= 8之外,其他所有功能都很流畅。


2

我需要公开坦诚地开头我的回答。我喜欢jQuery。它极大地简化了我的生活,并使JavaScript代码更具声明性,这就是我认为事情应该起作用的方式。

jQuery做很多事情……

是的,您可以添加插件
是的,可以扩展选择器
是的,它可以简化动画

但是jQuery并不能做所有的事情

您是否曾经尝试使用jQuery在多个窗口上下文中工作?jQuery的在不同的窗口背景处理,因为它保留了原来windowdocument从它被称为窗口的上下文。

我已经在这里和那里写了一些代码来制作弹出窗口*,而jQuery可以简单地阻碍我要完成的工作。在子窗口中添加对jQuery的新引用通常会使情况变得更糟,这将使判断使用哪个jQuery上下文更加困难。

*考虑Gmail的弹出窗口是在新窗口中撰写电子邮件,而不是垃圾广告

在使代码更简单时使用它

使用jQuery的时候就是使您的代码更简单,更短,更具可读性和更快的时候。

到时候使用jQuery是当它不会让你的代码更简单,更短,更易于阅读,或更快。如果您需要微调加载时间,则由于事件开销,您可能不想使用jQuery。


2

如您所知,jQuery是一个通用框架,它提供了许多我们的项目中未使用的方法。(有些我根本没用过。)

不使用jQuery或其他任何完善的框架有两个主要原因。

1.该项目不够大或不够复杂,无法使用这样的框架: 在这种情况下,编码人员将根据他的经验和JavaScript知识做出明智的决定。这将帮助他减轻页面重量,并更好地控制代码。

2.编码人员开发自己的框架 我在公司中看到了一个具有自己的JavaScript框架的项目。他们引用的原因是,如果他们使用的是jQuery,并且有任何错误要修复,则必须等到下一个版本。此外,如果有要添加的功能,即使将其设为插件不是一个好主意,他们也需要向jQuery团队询问或添加一个插件(他们给出了在其示例中使用.live类似功能的示例框架,甚至在正式将其添加到JQuery之前)。拥有自己的框架可以使您更好地控制代码。缺点是您需要重新设计有关浏览器兼容性问题的工具。此外,如果开发过程不好,您的框架将会膨胀,并且只会增加维护时间。


0

麦克风

我认为人们不愿使用某些库是由于依赖于该基础结构/库解决方案来执行某些任务。

但是从长远来看,让我们要小心记住语言像库一样来去去去。

所以也许是时间范围。也许人们不愿投资于一个可能根本不存在的图书馆,或者从长远来看却拥有巨大的动力。

我?我不反对特别使用JQuery。我还看了说Box2d.js或three.js,即使短期保质期,也宁愿接受它们,也不愿错过它们必须提供的水果。

Mike的底线是您选择的库的保质期存在风险,我认为javascript社区中的某些人可能由于库或项目即将结束而遭受了损失,并且可能只是说了-再也没有。


0

我要说的主要问题是,越来越多的人(绝大多数?)不知道如何使用JavaScript进行编码。如果jQuery无法执行某项操作,那么他们将无法执行。

到现在为止,普通的javascript示例变得越来越难以理解。没有反对jQuery的东西;这是一个很棒的框架。我从中得到了很多好主意,但是人们应该首先学习JavaScript,然后再学习框架。我个人发现自己的框架更灵活,更适合我的需求,是的,有时候我确实会重新发明轮子,但是总控制权和对错误修复的控制权是一个巨大的好处,只要您愿意将工作投入到学习JavaScript中即可。

不仅。了解香草JavaScript使得体验和尝试新功能变得更加有趣,而不是等待基于框架的实现。另外,我不怪jQuery,因为它主要是DOM库,但是要扩展大型项目可能会很麻烦。其他框架在这方面做得更好。原型浮现在脑海。

简而言之,这是一个很好的框架,但不是所有人都可以做到的。


2
如果您的回答较少,而将重点放在具体方面,您的答案将会更强。

这篇文章很难阅读(文字墙)。您介意将其编辑为更好的形状吗?
t 2014年

0

我可以添加两个未提及的原因:

  1. 很多时候,当我采用崭新的技术时,我会先从较低级别的结构开始,然后再转到较高级别的结构。我主要是C ++ / C#开发人员,但是前一段时间,当我第一次开始使用HTML / CSS / JavaScript时,我选择不使用任何框架,因为我想首先了解该技术(即JavaScript)。语言本身),这些框架是建立在这些框架之上的。

    • 话虽如此,我自从发现jQuery以来,再也不想回到手工编码方面了,jQuery在1-2行代码中可以为您做些什么。
  2. 我不知道这有多普遍,但是对我来说,似乎很多人在看到下一个框架/技术/语言时,第一反应是:“没有另一个我可以学习的API!” 他们不在乎jQuery多么简单,但他们只是将其视为介于它们之间并使用“真实可靠”方法交付工作的方式。这就是拒绝使用Boost库或任何STL并继续使用malloc进行几乎所有操作的人。您问过为什么他们选择纯JavaScript而不是jQuery,但实际上他们却从来没有选择,因为大多数时候他们拒绝一开始就对jQuery进行评估,并且对当前的开发速度非常满意,无论开发速度有多慢。


1
人们选择纯JavaScript而不是jQuery,因为jQuery是不必要的可怕抽象层。
雷诺斯2012年

当然,它隐藏了浏览器之间的差异,这本身就是一件大事
Kos 2012年

@Raynos:我并不是真正的网络技术专家,而且几乎不是业余爱好者,因此我无法真正捍卫jQuery。但是从我所看到的很少的角度来看,这对我来说非常好。jQuery在您的工具箱中添加了另一个工具。您可以根据需要随意使用它。在需要时,它永远不会阻止您编写纯Javascript。同时,用几行代码可以完成一些事情,这将花费您数天的时间,因此,如果可行,请使用这两行代码。如果不是,请自己动手。如果说整个事情是可怕的是像买螺丝刀,然后抱怨这是一个...
DXM

...可怕的工具,因为手柄没有足够的重量来锤打钉子
DXM 2012年

1
您不需要jQuery。浏览器具有称为DOM的API,该API可让您执行所需的所有操作。可以使用polyfill解决跨浏览器的问题。jQuery是一个中等的库,是对旧版浏览器支持的一个中等的解决方案。
雷诺斯2012年

-1

jQuery是一个用JavaScript编写的库。这个想法是使所有困难/乏味的JavaScript事情变得简单,从而加快了开发时间,并使脚本更可能跨浏览器工作。

是什么让jQuery更适合使用:

  • 快速
  • 轻量级JavaScript库
  • 符合 CSS 3
  • 支持多种浏览器。
  • jQuery框架是可扩展的,可以处理DOM操作,CSS, Ajax,事件和动画。

JavaScript是一种语言,而jQuery是使用JavaScript编写的库。

以下是使JavaScript优于jQuery的原因:

  1. 每次页面都加载整个jQuery脚本库。这是peed /快速查询处理网站的缺点。
  2. 有时jQuery框架崩溃/与其他框架冲突。
  3. 如果您只是为了选择元素而编写简单代码并显示alter,那么原生JavaScript会更好。
  4. 如果操作很小并且在JavaScript的几行代码中执行,则使用jQuery不好。

由于这些原因,我喜欢使用JavaScript来避免使用jQuery框架。最好学习JavaScript而不是依赖这样的库...

即使要扩展它们,也需要用JavaScript编写代码。这也是一个大话题。开发人员依赖于这些库,因此要对项目进行控制,JavaScript比使用框架要好。


1
“很好地处理DOM操作”大声笑什么?
隐身

感谢@Incognito,让我知道这一点。但是比其他库要好得多。keyframesandcode.com/resources/javascript/deconstructed
Niranjan Singh

1
链接完全错误。jQuery通过sizzle支持psudo-css选择器与DOM无关。
隐身

好吧,还可以..即使我从您那里了解到了这些东西..您能给我有关这些东西的任何链接或信息吗..我已经更新了答案..
Niranjan Singh

yuiblog.com/blog/2006/10/20/video-crockford-domtheory是一个好的开始,然后阅读DOM上的w3c规范。
隐身

-4

我认为人们使用jQuery是因为它更简单,更容易且更强大,并且因为它帮助他们忘记了IE。此外,对于自定义功能,人们确实使用javascript。尝试参考DOC了解更多详细信息

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.