使用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 相关文章推荐
在浏览器窗口上添加遮罩层的方法
Nov 12 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
May 08 Javascript
javascript创建数组之联合数组的使用方法示例
Dec 26 Javascript
javascript修改IMG标签的src问题
Mar 28 Javascript
Vue.js每天必学之表单控件绑定
Sep 05 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
JavaSctit 利用FileReader和滤镜上传图片预览功能
Sep 05 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
Jun 03 Javascript
layui导出所有数据的例子
Sep 10 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
支付宝接口开发集成支付环境小结
2015/03/17 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
php实现图片压缩处理
2020/09/09 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
Python中List.count()方法的使用教程
2015/05/20 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
python入门之井字棋小游戏
2020/03/05 Python
python学生管理系统的实现
2020/04/05 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
中秋节超市促销方案
2014/01/30 职场文书
安全教育实施方案
2014/03/02 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
学生实习证明范文
2014/09/28 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
Navicat for MySQL的使用教程详解
2021/05/27 MySQL