jquery真的过时了吗

为链接诱饵标题表示歉意,因为这不是反jQuery文章。 可以为任何JavaScript库( 包括您自己的库)提出相同的观点。 但是,jQuery是许多开发人员最喜欢的选择,有些人会在开始任何JavaScript工作之前添加它。

jQuery是一种抽象

如果您认为网络开发现在很困难,请尝试使用五到十年前的浏览器来开发JavaScript代码。 典型问题:

  1. DOM导航和操作有所不同。 例如,Firefox(正确)在DOM中包含空格,而IE6没有。 因此,您不能依靠node.firstChild返回相同的东西。
  2. 大多数浏览器都原生支持Ajax,但是IE中有ActiveX控件(即使Microsoft发明了XMLHttpRequest)。
  3. IE具有不同的事件模型,但即使其他浏览器也存在不一致之处。
  4. CSS2.1支持千差万别。
  5. 动画可能会很困难,尤其是在处理框模型差异,表单控件和iframe(IE6将选择框和iframe放在页面上所有其他内容的上方)时。
  6. 开发人员工具是基本的。 在Firebug之前,Firefox的错误控制台和IE笨拙的模式错误框是唯一的内置浏览器工具。

开发人员必须编写抽象函数来解决这些问题。 jQuery,Prototype和MooTools是从原始混乱演变而来的; 这些库消除了裂缝,并提供了有用的缺失功能,例如从CSS选择器中选择DOM。

重要的是要记住,jQuery和其他选择都是用JavaScript编写的,以使编写JavaScript更加容易。 它们本身并不是语言

赤裸裸

2013年,排名前五的浏览器比以往任何时候都更紧密。 供应商已经采用了标准,尽管某些浏览器可能缺少某些HTML5 API,但是DOM遍历,操纵,事件处理,服务器通信和CSS效果的核心JavaScript原则得到了很好的实现和记录。 如果某些功能在IE10或Firefox 23中有效,则可以(几乎)保证在Chrome 27和Opera 12中可以正常使用。

那么,当解决的问题不再存在时,为什么要使用库呢? 裸JavaScript总是比调用抽象本机调用的库要快。 在某些情况下,裸露的替代品也更有用。 例如:

var i = $(".myclass");

使用jQuery在运行时查找页面上分配了“ myclass”类的所有元素。 然而:

var i = document.querySelectorAll(".myclass");

总是会更快。 另外,如果使用getElementsByClassname ,则返回的值是实时集合。 换句话说,当在页面中添加或删除类为“ myclass”的元素时, i表示的DOM节点的集合将发生神奇的变化。 jQuery版本必须重复运行才能获得相同的结果。

jQuery版本的主要优点是它将在IE6和7中运行(假设您使用的是jQuery 1.x)。 如果您不打算为那些浏览器进行开发,或者不打算使用jQuery 2.x,则主要优点是语法更简单-但请记住,您正在加载和解析30Kb的压缩脚本以提供该服务。

打破依赖链

多年来,我一直在使用jQuery和较小的库。 为什么? 多为习惯

作为概念证明,我决定在一个简单的站点上重写JavaScript代码,该站点具有一些基本的DOM操作,表单验证和使用小型库实现的效果。 IE6和7的支持并不重要,但是IE8必须工作,这意味着我不能依赖HTML5表单检查(例如required属性)。 我仍然抽象了一些浏览器功能,但主要是为了简洁起见,例如

function $I(id) {
	return document.getElementById(id);
}

结果:使用原始JavaScript代码将15Kb(组合的和缩小的)JavaScript文件减少到3Kb。 节省80%。

诚然,这并不能证明您可以在其他项目上实现这一目标,而且节省12Kb几乎不会引起注意。 但是,它确实说明我不需要我所使用的最小库提供的所有功能。 即使删除了不必要的模块,您当然也不会使用jQuery提供的所有功能。 更糟糕的是,开发人员经常使用多个库,因为他们想要特定的功能和/或插件。

永远不要把话说绝了

我并不是说您不应该使用jQuery。 您也不应该低估图书馆提供的巨大开发成果和帮助。 无论您如何处理代码,始终都需要某种程度的本机浏览器抽象。 考虑一下Ajax-您不想为每次服务器通信重新编写XMLHttpRequest API调用。 大型客户端应用程序将需要一组通用组件,而jQuery或其他库可能很合适。

但是,如果您不支持旧版IE,并希望提供最快,最流畅,最兼容的体验,那么请认真看一下您要解决的问题。 例如,如果您正在编写一个cookie处理实用程序,那么制作一个jQuery插件或将其绑定到另一个库毫无意义。 但是,即使在整个插件存储库中都可以找到cookie处理程序,即使创建一个独立的模块更容易,更有效,该模块可以在任何地方运行而与其他代码无关。

jQuery是一个令人毛骨悚然的毯子,但是有时候,最好裸着身进入JavaScript世界。 您将享受自由,并进一步了解浏览器的工作原理。

即将推出: jQuery方法的裸等效项

翻译自: https://www.sitepoint.com/do-you-really-need-jquery/

jquery真的过时了吗

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