高效率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 相关文章推荐
10个基于浏览器的JavaScript调试工具分享
Feb 07 Javascript
JavaScript 验证码的实例代码(附效果图)
Mar 22 Javascript
Extjs4中Form的使用之本地hiddenfield
Nov 26 Javascript
js 判断浏览器使用的语言示例代码
Mar 22 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
jquery.tableSort.js表格排序插件使用方法详解
Aug 12 Javascript
vue webuploader 文件上传组件开发
Sep 23 Javascript
基于Webpack4和React hooks搭建项目的方法
Feb 05 Javascript
Vue数据绑定简析小结
May 07 Javascript
vue eslint简要配置教程详解
Jul 26 Javascript
layui自己添加图片按钮并点击跳转页面的例子
Sep 14 Javascript
JavaScript函数重载操作实例浅析
May 02 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
js对象的比较
2011/02/26 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
python Django框架实现自定义表单提交
2016/03/25 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
通过python3实现投票功能代码实例
2019/09/26 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
python 实现汉诺塔游戏
2020/11/28 Python
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
优秀学生事迹材料
2014/02/08 职场文书
上班看电影检讨书
2014/02/12 职场文书
金融管理应届生求职信
2014/02/20 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
演讲稿的写法
2014/05/19 职场文书
公司合作意向书范文
2014/07/30 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
中秋晚会活动方案
2014/08/31 职场文书