说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

[探讨] 是用jQuery框架还是自造车轮呢?

HTML文档下载 WORD文档下载 PDF文档下载
日前,寒冬winter在博客园的一篇关于《从jQuery谈库与框架的设计之优劣》的文章引发了众多开发者们的激烈探讨,那么究竟是用jQuery框架还是自己造车轮呢?对此,网友们各抒己见。CSDN摘取了部分精彩评论,我们一起来探讨下。

jQuery是业内知名的JavaScript框架,它是轻量级的JS库,兼容CSS3,还可兼容各种浏览器。jQuery使用户能更方便地处理HTML documents、events、实现动画效果,并且轻松为网站提供AJAX交互。jQuery一大优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。它的实现和设计可以说代表了JavaScript界最高的水平。


日前,寒冬winter在博客园的一篇关于《从jQuery谈库与框架的设计之优劣》的文章引发了众多开发者们的激烈探讨,文中他分别从解决问题、命名、接口设计、耦合四个方面来以jQuery为例总结库与框架设计的原则和优劣判断。

在谈到解决问题时,他例举了一个框架案例,他把这个库称为四则运算。

function add(a,b) {    return a+b;}function mul(a,b) {    return a*b;}function minus(a,b) {    return a-b;}function div(a,b) {    return a/b;}

这个库的API简洁优美,实现的更是优雅无比,它把四则运算统一成了函数形式,使得我们的开发更加方便。最强大的是,这个做法使得四则运算支持函数式编程,比如:

