优化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 相关文章推荐
用ADODB.Stream转换
Jan 22 Javascript
实现连缀调用的map方法(prototype)
Aug 05 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
May 19 Javascript
JavaScript中的isXX系列是否继续使用的分析
Apr 16 Javascript
基于jQuery实现的水平和垂直居中的div窗口
Aug 08 Javascript
JavaScript+canvas实现七色板效果实例
Feb 18 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
Aug 05 Javascript
js获取当前页的URL与window.location.href简单方法
Feb 13 Javascript
Node.js获取前端ajax提交的request信息
Feb 20 Javascript
vue项目或网页上实现文字转换成语音播放功能
Jun 09 Javascript
js实现页面导航层级指示效果
Aug 25 Javascript
使用Typescript开发微信小程序的步骤详解
Jan 12 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递归实现汉诺塔问题的方法示例
2017/11/25 PHP
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
js回调函数仿360开机
2019/12/26 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
详解Python中heapq模块的用法
2016/06/28 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
大三学生入党思想汇报
2014/01/02 职场文书
四年级下册教学反思
2014/02/01 职场文书
家长会标语
2014/06/24 职场文书
刑事起诉书范文
2015/05/19 职场文书
色戒观后感
2015/06/12 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang