随着Web前端技术的发展,Javascript框架层出不穷,jQuery就是其中之一。近期,国内外社区针对jQuery的优缺点做了深入的分析,其中不少内容值得Web开发人员借鉴。
Richard Hein在“6 Things You Need to Know About jQuery”一文中列举了推荐jQuery的若干理由,包括:
-
jQuery简化工作——开发人员会发现学习jQuery比较容易,因为该框架的代码简洁精练,语法简单、编码标准开发等特点帮助开发人员缩短了部署应用的时间。此外,开发人员无需对Web设计非常在行,利用jQuery,不必花费太多的时间用来编写和测试CSS代码,而且jQuery还有大量的UI组件。
-
jQuery的显示不受Javascript被禁用的影响——如果Adobe Flash不能正常加载,那么有的页面就不能正常显示。这会对用户产生负面的影响,并且导致开发人员不得不为此做额外的编码处理,从而延长了开发时间。而这种情况不会在jQuery身上出现。它采用的是HTML DOM操作,即使浏览器的Javascript被禁用,网页还是可以正常显示。
-
jQuery与Visual Studio IDE集成——NuGet是Visual Studio的一个扩展,在开发基于.NET Framework的应用时,NuGet能够简化添加、删除等工作。VS 2010通过“管理NuGet包”对话框来支持对jQuery的集成。这种特性会触发VS的智能感知等功能,提示开发人员jQuery的方法和语法。总的来说,大多数.NET开发人员对NuGet都比较熟悉。这就是jQuery在.NET社区持续受到关注的原因之一。利用jQuery针对Windows的Mobile theme,你会在Windows Phone平台上享受到所有的开发优势。微软也在鼓励jQuery的使用,并且认真对待HTML5,引入了许多jQuery元素。
-
jQuery制作的动画效果不比Flash差——Flash开发人员需要很长的学习过程,对于通常的开发人员开说,需要花费数年的时间才能创建出优秀的作品。而另一方面,jQuery是免费的,而且只要求开发人员了解Javascript和HTML。假设你可以负担得起Flash开发软件,但是开发人员仍然需要处理那些不支持Flash的情况,这是构建Flash网站的很大的缺点之一,也是利用HTML5构建的很大优势之一。同时,jQuery使用了CSS、HTML、Javs和Ajax,这意味着你可以无需采用类似Flash那种特殊的优化方式。
-
jQuery加载更快——Google和其他搜素引擎都把页面加在时间作为影响SEO的因素之一。因此,开发人员都会努力把Web代码尽可能写的简洁和准确。很好的方式是减少代码量。jQuery文件与Web页面分开存储,这可以让开发人员集中地优化代码。此外,jQuery还支持开发人员自主选择如何加载Div标签,如果你想要改进网站的速度,那么可能会考虑在必要的时候只加载所需的Div标签。
-
jQuery有助于SEO——网站的代码结构对各种搜索引擎的排名影响较大,jQuery提供了大量优化的插件帮助开发人员完成这项工作。
在国内社区,开发人员也对jQuery做了讨论。张经纬比较了jQuery和YUI的优缺点:
jQuery专注于DOM的操作,他通过继承的方式给传入的对象增加了新的方法,从而使我们可以通过链式调用来操作对象,这种方法上手简单,我看到很多设计师都可以玩上一玩。其实,就像jQuery说的,write less do more!
YUI是一个大型开发工具,他提供了一套javascript以及css的类库来为交互开发提供支持,我们可以看到YUI除了主打的js框架外,还有配套的压缩工具(YUI Compressor),文档生成工具(YUI Doc),单元测试工具(YUI Test)甚至开放了PHPLOADER(YUI PHP Loader ),再较大团队开发中,这些东西是非常重要的。
从编程语法上来说,诚如前面所说,jQuery专注于DOM操作,因此必不可免的弱化了OO,相比之下YUI则非常规范。再如,jQuery中面向DOM的设计,决定了他可以通过$.extend()或者$(elem).extend()向对象或者节点增加新的方法,而YUI在这方面就异常的笨拙。当然,这些并不能说明谁比谁好,YUI的颗粒化决定了他的维护成本低,可以称为刀,而jQuery锋利的刀刃决定了它使用方便,游刃有余,可以称为剑。
程劭非则对jQuery的评价不高,理由包括:
-
jQuery主要解决了兼容问题和DOM操作问题,以CSS选择器的方式批量操作元素是主要特色,对于特定项目,我认为实现这个的难度实在不大。而其主旨"write less, do more." 少写些的这个观点我半点不能认同,写程序的时间主要花在思考和调试,而非打字。
-
jQuery污染了两个名字JQuery和$,这个在类库中可以算极少污染了,但是实际上$与其它类库冲突很多,而noconflict这个方案可算不伦不类。
-
jQuery的API设计可以说非常巧妙和优秀,但是其实跟JS的原生对象差的有些远,不过却跟CSS的模式比较接近,这个对于不少人很有亲和力。
-
jQuery的实现质量也算比较高了,虽然选择器还有些优化空间,不过基本可以认为没有太大问题。
杨昆则给出了知乎选择Closure Library来作为JavaScript库,而不选择更流行的jQuery的理由:
选择closure-library是因为这是一个整体解决方案,自带的库已经很丰富,不需要再去找其他插件。而且google用其开发了gmail,google doc,可以放心它的质量。
如果选择jquery的话,单纯jquery库是不够的,还得很多第三方插件,这些插件质量良莠不齐,对不同版本jquery支持还不一致。