function acc(a,b,f) {    var jieguo = a; //http://weibo.com/2178807082/zk1kOcMPU    for(var i = 1; i<b; i++) {        jieguo = f(jieguo,a);    }    return jieguo<span style="line-height: 1.45em;">}</span>

这样,通过acc函数,我们可以轻易实现n次方运算,这正是函数式编程之美。

举这个例子是为了告诉大家,一个框架/库其实可以不需要解决任何问题——只要你会乱用概念、自吹和哄骗新手就够了。

下面我们来看看一个非常成功的框架——jQuery解决的问题,让我们来看看jQuery首页的"Brief Look"中给出的第一个例子。

DOM Traversal and Manipulation

$( "button.continue" ).html( "Next Step..." )
嗯,没错,jQuery希望帮助我们解决遍历DOM的问题,如果没有jQuery,我们大概要写一个traversal函数了。

function traversal(node, f) {    f(node);    if(node.children.length) {        for(var i = 0; i<node.children.length;i++)            traversal(node.children[i],f);    }}traversal(document.body,function(element){    if(element.tagName=="button" && element.className.match(/continue/)) {        element.innerHTML = "Next Step...";    }})

traversal这个函数真的是超麻烦不是么?竟然有175个字符呢!使用起来也有166个字符,用了jQuery之后,只要45个字符就可以搞定呢!好神奇!

好吧原谅我刚才把思维模式切换到了"write less, do more"模式,jQuery正是通过一个字符一个字符地节约程序员的工作量来达到这一伟大目标的。

压缩后仍达97k的jQuery竟然帮助我们少写了这么多代码,好神奇啊!这正是库/框架设计的要点,那就是"没有问题创造问题也要解决问题!"


那么究竟是用jQuery框架还是自造车轮呢?对此,网友们各抒己见。CSDN摘取了部分精彩评论,我们一起来探讨下。

@寒冬winter发表微博补充:jQuery当时硬从prototype嘴里啃下来的空间,yui一直不温不火,mootools两是prototype的改良主义,dojo一直挺烂但是有死粉,ext凭借差异化杀出血路。jq成功背后原因很复杂,多方因素。

@朴灵表示:@寒冬winter 和@玉伯也叫射雕 两个的观点都是对的。我曾经也黑过jQuery,原因是菜鸟太多,连jQuery都用不好,代码里满屏的$符号。实际角度赞同玉伯,菜鸟连$都写不好,自己写不是更糟吗?这里解释了为什么jQuery是事实上最好的DOM库。

@jQuery小组对此回复:JQ的设计更多的是出于在功能、扩展性、代码量上的平衡,很多似乎已模式化的思维并不一定要照搬到前端的开发场景中。

@IT技术精研院:优秀的框架设计,应该为整个流程做减法,而不是粗糙的叠加。code less, do more. 像JQuery这样优秀的框架设计应该被融入到下一代的HTTP规范中。

@一斯追求:JQuery确实是很强大的嘛,几十k的文件大小有那么强悍的功能实属不易,操作网页元素的时候省去了不少麻烦,尤其是实现Ajax效果的时候,有了它就是有了把利器啊,不然手写代码去建对象,自己post去请求还不把人给累死啊,还有JSon,我也夸一下,给力!

@程序猿小卡:1、jQuery神奇的多功能着实让人无力吐槽,用着挺爽的,但对于代码维护来说是个噩梦(jQuery的源码里到处是这种类型的多功能方法,印象中有个方法有7个参赛数);2、关于庞大的jQuery,已经到了压缩后还有97k的程度了?!现在已经可以做到按需模块拆分了(好吧我承认我其实没用过),所以这个问题应该没那么严重。

@超然台上仙认为:感觉jQuery弄得这么大很多都是在考虑兼容性的问题,如果能够使用最新的API肯定也不会这么复杂。另外jQuery的API确实挺好用啊,至少很容易懂。

@zegia_林并不赞成其观点:为了一个小功能而去引用庞大的jquery显然不值得,各种类库有各自的适用场景吧。

@根正苗红葫芦藤:噗,高端黑啊,无力吐槽ing。用框架主要是为了代码结构稳定、维护容易、知识互用性强。前端们太常写寿命不超过一年的玩意啦,偶等企业开发都是一用很多年2的,不好处处自造輪子的。

最后,用@郑银辉-小哥的话总结:每个框架都有其适合的场景,JQ功能丰富,文档详尽,易学易用,同时有众多插件,对于多数入门级开发者而言,的确是“必不可少”的。当然,局限性也非常明显,毕竟JQ是06年开发的,前端领域已经发生了很大的变化,而JQ的主干并没有变化,只是枝叶繁茂了点而已。

此外,网络上也不少兄弟高喊JQuery如何不好看的,然后再造个小JQuery,代码原封不动copy改个名就觉得革命面貌焕然一新的那种。

对此,各位网友你们是怎么看待的呢,欢迎与我们讨论。

更多精彩内容,欢迎@研发频道微博参与互动。

Facebook发布PlanOut 开源部分A/B测试源码 一周消息树:6款Java转C#的最佳工具、Web开发者必备的9个软技能 对话“宙斯杯”获奖代表:依托京东云平台,打造精品电商CRM 关于微软开源WinJS,开发者必须知道的5件事 告别丑陋banner条,InMobi联合开发者尝试原生广告 免费游戏开发经验谈:第一印象很重要 《近匠》小旭音乐:游戏音乐金牌匠人的练级之路 日600亿消息,月4.65亿用户——WhatsApp的Erlang世界 一周热点:Cloudera新一轮融资总额已达9亿美元 【走近院士】李未:实现云服务的有效方法是群体软件工程 大神云集 大型创客聚会2014深圳Maker Faire盛大开幕 直击Maker Faire,将精彩“一网打尽”! 电池革命:超级充电器来袭,30秒为手机充满电 风雨13载,Windows XP今起正式退役 向Facebook看齐,Twitter收购Android屏幕待机应用开发商Cover 绝对的超现实!Jaunt打造360°全景VR电影 Unite China 2014课程解析:行业解决方案专场免费开放 Manhattan,Twitter规模的实时、多租户分布式数据库 Ceph浅析(中):结构、工作原理及流程 孙元浩:基于Spark引擎的高速内存分析和挖掘工具应用 腾讯私有云背后的团队,品高要做企业云计算的产品经理 撼动企业应用架构的十大技术趋势 Airbnb的管理之道:产品设计的点评策略与技巧 Windows 8.1 Update 1的下载地址和八点须知 《近匠》棱镜:手游渠道SDK平台的技术历程 OpenSSL究竟为何物,为何它的影响力如此之大? Redis大冒险:如何跳出SQL这个坑 【走近院士】张尧学:基于透明计算的云操作系统 微软转型之路:从Build 2014开始 大势所趋 HTML5成Web开发者最关心的技术 从火种到核心,浅析Hadoop大数据用户的演变 to:asia(),hushuo,seesea,inside1以及各位大虾,可以再给小女子讲一下指针的问题吗? win 2k pro 如何查看有哪些人联着我的机子?就跟98的网络资源管理中的一样。 十万火急!!TADOTable的lookup类型的新字段不能用于Sort吗?搞定了立即给分!! CListCtrl控件問題 怎么我在VC++6.0中的窗口属性中设一些属性好像没用一样??? 三台机器不用HUB如何实现互相访问? 请教通讯的问题 用accsee数据库 怎么不显示登陆的用户密码框? c,如何得到一个文件名中指定位置指定长度的字符串?? 服务器是否打开支持FileSystemObject对象的权限 我的数据表列宽为7个字符 , 而我只输入3个字符 , 当我输入4个字符后 , 再次运行程序却看不到所有数据 从新做人 求救:在NT Server下调用GetVolumeInformationA取分区序列号,返回结果为负数!!!怎么回事啊? 正式到新公司上班,送300分,感谢在我最困难的时候在“软件工程”版给过我帮助的朋友们!! 请问斑竹及所有人,怎样得到QuickReport的总页数? Websphere3.5的一个BUG.希望有人反对.多谢.. 什么是DAMAP的对象 哪里有 winpcap 或 libnet 及其他网络编程辅助包下载? 谁能提供PSP文档?最好是Humphrey的那本书! 代码出现bebug.请大家帮我找!!!! TO:net_lover(孟子E章),详情请入内! 有谁用过DEV express系列的dxdbgrid??它是如何把一个文本文件txt读到dxdbgrid1.columns[i]的picklist中去,作为picklist的内容的啊? 我想在Linux下做数据库开发,用什么数据好? 我的pws可能出了问题,那位高手能解决一下 关于控制winamp 各位同行你们有这个的源程序吗(Cacio DT-900数据采集器) Html Help 制作方法 luodi(无知者无畏), 请进: 我用shell(app.path+"\mdac.exe"),来调用微软数据访问控件2.0,提示出错:命令行语法错误, 求救:如何将剪贴板中的内容放到image控件上 how to get the sytax of customer user object ? jsp中的打印问题 pb中有没有类似iif之类的语句 大虾们,怎样将String 类型转换成float 请问在及时战略中,怎么实现寻路的 我想在状态栏显示时间,有没有属性可以让时间自动变化,而不用其它辅助控件? 不会没人愿意回答这个问题吧,都贴第二次了!! 吃西瓜 我在注冊自創構件時總是出錯,請各位幫忙解決. 关于ado连接sybase的问题,紧急求救!!!(我的最高分了) 29分:flexcell定位 请教一下,关于Delphi COM类型库的问题 大家来谈谈申奥成功对我们的影响吧,我想知道怎么利用这个契机大赚一笔 各位谁喜欢“后街男孩”??喜欢的给分! 请问在DBGRID中改变当前选定行的颜色? 我想在DataSourceDataChange()中实现。 客户端怎么与服务器端通信 为什么我在窗口里修改了一个记录的图片字段后,在数据窗口内不能正常显示? 我要在RedLinux71下安装WEB服务器软件,请部如何做? 如何计算某年某月的天数和每天对应的星期 help!!! 为什么我的D6在编译时出现错误:“Fatal Error QuickRpt.pas(23):File not found:'Dsgnintf.dcu' 帝国时代之农民搞笑版……哈哈 99又7分之1乘以99简算 99x99+99 用简便方法怎样算 小学数学16*25+15*2简便算法 101乘以99乘以999加999 急... 99x99十199要求用简便方法计算, 计算2008又2007分之1*2008分之2007 101乘以99/100 99x99十199简便方法怎么计算. 求底面半径为5厘米,侧面展开为正方形的圆柱体的侧面积、表面积和体积. 如何简便算49+49×49,意思,为什么这么算偶承认偶童鞋没文化.....(没文化真可怕)数学很伟大 西游记中8至几回是总写唐僧师徒历经九九八十一难? 一个圆柱体的底面直径是4厘米,它的侧面积是( )表面积是( ),体积是(一个圆柱体的底面直径是4厘米,它的侧面积是( )表面积是( ),体积是( ) 简便计算:41×49-49 《西游记》为什么唐僧师徒要经过九九八十一难才能取回真经?这八十一难意味着什么? 一个圆柱体高10厘米,底面半径5分米,表面积是多少? 3.41-1.97+0.49-1.03的简便计算 西游记九九八十一难都有什么? 一个圆柱体底面半径是1分米,高是20厘米,它的体积是 表面积是 41*101怎样简便就怎样算 求西游记中孙悟空他们经历的九九八十一难的名称劫难的名称和妖怪的名称(每个劫难)还有其下场,相当于把西游记的九九八十一难的浓缩成八十一小故事 开头 过程(经历) 结局(+妖怪 一个圆柱体的底面半径是1分米,他等侧面积是( )平方分米,表面积是( )平方分米,体积是( ) 41×101=? 请简便计算 1,19,199,1999,2099,19999怎么念? 输入圆柱体的底面半径和高,求圆柱体的表面积和体积.请编写程序, 199乘49加199乘50加199怎么简便运算? 1+1/1+2+1/1+2+3+……+1/1+2+3+……+2004+2005如何计算 编写程序,调用函数求一个圆柱体的表面积和体积.用c语言编写.谢谢啦. 72x0.81+10.4简便运算 计算(2/1+3/1+...+2005/1)x(l+2\1+2005\1)x(2\1+3\1+...+2004\1) 从键盘输入半径和高输出圆柱体的底面积和体积C语言 一个数加上13/20得和,再减去3/5,差是3/20,这个数是多少 (5x一3)(5x一3)=4分之81,x=? 计算:1+2+3+…+2002+2003+2002+…+3+2+1=? 5与4的积被一个数除,商是0.5,个数是多少? √81+5x³=-31 这个怎么算呢. 从1/1*2+1/2*3+.+1/2002*2003怎么计算 1/2与2/3的积减去1/6,所得的差去除5/12,商是多少? 2.5x(40十4十0.4)简便计算? 计算: 1÷(1×2)+1÷(2×3)+… +1÷(2002×2003),请高手请点,谢谢 分解质因数 27= 30= 54= 递等式计算:(能巧算的要巧算) 2.8*0.9 5.4*10.1 计算1+2+3+...+2002+2003+2002+...+3+2+1 54分解质因数 递等式计算(能简便计算的要简便计算) 1、10.7-2.9×0.2×0.5 简算 2004+200.4+20.04+2.004 54怎么分解质因数 20-19+18-17...+4-3+2-1递等式简便方法 2004+200.4+20.04+2.004等于多少? 30分解质因数 简便计算 (1-1/2012)+(2-2012*2)+(3-1/2012*3)+...(2012-1/2012*2012) 9.05*2.01 怎样简算 把30分解质因数?具体数字 999x999怎么简便方法计算呀 递等式计算,用简便算法.要用乘法运算定律、加法运算定律、除法运算性质、减法运算性质.快,好的重分酬谢!(4.2-0.4×6)÷4== (15300÷600+67.5)×180==10500÷(10500÷25×1.25)==[(5.84- 99乘24简便脱式计 288十199=?(用简便方法计算) 125*1.25*0.125*8*.08*0.008*4*0.4*0.004*25*0.25*2.5=?(用简便算法计算).08改成0.8 负九十九又九十九分之九十八乘一百九十八 简便计算 99X99十199怎简便计算 桌上摆了两盘奶糖,共50块,如果从甲盘子里面拿走5块放到乙盘子里,那么两个盘子的奶糖一样多,原来两个盘子里各有多少奶糖.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn