优化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.ui.progressbar 中文文档
Nov 26 Javascript
uploadify 3.0 详细使用说明
Jun 18 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
Jan 16 Javascript
jquery实现带二级菜单的导航示例
Apr 28 Javascript
Javascript核心读书有感之词法结构
Feb 01 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
Jun 13 Javascript
vue mint-ui tabbar变组件使用
May 04 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
Puppeteer环境搭建的详细步骤
Sep 21 Javascript
layui监听工具栏的实例(操作列表按钮)
Sep 10 Javascript
JavaScript实现拖拽盒子效果
Feb 06 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
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
HTML Dom与Css控制方法
2010/10/25 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
Python实现图像几何变换
2015/07/06 Python
PyQt5实现拖放功能
2018/04/25 Python
python 整数越界问题详解
2019/06/27 Python
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
优秀团员自我评价范文
2014/04/23 职场文书
小学亲子活动总结
2014/07/01 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL