优化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 相关文章推荐
非常漂亮的JS代码经典广告
Oct 21 Javascript
Jquery调用webService远程访问出错的解决方法
May 21 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
Apr 25 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
Sep 14 Javascript
DeviceOne 让你一见钟情的App快速开发平台
Feb 17 Javascript
jQuery中常用动画效果函数(日常整理)
Sep 17 Javascript
vue多级多选菜单组件开发
Sep 08 Javascript
angularjs中判断ng-repeat是否迭代完的实例
Sep 12 Javascript
node解析修改nginx配置文件操作实例分析
Nov 06 Javascript
Vue+Node实现的商城用户管理功能示例
Dec 23 Javascript
JavaScript中变量提升机制示例详解
Dec 27 Javascript
Vue + iView实现Excel上传功能的完整代码
Jun 22 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为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
PHP Document 代码注释规范
2009/04/13 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
jquery maxlength使用说明
2011/09/09 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
python实现按任意键继续执行程序
2016/12/30 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
解决python报错MemoryError的问题
2018/06/26 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
代办委托书怎么写
2014/08/01 职场文书
八项规定对照检查材料
2014/08/31 职场文书
九华山导游词
2015/02/03 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android