使用JavaScript库还是自己写代码?


Posted in Javascript onJanuary 28, 2010

你必须做出决定以这两种方法中的哪一种来写你的JavaScript,为了帮助您作出明智的决定哪个更适合你,我们将对比一下这两种方法的一些优劣。

在过去使用JavaScript库的一个缺点是,库往往相当大,也许包括不少在你的个人网页中实际是不怎么使用的代码。或许,编写自己的代码可以被认为是最能完全满足你真正需求的方法,而且没有其他比这更有效的方法了。但在引入Google的一个通用仓库后,每个人都可用通过链接使用比较流行的JavaScript库的时候,就否定了这种说法,因为如果你链接到的是Google的库副本,而不是使用自己的副本,这样大量访客将会有已经缓冲在他们的浏览器上的库,实际须下载的只是你页面的一部分代码而已。这样做可以使得使用它比自己做的库更快。

自己编写代码而非依赖于库的一个优点是,你不用学太多东西。要能够自写JavaScript,你只需要学习JavaScript就可以了。而要能够使用库则需要同时学习JavaScript以及这个库。你可能可以做到像这样的事情,只学习库而还没有学习JavaScript,但就能够利用的最好方式来使用这个库,那你将需要比那些只是使用JavaScript来编写自己代码的典型的人要对JavaScript有更多的了解。

使用库的优势在于,库已处理了你需要运行的90%的操作,这意味着你只需要编写的余下10%。在有大量的代码编写的时候,这可以节省你编写代码的时间。而在除了编写代码,还需要对其进行测试的时候,它就可能会或可能不会节省时间了,除非你深入了解如何让你所选的库在测试时间做应该做的事,使用库最终可能会比你自己写代码大大延长了时间。

另一件你要考虑的事是,在一个给定的库中包含了多少代码是你实现你想达到的目标将实际需要使用到的,以及库实际上是否包括了所有你想要的操作。如果你不能找到一个有你所需的一切功能的库,那么你就需要自己编写其余的代码或尝试引入第二个包括了缺少的功能的库。取决于库是如何工作,将可能可以或可能不可以在相同的网页中同时使用两个库。

事实上在你考虑使用库之前,你需要自己写多少JavaScript代码也会影响你的决定。如果你已经自己写了能执行所有你需要的不同函数的处理,则有可能打消你选用一个同样提供所有这些相同功能但实现方式不同的库的想法。鉴于这些首先写这些库的人一般都是对JavaScript具有深入了解的人,你必须承认的一个合理的可能性是,一个提供这些功能的库比你自己写的更有效率(除非你也有一个JavaScript专家)。

你要添加到网页中的JavaScript处理是什么样的类型,也将影响是否合适使用库。如果你只把很小的特效到你的网页,只需要几行JavaScript代码,那么比起自写所有的代码,用一个库可能会导致你不得不编写更多的代码去作为实现库工作方式的接口。当然,反过来同样适应,如果你要添加到你的网页中的处理是数量相当大的且与你选用的库的功能类型密切匹配的,那么都可以让库为你处理。

选择一个功能是密切符合你想要使用到你的网页中的库,并很好的理解JavaScript以及这个库,那就可以快速和容易加入所有你想要的功能,以这种现代的不唐突的方式可能是最适合你的方法。另外,如果你已经写了多年的JavaScript,而且已经有你的能执行大多数你不断要求的功能的代码库,那你就可以不必选择和学习任何一个库就达到相当的效果。

个人总结

个人觉得,Stephen Chapman的这篇文章很好的对比了JavaScript库和自写代码的优缺点,其实,如果能够在使用JavaScript库的时候,充分的利用它,去实现它应有的价值,那JavaScript库将会是一种很好的工具,一种创造富客户端以及给用户带来良好体验的一种工具,而非成为加载页面时的一种额外的负担。而对于喜欢自写代码的人,我觉得也有必要将一些功能,有如DOM操作和事件处理封装起来,毕竟原生的JavaScript在不同的浏览器存在着较多兼容问题和效率问题(可参考 阿当的《JavaScript分层概念》)。同时我还觉得,如果在使用一个流行的JavaScript库(如jQuery、YUI、Ext JS)的时候,能去了解一下这些库的实现机制,这样才能更好的驾驭这些库!

中文由维奇翻译,如有转载请注明出处,翻译如有错漏欢迎留言指出

Javascript 相关文章推荐
Prototype Date对象 学习
Jul 12 Javascript
jQuery 幻灯片插件(带缩略图功能)
Jan 24 Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
浅谈setTimeout 与 setInterval
Jun 23 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
May 09 Javascript
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
Echarts实现单条折线可拖拽效果
Dec 19 Javascript
vue实现选中效果
Oct 07 Javascript
js或css实现滚动广告的几种方案
Jan 28 #Javascript
jquery中的sortable排序之后的保存状态的解决方法
Jan 28 #Javascript
javascript面向对象的方式实现的弹出层效果代码
Jan 28 #Javascript
jquery 常用操作方法
Jan 28 #Javascript
jquery 经典动画菜单效果代码
Jan 26 #Javascript
使用JQuery进行跨域请求
Jan 25 #Javascript
javascript 的Document属性和方法集合
Jan 25 #Javascript
You might like
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
Django添加feeds功能的示例
2018/08/07 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
python二维图制作的实例代码
2020/12/03 Python
银行毕业实习自我鉴定
2013/09/19 职场文书
酒店管理专业学生求职信
2013/09/27 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
七年级语文教学反思
2016/03/03 职场文书
Java中的随机数Random
2022/03/17 Java/Android