使用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 相关文章推荐
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
Nov 14 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
Jan 25 Javascript
javascript实现按回车键切换焦点
Feb 09 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
Aug 19 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
Jan 04 Javascript
浅谈angular2 组件的生命周期钩子
Aug 12 Javascript
react-native使用react-navigation进行页面跳转导航的示例
Sep 07 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
javascript实现超好看的3D烟花特效
Jan 01 Javascript
javascript实现简单搜索功能
Mar 26 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
Apr 08 Javascript
JS求解两数之和算法详解
Apr 28 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
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php对称加密算法示例
2014/05/07 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
javascript内存分配原理实例分析
2017/04/10 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
python实现解数独程序代码
2017/04/12 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
django 中QuerySet特性功能详解
2019/07/25 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
Python随机数函数代码实例解析
2020/02/09 Python
python 操作excel表格的方法
2020/12/05 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
优秀毕业生求职信
2014/06/05 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
工程竣工验收申请报告
2015/05/15 职场文书