优化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 相关文章推荐
javascript实现文字图片上下滚动的具体实例
Jun 28 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
Mar 03 Javascript
Javascript玩转继承(三)
May 08 Javascript
使用node.js半年来总结的 10 条经验
Aug 18 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
Dec 02 Javascript
jquery中ajax跨域方法实例分析
Dec 18 Javascript
js检查是否关闭浏览器的方法
Aug 02 Javascript
vue数据控制视图源码解析
Mar 28 Javascript
vue element中axios下载文件(后端Python)
May 10 Javascript
浅析JS中NEW的实现原理及重写
Feb 20 Javascript
JavaScript原型链详解
Nov 07 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
php xml-rpc远程调用
2008/12/19 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
Python中__init__和__new__的区别详解
2014/07/09 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
Python中反射和描述器总结
2018/09/23 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
解决Python使用列表副本的问题
2019/12/19 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
应届毕业生自荐书
2014/06/18 职场文书
2015年考研复习计划
2015/01/19 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
民事辩护词范文
2015/05/21 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
Python利用capstone实现反汇编
2022/04/06 Python
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python