高效率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 相关文章推荐
js 动态修改css文件用到了cssRule
Aug 20 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
JS正则表达式验证中文字符
May 08 Javascript
详解微信小程序 相对定位和绝对定位
May 11 Javascript
利用JS制作万年历的方法
Aug 16 Javascript
Mac下安装vue
Apr 11 Javascript
Vue实现点击显示不同图片的效果
Aug 10 Javascript
小程序跨页面交互的作用与方法详解
Jan 07 Javascript
原生js实现贪吃蛇游戏
Oct 26 Javascript
利用 JavaScript 构建命令行应用
Nov 17 Javascript
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 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
第六章 php目录与文件操作
2011/12/30 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Django密码存储策略分析
2020/01/09 Python
Python如何合并多个字典或映射
2020/07/24 Python
新电JAVA笔试题目
2014/08/31 面试题
晨会主持词
2014/03/17 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
妈妈活动方案
2014/08/15 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
商铺门面租房协议书
2014/10/21 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python