BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

利用现有JavaScript框架还是自主开发​?

| 作者 崔康 关注 1 他的粉丝 发布于 2012年3月4日. 估计阅读时间: 7 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

最近,在知名问答网站知乎上,国内社区的开发人员们讨论了如何在利用现有JavaScript框架还是自己开发工具库中做出正确的选择。

起初,有开发人员在知乎上提出了一个问题——在掌握了JavaScript基础知识和了解了类似jQuery等框架之后,JavaScript 开发人员在哪些情况下,应该选择开发自己的框架(库),而不去使用现有的工具?

​随后,社区的开发者分别给出了自己的看法和观点。

李国新引用了常用的说法“不要重复发明轮子”,并指出其背后的含义:

在已经有某种轮子满足你需求的情况下,你不需要再写一个。所以,使不使用某框架(库)​,在于它是不是满足了你所有的需求。满足了,它就成为了你的轮子,否则,不管它多强大,都不足以成为你的目标轮子。

他以自己在实际开发中遇到的例子现身说法:

我们的产品需要一个手机登陆页,这个页面会有一些交互逻辑,如表单验证,还有一些简单的动画......在非手机产品中,我们大量使用了jQuery,但是在这个小任务中,我不能用jQuery,只能自己再写个简单的小工具库,自行实现如getElementsByClassName、tween动画等功能。为什么呢?我想大家都考虑到流量问题。在这个场景中,jQuery库的体积已经远远超过了要求。所以,不管它的其他功能有多好用,都满足不了对文件体积的要求,那么它在此时就不是目标轮子,你只能自行实现(或者寻找其他更理想的轮子)。

新颖的JavaScript框架(工具库)​总是层出不穷的,从最早的DOM兼容性工具函数,到早几年的Prototype、YUI、jQuery等,到现风头正劲的CommonJS(我指的是实现了CommonJS规范相关的框架)等,从来就没有停歇过。如果哪门语言再也没有新东西出来,那应该是它已经被开发者抛弃了。所以JavaScript框架(库)仍然会不断的冒出来。

写不写重复的轮子?我的答案是,如果是为了提高技能,非常建议你去写。写重复的轮子是提高技能的不二法门。如果不想动手,那去了解已存在的轮子是如何实现的也会受益匪浅。 

陈计节指出了自建框架时需要考虑的一些问题:

对于框架的选用,合适就是好用的。DOM和基础Ajax方面,jQuery、YUI和Moon Tools都不失为很好的选择。但是我们遇到的问题总是错综复杂形式多样的,一个项目往往不能凭借单独的某个框架或者类库去解决。

为何选用已有框架?因为其在对应领域形成了独特而高效的生产力,收到广泛的肯定与认可,使用它们可以大大地缩短开发周期,有许多人在共同研究和使用,有完善的社区支持体系。

何时使用自己的框架,或者说为何要自行构建框架或者类库?当不满足使用已有类库的条件,或者有新的问题出现,已有的框架或者第三方类库无法满足需求时考虑拓展、改进其设计或者自建新的体系。自建时要面对一些基本问题:要解决哪些还未解决的问题?为什么现有类库不能满足需求?能否真正的提高生产力?能否很好地解决浏览器兼容性问题?如何在有限的成本范围内保证代码的优质性?能否提供升级与维护?

对于正处于学习阶段的开发者来说,尝试学习类库的组织方式、编写思路并试图编写自己的类库与框架能够快速而有效的训练开发者对设计模式的理解,显著提高综合编码能力,更全面的认识所面对的问题,更容易促使新的思路出现。

米粽认为jQuery和原生代码有不同的应用场景:

