论坛首页 入门技术论坛

不建议使用jquery的情况

浏览 40763 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-02-21  
jquery作为一款高质量的框架被大多web开发者所推崇。jquery也的确是一款伟大的产品,在实际开发中明显提高了效率。但是任何产品并不是完美的,或者说不总是完美的。本文旨在讨论不适合用jquery的情况,并非标新立异,请看我列举的情况:

javascript初学者
初学者很容易被jquery所提供的各种效果所吸引,平时焦头烂额都写不出的效果,被jquery几行代码轻松实现了。初学者如果在这个时候就用jquery来开发,打击自己的信心还算小事,更严重的是,jquery的理念"write less,do more"。但是,一个初学者如何能提高自己的水平?一个重要的方法就是多写吧!而这和jquery的理念是相矛盾的。更需要指出的是,jquery把javascript中比较重要的DOM和浏览器差异都解决了,使用者不需要为这些事情编写兼容性代码,这虽然提高了效率,但却不利于初学者培养扎实的javascript功底。

行为比较复杂的项目
比如网易邮箱,包含大量的ajax技术。虽然jquery在新的版本中号称具有800%的速度提升,但是那只是指DOM遍历的速度。而且,即使速度提高这么多,现在的jquery获取DOM节点的速度仍然比标准DOM方法(getElementById)高出4倍(这个是我自己测试的结果,大家可以自己试试)。当网站行为比较复杂的时候,这些微小的差距会累加,从而影响网站性能。

超高访问量的页面
当你的页面在考虑去掉缩进和多余空格来减小传输量的时候,你应该把jquery毫不犹豫地去掉。这将显著减小网站流量。

只需要jquery的一个功能

老实说,这并不是一个致命的错误,只能算一个不好的习惯。比如很多时候为了获得一个getElementById的简写,不惜引入庞大的jquery,这虽然算不上大问题,但有责任心的开发者不会做这种事情。

最后是我认为适合使用jquery的场合:中小型网站,专题,具有一定javascript经验的人。

水平有限,欢迎大家不吝指教。
原文在CanQue@rssidea不建议使用jquery的情况
   发表时间:2008-02-22  
任何事情都有利都有弊。
你不能因为无法让初学者不能学好SQL,就不用Hibernate/jpa吧。
任何高层的API都会封装底层的API,效率永远都是第一位的。
0 请登录后投票
   发表时间:2008-02-22  
不敢苟同:
1、初学者提高功底和是否学习、使用jquery没有必然相悖的因果关系,反过来体会到jquery的强大和便捷,更能领略包装、重构和创造性思维的价值,而陷入浏览器兼容性泥潭也根本无助于提高js功底。
2、你第二个论点我没看懂,不知道你要表达jquery的慢,还是快?DOM的快和复杂UI逻辑不适用有何关联?
3、一个ajax页面中缩进和空格占多大比例?很小!怎么可能显著减少网咯流量,相对ajax异步特性所减少的网络流量微不足道。
4、对于一个项目来说,若是一个jquery能解决web UI的全部应该是天大的喜事,至于“庞大的jquery”我不知道你指什么?组件库吗?只要使用ajax方式就少不了UI库,要知道jquery可最精简的主流ajax框架,和ext比起那是十分之一的概念,小一个数量级,何来庞大?
0 请登录后投票
   发表时间:2008-02-22  
谢谢fight_bird的回复。

1,我是指初学者在开发中使用jquery,而不是指学习jquery。或者我的表述容易让人误会,我的意思是初学者应该尽量使用原生的javascript,这样提高对javascript的认识。如果你连document.getElementById、闭包、匿名函数都不知道,还谈什么“领略包装、重构和创造性思维的价值”?浏览器兼容性应该是学习javascript一个重要的挑战吧?

当然,你可以说.我使用jquery,但我还是可以学习啊?你要这么说那我也同意。不过请你想想,当你连一个菜单代码都看不懂的时候,去看jquery代码的恐惧。

2,当然是jquery慢,行为逻辑越复杂的页面对代码效率要求越高,jquery不一定适合。

3,请注意我的前提:“当你的页面在考虑去掉缩进和多余空格来减小传输量的时候”
另外,你可能也知道,jquery packed以后由94k变为29k,你能说去缩进,空格等没有意义吗?

4 你说一个项目,用jquery解决UI是天大的喜事,我同意。所以我才会说适合jquery中小型的网站。庞大是相对的,你硬是拿ext来比我也没办法。但是你有没有仅仅为了在一个页面里使用类似于$('#box').toggle()而引入jquery呢?(我是说某些独立的页面,不是网站)
0 请登录后投票
   发表时间:2008-02-22  
