优化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异步请求实例代码
Jun 21 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
Jul 08 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 Javascript
jquery实现省市select下拉框的替换(示例代码)
Feb 22 Javascript
js实现无限级树形导航列表效果代码
Sep 23 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
Javascript如何判断数据类型和数组类型
Jun 22 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
React简单介绍
May 24 Javascript
node.js中fs文件系统模块的使用方法实例详解
Feb 13 Javascript
JS一次前端面试经历记录
Mar 19 Javascript
原生JavaScript实现幻灯片效果
Feb 19 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
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
python 同时读取多个文件的例子
2019/07/16 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
历史学专业毕业生求职信
2013/09/27 职场文书
出纳员岗位责任制
2014/02/11 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
环保建议书500字
2014/05/14 职场文书
音乐会主持人开场白
2015/05/28 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
Golang的继承模拟实例
2021/06/30 Golang