优化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 相关文章推荐
IE浏览器兼容Firefox的JS脚本的代码
Oct 23 Javascript
js 提交和设置表单的值
Dec 19 Javascript
Jquery 绑定时间实现代码
May 03 Javascript
对frameset、frame、iframe的js操作示例代码
Aug 16 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
Jan 15 Javascript
JavaScript检测鼠标移动方向的方法
May 22 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
js中对函数设置默认参数值的3种方法
Oct 23 Javascript
Perl Substr()函数及函数的应用
Dec 16 Javascript
jQuery实现的超简单点赞效果实例分析
Dec 31 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
Apr 06 Javascript
使用Canvas绘制一个游戏人物属性图
Mar 25 Javascript
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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
以文本方式上传二进制文件的PHP程序
2006/10/09 PHP
个人站长制做网页常用的php代码
2007/03/03 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
用Python进行基础的函数式编程的教程
2015/03/31 Python
Python AES加密实例解析
2018/01/18 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
python检测IP地址变化并触发事件
2018/12/26 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
super关键字的用法
2012/04/10 面试题
工程力学硕士生的自我评价范文
2013/11/16 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
小学生通知书评语
2014/12/31 职场文书
整改通知书
2015/04/20 职场文书
抢劫罪辩护词
2015/05/21 职场文书
超市店长竞聘书
2015/09/15 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB