高效率JavaScript编写技巧整理


Posted in Javascript onAugust 23, 2013

最近在编写一个JavaScript框架,发现有很多细节注意得不够,担心长时间积累会导致框架实际应用的时候出现严重的效率问题。于是开始关注JavaScript提高效率的一些技巧,在这里分享给大家。

1.JavaScript是唯一一个对代码体积要求越小越好的语言,因此我们可以通过一些工具来精简和压缩JavaScript代码,如JSMin、Packer、YUICompressor等。这些工具会将局部变量的名字替换成很短的变量名,例如将parseFloat()替换成a()。因此我们在编写JavaScript代码时,应将每一个全局变量都映射到一个局部变量,如var parseFloat = parseFloat;

2.通过JSLint来检测你编写的JavaScript,可以发现里面隐藏的很多问题。JSLint是一个JavaScript验证工具(非开源),可以扫描JavaScript源代码来查找问题。如果JSLint发现一 个问题,JSLint就会显示描述这个问题的消息,并指出错误在源代码中的大致位置。

3.我们在写JavaScript的时候经常需要遍历一个数组,代码如下:

for (var i=0;i<array.length;i++){ 
//do something 
}

JavaScript的成员变量是运行时确定的,这就导致每一次循环都需要查找数组length属性,因此我们可以增加一个变量来存储数组大小:
var l = array.length; 
for (var i=0;i<l;i++){ 
//do something 
}

这样看起来已经优化得不错了,但实际上我们可以做得更好:
var i=array.length; 
while(i--){ 
//do something 
}

这是因为这两行代码转换成汇编时,while语句所需的指令更少,在这里就不展开说明了,大家有兴趣可以去研究下汇编。

4.由于JavaScript中任何人都可以修改或添加Object.prototype中的属性,因此我们在遍历一个对象的属性时,应先使用hasOwnProperty进行判断,避免遍历整个原型链,影响效率。如:

for (var key in obj) { 
if (obj.hasOwnProperty(key)) { 
//do something 
} 
}

5.在使用undefined的时候先定义一个局部变量undefined
var checkVal = function(val) { 
var undefined; 
return val !== undefined; 
};

上述代码中,如果没有提前定义局部变量,直接使用全局变量undefined进行判断,如果第三方在别的地方定义了一个全局变量undefined=3将导致结果错误。

6.在将一个非字符串类型的变量转换成字符串类型时,可以直接使用

var str = (i + "").replace(...);

这个地方如果使用String(i)会慢很多。

7.定义数组的时候如果不需要使用数组类的排序等方法,只是进行一般的赋值和访问,应该直接写

var array = {};

而不是
var array = new Array();

否则这就和定义一个数字变量时写var i = new Number(1)一样没有意义

8.使用jQuery时,对同一个对象执行多个函数尽量放在同一行代码里,例如:

$("p.neat").addClass("ohmy").show("slow");

而不是
$("p.neat").addClass("ohmy"); 
$("p.neat").show("slow");

其余的技巧还有使用DocumentFragment优化多次append,使用firstChild和nextSibling代替childNodes遍历dom元素等。
具体大家可以参考这篇博客:http://www.nowamagic.net/librarys/veda/detail/363
本文还参考了这篇文章:http://www.cnblogs.com/justinw/archive/2009/12/07/1618500.html
Javascript 相关文章推荐
两个JavaScript jsFiddle JSBin在线调试器
Mar 14 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
jQuery中使用animate自定义动画的方法
May 29 Javascript
jQuery动态追加页面数据以及事件委托详解
May 06 jQuery
Vue组件选项props实例详解
Aug 18 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
js正则相关知识点专题
May 10 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 jQuery
Vue动态生成表格的行和列
Jul 18 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
处理及遍历XML文档DOM元素属性及方法整理
Aug 23 #Javascript
JavaScript语言核心数据类型和变量使用介绍
Aug 23 #Javascript
Javascript表格翻页效果实现思路及代码
Aug 23 #Javascript
jquery $.each() 使用小探
Aug 23 #Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
Aug 23 #Javascript
checkbox使用示例
Aug 23 #Javascript
js为数字添加逗号并格式化数字的代码
Aug 23 #Javascript
You might like
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
深入浅析python 中的匿名函数
2018/05/21 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
详解Python高阶函数
2020/08/15 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
完整版商业计划书
2014/09/15 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python