我原先也很喜欢用jQuery,随着自身JavaScript水平的提高,在jQuery和原生JavaScript代码之间我越来越偏向后者,可以按自己的习惯更灵活的编码,不必受jQuery代码风格的限制。另一方面,我的工作逐渐向移动设备转移,在只考虑Webkit系的情况下,选择器、兼容性等都不再是问题,jQuery提供的便利已不明显,性能上又没有针对移动设备的优化,自然不在候选。但事情不是绝对的,去年我和一个JavaScript能力欠佳的同事合作,为了保证开发顺利进行,也使用了jQuery(这个同事现在已经基本可以丢掉jQuery了......)。

其实不管是JavaScript/jQuery,所有开发工具的选择上,我觉得至少可以参考两个因素:能满足开发质量的要求,团队成员学习的成本不影响开发进度。

天祁指出性能问题可能是现有框架的通病:

......之前也写过,后来发现更多是在锻炼自己的代码组织能力和技术能力。当然,有些高手写出来的框架还是很给力的。写个框架给别人用是一件很不容易的事,少有人做得好。

最近准备开发一个Web App,嵌在PhoneGap里面,性能问题很头疼,试了几个框架,反应都很慢,满足不了需求。所以就想自己写,不一定是一个通用框架,至少要满足性能和维护问题。框架为了实现通用和扩展性,通常对性能都做了一些牺牲。

程劭非则针对jQuery的缺陷提出了自己的看法:

确信你不符合以下三点的话,用jQuery不会被鄙视:

  1. 用jQuery的人不是因为喜欢jQuery,而是因为自己根本写不出那样的东西。
  2. ​从来没有用过jQuery之外的框架,说jQuery好是因为自己只懂jQuery。
  3. ​为了jQuery插件而用jQuery,觉得插件省了不少事。

再谈谈我自己为什么不用jQuery:

  1. 我不认同jQuery的设计理念:Write less, Do more。我认为一个框架应该解决的问题有:封装性、复用性、可维护性,少写代码不在此列。
  2. jQuery插件定制性非常差,基本很难定制到符合设计。
  3. jQuery的大部分插件做了错误的抽象,把对象变成了函数。
  4. jQuery的$不是一个好命名,名称没有体现函数功能,而且把选择器、对象包装、Domload事件几个完全不相干的功能变成了一个函数,这是对函数重载的滥用。

​感兴趣的读者可以在知乎的问题中查看更加详细的讨论内容,也欢迎开发人员在此发表自己的看法。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

广告贴 by yuan dai

广告贴,鉴定完毕!
还什么知名问答网站,我怎么没听说过呢?我只知道有个stackoverflow,真不知道有这个。这个可以有?
这么明显的广告贴还是少发吧,看着恶心。

Re: 广告贴 by Jeffrey Zhao

给大师跪了,太强身了。

Re: 广告贴 by 典 刘

知乎是国外著名问答网站 Quora 的 Copy to China 版。知名度还是可以的,很多it圈的名人都在里面活动。它是一个综合性的问答网站,不是只针对IT的。他们现在最愁的就是IT类问题远多于其他问题,应该不会在这种地方发广告贴。

选择对的 by 东喆 王

不重复造轮子其实大家都知道,但是文章也说了自己开发一个会对个人能力有很大提高,所以在项目中如何权衡,能力提高和开发效率,需要技术负责人作出选择。

Re: 广告贴 by Wang Deo

这应该还不至于,知乎的知名度已经很高了好吧。。。。

支持自主开发 by 张 鑫

能开发的还是自己开发好。

《真心不是》Re: 广告贴 by 崔 康

呵呵,谢谢读者对InfoQ的严格要求,但这篇新闻的确是希望能够把一些有价值的东西分享给大家,没有做广告的意思,我没有接受过知乎的任何好处:)
广告贴,鉴定完毕!
还什么知名问答网站,我怎么没听说过呢?我只知道有个stackoverflow,真不知道有这个。这个可以有?
这么明显的广告贴还是少发吧,看着恶心。

Re: 广告贴 by Tao Li

呵呵,这就是你out了,知乎还是相当不错的。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

8 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT