• 68046

    文章

  • 643

    评论

  • 65

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

前端UI攻城狮 你们该抛弃jQuery了

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>
 

你不再需要jQuery!

Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。但是我们真的需要他么?或许我们应该反思一下什么时候才真的需要jQuery。

对我个人而言开始使用jQuery的理由是他把我的工作变得简单多了,开发Web应用已经几乎离不开它。曾经在不同浏览器里Web API的实现有很大区别,而jQuery帮我抹平了这些,所以我很少再用document.getElementById这样的原生JavaScript函数。依赖jQuery衍生出了无数极其优秀的类库,从完美的下拉菜单、复杂的表单验证到这几年流行的瀑布流布局,这些都让我的工作变得简单多了。

我一直坚信jQuery是开发JavaScript工程必须的,2012年,当时我需要开发维护一个跨浏览器的大文件上传组件时,我的第一直觉就是我要用jQuery重写已有的代码,因为我已经下意识把jQuery当做简化工作的一部分标准。但是社区的用户并不希望我这样做——他们不想引入额外的第三方类库,就这样我(被迫/不情愿)的重新开始学习原生浏览器API。出于意料的是,我发现不再依赖jQuery之后的工作比我想象的要简单得多!我曾经以为没有jQuery我就不会写JavaScript代码了,但是现在我发现jQuery并不是必须的!

拐杖?陷阱?

曾几何时我第一次使用JavaScript开发大型项目,jQuery就同步进入了我的工作,事实上我是从见识了无比强大的jQuery选择符系统之后才开始喜欢上Web开发的。我并没有深入学过“真正的”浏览器原生API(document.getElementById ?那时觉得看着好丑!),在被迫学习原生API之前,事实上我也不完全清楚怎么直接访问并操作DOM元素——jQuery全都帮我做了。jQuery已经成了我的拐杖,当初用它是因为他能让我走的更好,但是后来我离开他已经不会走路了

我发现我掉进了一个陷阱,一个很多Web开发新手都掉进的陷阱。我本应该先花时间去理解JavaScript本身以及浏览器提供的API,但是我却因为jQuery提供的蜜罐而止步不前。逻辑上我们应该这样系统的学习JavaScript开发:

  1. 学习JavaScript语言
  2. 学习浏览器API
  3. 学习jQuery(或者其他框架、类库,实际项目中会大量用到的)

译者注:事实上这也是JavaScript的圣经犀牛书JavaScript: The Definitive Guide)的撰写顺序。可实际上包括译者在内,很多Web开发新手看到"第二部分:客户端Javascript"的时候就直接略过了,毕竟那时觉得和浏览器API比起来,jQuery看上去是那么优雅。

工程实践中,很多Web开发新手(比如我)是从第3步开始的,完全忽略了1和2的存在,这是完全可以理解的,因为学会了jQuery(或者其他类库)我们就已经可以动手开始写代码了~ 但是如果你不清楚jQuery的背后到底发生了什么,就一定会在未来的开发中遇到问题。你也一定会遇到不能使用jQuery的项目,比如流行的Angular.js这样的框架,初学者就最好删掉jQuery类库,从头开始学JavaScript。

跨浏览器支持

支持jQuery最常见的理由中最常见的一条,就是他修复了“不一致的DOM API”。这没错,但事实上不一致的DOM API只有在IE6/7及更早的版本中才大量存在。浏览器发展到2014年,非现代浏览器的使用比例已经越来越少。jQuery开发组自身也意识到这个问题,逐渐开始削减对这部分浏览器的支持,从jQuery 3.0开始,jQuery的版本分化支持所有浏览器的完整版只支持现代浏览器的精简版。我们需要面对的DOM API已经没有那么糟糕,基本的DOM元素创建、遍历和操作已经统一,至少在所有的现代浏览器中是这样。

从IE8开始,浏览器API开始逐渐标准、稳定,当然从细节上,IE10及早期的Safari/WebKit引擎中的某些实现确实不完全相同,但是这些不同可以逐例分析,并且使用更小、更专用的类库来抹平。重点是:jQuery不是银弹,不能解决脚本中的所有跨浏览器问题,我们可以用更小、更专用且可控的方式来抹平这些浏览器的差异。

JavaScript

另一个支持jQuery的常见理由是它弥补了一些JavaScript自身的缺陷,比如不方便的循环遍历、复杂的DOM访问等等。使用了第三方类库(jQuery或Underscore等)之后,循环遍历变得比原来容易多了。这个理由曾经是正确的,但是现在JavaScript本身也在进化,forEach、Object.keys()等函数的支持也很普遍了。曾经我很依赖$.inArray()函数,但是Array.prototype.indexOf()函数也早就是ECMA Script 5的一部分。类似的例子还有很多,后面我们可以在专题中慢慢探索。

需要马上抛弃jQuery么?

当然不是,如果jQuery使你的工作变得足够简单,如果你足够熟悉jQuery是如何工作的,接着使用jQuery没有一点儿问题。这个系列的文章是想告诉读者,我们可以使用原生的浏览器API完成需要的工作,而不需要引入庞大且不完全需要的类库。另外多了解jQuery本身是如何工作的总是没有坏处。

译者注:

The better you understand what you are doing, the better you will do it.
对所做的事情理解越深,你就会做的越好。
——引自 The Singular Secret of the Rockstar Programmer / 编程巨星的唯一秘诀


 转载至链接:https://my.oschina.net/u/4191619/blog/3109053。

695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤
注册梁钟霖个人博客