其实楼主说的一部份,也是我现在正在担心的问题。
0 请登录后投票
   发表时间:2008-02-22  
rssidea 写道
谢谢fight_bird的回复。

1,我是指初学者在开发中使用jquery,而不是指学习jquery。或者我的表述容易让人误会,我的意思是初学者应该尽量使用原生的javascript,这样提高对javascript的认识。如果你连document.getElementById、闭包、匿名函数都不知道,还谈什么“领略包装、重构和创造性思维的价值”?浏览器兼容性应该是学习javascript一个重要的挑战吧?

当然,你可以说.我使用jquery,但我还是可以学习啊?你要这么说那我也同意。不过请你想想,当你连一个菜单代码都看不懂的时候,去看jquery代码的恐惧。

2,当然是jquery慢,行为逻辑越复杂的页面对代码效率要求越高,jquery不一定适合。

3,请注意我的前提:“当你的页面在考虑去掉缩进和多余空格来减小传输量的时候”
另外,你可能也知道,jquery packed以后由94k变为29k,你能说去缩进,空格等没有意义吗?

4 你说一个项目,用jquery解决UI是天大的喜事,我同意。所以我才会说适合jquery中小型的网站。庞大是相对的,你硬是拿ext来比我也没办法。但是你有没有仅仅为了在一个页面里使用类似于$('#box').toggle()而引入jquery呢?(我是说某些独立的页面,不是网站)

呵呵,对第二点有点不同意见哈。。。
行为逻辑复杂的页面不一定对代码效率要求很高,反而对逻辑的执行方面要求较高,jquery的selector正是发挥长处的时候,,如果一个表单n多的输入框,进行某个操作后有若干的相关的输入框的操作,如果自己写js代码,呵呵,我相信能写好,但是这样的东西一多,自己js代码都看花眼了,更加不要说进一步开发调试了。。。
对代码效率要求高的页面当然最好是自己写,但是如果自己写的代价太大,也可以考虑牺牲一部分性能来换取开发速度和正确性。。。
0 请登录后投票
   发表时间:2008-02-22  
rssidea 写道
谢谢fight_bird的回复。

1,我是指初学者在开发中使用jquery,而不是指学习jquery。或者我的表述容易让人误会,我的意思是初学者应该尽量使用原生的javascript,这样提高对javascript的认识。如果你连document.getElementById、闭包、匿名函数都不知道,还谈什么“领略包装、重构和创造性思维的价值”?浏览器兼容性应该是学习javascript一个重要的挑战吧?

当然,你可以说.我使用jquery,但我还是可以学习啊?你要这么说那我也同意。不过请你想想,当你连一个菜单代码都看不懂的时候,去看jquery代码的恐惧。

2,当然是jquery慢,行为逻辑越复杂的页面对代码效率要求越高,jquery不一定适合。

3,请注意我的前提:“当你的页面在考虑去掉缩进和多余空格来减小传输量的时候”
另外,你可能也知道,jquery packed以后由94k变为29k,你能说去缩进,空格等没有意义吗?

4 你说一个项目,用jquery解决UI是天大的喜事,我同意。所以我才会说适合jquery中小型的网站。庞大是相对的,你硬是拿ext来比我也没办法。但是你有没有仅仅为了在一个页面里使用类似于$('#box').toggle()而引入jquery呢?(我是说某些独立的页面,不是网站)


呵呵,感觉楼主有些炒作名词的嫌疑哟。标题虽是“不建议使用jquery的情况”,但细看内容,若把jquery改成prototypejs或者mootools似乎也都成立,这样这篇文章可以改做“不建议使用ajax组件库的情况”了。

以下是在下的几点拙见:

1.请不要说某某初学者在开发中学习ajax库,我希望公司项目中使用某某东东的时候,总会有一员大将可以掌控这门技术的,在开发中尝试新技术,即使是个老手也要担风险,更别说初学者了,让一个啥也不懂的去尝试新东西,这个公司的经理没有为公司负责。

如果是学习的话,您认为是借鉴性学习好呢?还是探索性学习好呢?前两年prototypejs刚出的时候,连文档都没有,几乎用ajax的老手都会建议新人去啃啃prototypejs代码,因为这样可以开辟js的新境界,怎么现在ajax库纷繁辈出,文档齐全反而不建议去学习了呢?

请恕我直言,天下文章一大抄,谁学习不是从看别人的代码开始的呢?你不让新手去抄jquery,他们就只好去抄以前那些老书上的代码,结果学了半个月学了alert(),document.write(),window.open(),代码毫无格式,写得乱七八糟,养成了坏习惯估计都改不过来了,到时候怕是咱们连哭都来不及。

