高效率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 版本自动生成文章摘要
Jul 23 Javascript
关于JAVASCRIPT urldecode URL解码的问题
Jan 08 Javascript
基于jquery实现发送文章到手机的代码
Dec 26 Javascript
原生JavaScript实现滚动条效果
Mar 24 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
Jan 18 Javascript
AngularJS实现的回到顶部指令功能实例
May 17 Javascript
详解Angular Reactive Form 表单验证
Jul 06 Javascript
基于bootstrap实现多个下拉框同时搜索功能
Jul 19 Javascript
Vue实现左右菜单联动实现代码
Aug 12 Javascript
layui异步加载table表中某一列数据的例子
Sep 16 Javascript
浅谈layui里的上传控件问题
Sep 26 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 Javascript
处理及遍历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
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
php中二分法查找算法实例分析
2016/09/22 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
javascript操作数组详解
2014/12/17 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
js的对象与函数详解
2019/01/21 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
Python 递归函数详解及实例
2016/12/27 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
python小白切忌乱用表达式
2020/05/29 Python
Pycharm github配置实现过程图解
2020/10/13 Python
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
2014年小学教师工作自我评价
2014/09/22 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
三方股份合作协议书
2014/10/13 职场文书
大学生年度个人总结
2015/02/15 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
工资证明范本
2015/06/12 职场文书
签字仪式主持词
2015/07/03 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android