优化javascript的执行效率一些方法总结


Posted in Javascript onDecember 25, 2013

1、在低版本浏览器中(如IE6,IE7等)串联字符串时使用数组的join方法就比使用+号来连接高效很多(如['aaa','bbb','ccc'].join()比'aaa'+'bbb'+'ccc'高效);

2、Array:
pop比shift高效,push比unshift高效。这对于设计二叉堆结构比较重要,将最大或者最小的元素放在数组末尾最好。

3、数字取整最好用移位操作:
1.1 >> 0;

4、使用直接量创建Array和Object:
var a = [];
var o = {};

5、对象层次不要嵌套太多,减少对象的查找:
不要用a.b.c.d.e,这种设计方式获取e对象。

6、键值对应取值,与switch case的比较,键值对应,比switch case高效,各个浏览器均测试过,可以看看 关于这个比较的文章javascript小实验;

7、如果你使用jq的话,还有一个$('xxxx').empty().append('xxxxxxx');和$('xxxxx').html('xxxxx');的比较,结果是$('xxxx').empty().append('xxxxxxx');胜出,文章地址是jQuery小实验;

8、循环
在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以就应该尽量少用。for(;;)和while循环的性能应该说基本(平时使用时)等价。

如果是循环变量递增或递减,不要单独对循环变量赋值,应该在它最后一次读取的时候使用嵌套的++或—操作符。

如果要与数组的长度作比较,应该事先把数组的length属性放入一个局部变量中,减少查询次数。

9、局部变量和全局变量
局部变量的速度要比全局变量的访问速度更快,因为全局变量其实是全局对象的成员,而局部变量是放在函数的栈当中的。

10、不使用Eval
使用eval相当于在运行时再次调用解释引擎对内容进行运行,需要消耗大量时间。这时候使用JavaScript所支持的闭包可以实现函数模版(关于闭包的内容请参考函数式编程的有关内容);

11、字符串连接
如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr;

12、把数字转换成字符串,应用"" + 1,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:

("" +) > String() > .toString() > new String()

这条其实和下面的“直接量”有点类似,尽量使用编译时就能使用的内部操作要比运行时使用的用户操作要快。

String()属于内部函数,所以速度很快,而.toString()要查询原型中的函数,所以速度逊色一些,new String()用于返回一个精确的副本;

13、浮点数转换成整型,这个更容易出错,很多人喜欢使用parseInt(),其实parseInt()是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用Math.floor()或者Math.round()。

14、字符串遍历操作
对字符串进行循环操作,譬如替换、查找,应使用正则表达式,因为本身JavaScript的循环速度就比较慢,而正则表达式的操作是用C写成的语言的API,性能很好;

15、定时器
如果针对的是不断运行的代码,不应该使用setTimeout,而应该是用setInterval。setTimeout每次要重新设置一个定时器;

更新中……,敬请期待!

Javascript 相关文章推荐
基于jquery实现的自动补全功能
Mar 12 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
jquery采用oop模式class类的使用示例
Jan 22 Javascript
简单谈谈json跨域
Mar 13 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
分享JavaScript监听全部Ajax请求事件的方法
Aug 28 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 Javascript
Javascript实现基本运算器
Jul 15 Javascript
vue-cli webpack 引入jquery的方法
Jan 10 jQuery
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
Vue 的 v-model用法实例
Nov 23 Vue.js
jquery fancybox ie6不显示关闭按钮的解决办法
Dec 25 #Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
Dec 25 #Javascript
js 动态加载事件的几种方法总结
Dec 25 #Javascript
js 鼠标移动显示图片的简单实例
Dec 25 #Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 25 #Javascript
制作jquery遮罩层效果导航菜单代码分享
Dec 25 #Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 #Javascript
You might like
php后台程序与Javascript的两种交互方式
2009/10/25 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
Firefox div高度自适应
2009/04/28 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python 用户登录验证的小例子
2013/03/06 Python
详解Python中的正则表达式的用法
2015/04/09 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
Python 文件操作的详解及实例
2017/09/18 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
如何进行有效的自我评价
2013/09/27 职场文书
安全事故检讨书
2014/01/18 职场文书
毕业生学校推荐信范文
2014/05/21 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
你会写请假条吗?
2019/06/26 职场文书