2.jquery慢,prototypejs慢,mootools慢,但是那些代码都是经过优化的,(这里请恕我假设ajax库的里功能大家都能自己实现——不过在下水平有限,大部分都不会做。)你能保证仓促中写出的代码比经过多数人检验的代码更好,更快,更稳定吗?

打一个不恰当的比喻,谁都知道汇编比c快,c比java快,java比动态语言快,那怎么不见别人都用汇编呢?呵呵~咱们也不是说效率不是问题,但伟大的先辈说过“如果你不确定代码需要优化,那么千万不要试图去优化它。”这样来说,只有在确认ajax库成为瓶颈的时候,才应该去考虑它,而不是先假设它会拖慢整个项目。:)敏捷一些(希望不是贬义,有人对这意见比较大,可能会反过来说“你才敏捷呢,你全家都敏捷。”)。

3.服务端和客户端缓存是解决这个问题的主要途径,而不是删除某个文件。不过过多的js会占用带宽,够用就好,千万别贪多哟。具体问题具体分析。

4.请恕我臆断,一个简单到仅仅需要$()的项目究竟是个什么规模。看起来似乎连crud和高亮的功能都没有,听起来这这是一个静态页面,那么它的确没有使用ajax库的必要,因为他太简单了,简单到,即使加上了ajax库也不会有任何影响:),客户不会感觉到这个页面多了十几二十k,反而是使用了ajax库的开发者会如虎添翼,使用ajax库不但拥有的简练强健的功能,更多以后的功能扩展提供了便捷的途径,何乐而不为呢?

哦,如果我想得太复杂了,实际上页面就是太简单了,仅仅用到$(),好吧,可能美工就可以去做一个这样的页面了,连程序员都不用找,ajax还是省了吧。:)

PS:很可惜楼主没有指出jquery区别于其他ajax库的特点,我对jquery是浅尝辄止,因为它实在太好用啦,selector如此便捷,让我根本不用去想这个功能去js里应该怎么写,所有操作完全使用jquery提供的api就可以实现,甚至连el都封装好了,提供了各种常用函数,这让我觉得胆战心寒,害怕会因为这种便捷让自己完全依附到jquery上,怕我学会jquery的时候就不会用js了。想到这点我打了退堂鼓,从此以后再也没有使用过jquery。

不过在我接触了ext之后,这种疑虑被打消了,ext整个库400k+,比jquery大20多倍,封装的比jquery厉害没有20倍,估计也差不多,但随着学习的深入,不但没有扔掉以前学的js,反而更加强了,因为它给我提示了不同的应用可能,这种眼界的开阔可比你自己乱试要厉害很多,因为你是跟着这世界上最优秀的ajax库之一的作者在学习。

因此我的建议是,如果有可以节省我们时间精力的ajax库,那么最好第一时间去试一下,即使不实际使用,也不要放弃开阔眼界的机会哟。至于项目中是否使用,请根据各自情况选择:
1.团队中是否有人对此熟悉,至少做到80%问题可以立刻解决,10%的问题花点儿事件就能解决,10%的问题知道怎么迅速绕过去。
2.网路优化上我不擅长,实际情况实际分析吧。extjs太大了,好多地方都用不上,其他底层库那么小,估计不会有很大限制。当然还是有特殊情况,所以才要实际情况实际分析,咱们不把话说死好了。

^_^祝大家好好学习,天天向上。
8 请登录后投票
   发表时间:2008-02-23  
回复:xyz20003
是不是因为带了两个url,你怀疑我炒作?

1,我说的不适合一开始就用jquery来开发,而不是分析jquery代码。当你能分析jquery,能看懂prototype的时候,已经不是初学者了。

2,时间仓促?那我支持你用jquery,他本来就是为快速开发来的。

3,具体问题具体分析,我同意。这一点大家评判时都忘了我的前提,让我很郁闷,我不打算再讨论这点。

4,我说的是一个页面,比如一个简单的专题页面,或者一个投票页面。还有我也指出了,这并不是错误,只是不好。


0 请登录后投票
   发表时间:2008-02-23  
回复:wangdi
嗯,说得有道理。
0 请登录后投票
   发表时间:2008-02-25  
我有一个建议
  大家都去搞汇编
    搞项目的时候先搞个文本编辑器出来写代码
      不过得先写个记事本用来写代码
        哎? 好像得先写个操作系统吧
          不对,应该先搞电路板,弄个PC出来
            无尽递归......

那就用纸吧!!
4 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics