编写高性能Javascript
编写高性能Javascript
多年来,Javascript一直在web应用开发中占据重要的地位,但是很多开发者往往忽视一些性能方面的知识,特别是随着计算机硬件的不断升级,开发者越发觉得Javascript性能优化的好不好对网页的执行效率影响不明显。但在某些情况下,不优化的Javascript代码必然会影响用户的体验。因此,即使在当前硬件性能已经大大提升的时代,在编写Javascript代码时,若能遵循Javascript规范和注意一些性能方面的知识,对于提升代码的可维护性和优化性能将大有好处。
下面给出编写高性能的Javascript代码的若干建议:
1、尽量不要用for-in 循环去访问数组,建议用 for 循环进行循环:

1 function foo1() {
2 var i, b, c=[1,2,3];
3 for (i in c) {
4 b = c[i];
5 if(b === "2")
6 return b;
7 }
8 }
9 //性能更好
10 function foo2() {
11 var i, b, c=[1,2,3];
12 for (i=0;i<c.length;i++) {
13 b = c[i];
14 if(b === "2")
15 return b;
16 }
17
18 }

2、建议将对象进行缓存处理,特别是DOM访问是比较消耗资源的:

1 //c.length没有缓存,每次迭代都要计算一下数组的长度
2 function foo1() {
3 var i, b, c=[1,2,3];
4 for (i=0;i<c.length;i++) {
5 b = c[i];
6 if(b === "2")
7 return b;
8 }
9 }
10 //性能更好,第一次将数组的长度缓存到变量l中,第二次及后续的循环无需计算数组长度
11 function foo2() {
12 var i, b, c=[1,2,3],l;
13 for (i=0,l=c.length;i<l;i++) {
14 b = c[i];
15 if(b === "2")
16 return b;
17 }
18 }


1 //document.getElementById('info')没有缓存,每次都要遍历DOM
2 function foo1() {
3 var e;
4 document.getElementById('info').innerHTML="call 1";
5 document.getElementById('info').innerHTML="call 2";
6
7 }
8 //性能更好,第二次无需访问DOM
9 function foo2() {
10 var e=document.getElementById('info');
11 e.innerHTML="call 1";
12 e.innerHTML="call 2";
13 }

3、建议不要在函数内进行过深的嵌套判断:

//函数内嵌套判断语句过多
function foo1() {
var r={};
r.data={};
r.data.myProp=2;
if (r) {
if (r.data) {
if (r.data.myProp) {
//逻辑处理
}
else {
//逻辑处理
}
}
}
}
//性能更好
function foo2() {
var r={};
r.data={};
r.data.myProp=2;
if (!r) return;
if (!r.data) return;
if (r.data.myProp) {
//逻辑处理
} else {
//逻辑处理
}
}

4、避免循环引用,防止内存泄漏:

1 //需要jQuery
2 function foo1(e,d) {
3 $(e).on("click", function() {
4 //对d进行逻辑处理
5 cbk(d);
6 }
7 });
8 }
9
10 //打破循环!
11 function foo2(e, d) {
12 $(e).on("click", cbk(d));
13 }
14 function cbk (d) {
15 //逻辑处理
16 }

5、建议避免在函数内返回一个未声明的变量,会污染外部变量:
1 function foo(a, b) {
2 r = a + b;
3 return r; //r未声明,则创建了一个全局变量
4 }
6、var声明变量,建议写在多行

1 //自己测试结果是foo1快,但也有一种观点是foo2快
2 function foo1() {
3 var c = 1;
4 var sum=0;
5 var d = 0;
6 var e;
7 }
8
9 function foo2() {
10 var c = 1,sum=0, d = 0, e;
11 }

说明:其实单个函数时间上差别较小,这里采用循环多次用累计时间进行性能对比,不同PC配置或者浏览器测试结果可能存在差异。
出处:http://www.cnblogs.com/isaboy/
编写高性能Javascript的更多相关文章
- 编写高性能Javascript代码的若干建议
多年来,Javascript一直在web应用开发中占据重要的地位,但是很多开发者往往忽视一些性能方面的知识,特别是随着计算机硬件的不断升级,开发者越发觉得Javascript性能优化的好不好对网页的执 ...
- 【JavaScript】【译】编写高性能JavaScript
英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执 ...
- 编写高性能JavaScript【转】
英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇
<高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- 高性能JavaScript(您值得一看)
众所周知浏览器是使用单进程处理UI更新和JavaScript运行等多个任务的,而同一时间只能有一个任务被执行,如此说来,JavaScript运行了多长时间就意味着用户得等待浏览器响应需要花多久时间. ...
- 【读书笔记】读《高性能JavaScript》
这本<高性能JavaScript>讲述了有关JavaScript性能优化的方方面面,主要围绕以下几个方面: 1> 加载顺序 2> 数据访问(如怎样的数据类型访问最快,怎样的作用 ...
- 《高性能javascript》学习总结
本文是学习<高性能javascript>(Nichols C. Zakes著)的一些总结,虽然书比较过时,里面的知识点也有很多用不上了,但是毕竟是前人一步步探索过来的,记录着javascr ...
- 《高性能Javascript》 Summary(二)
第四章.算法和流程控制 Algorithms And Flow Control 原因:代码整体结构是执行速度的决定因素之一.代码量少不一定运行速度快,代码量多不一定运行速度慢.性能损失与组织代码和具体 ...
随机推荐
- 【Oracle】物理体系结构
一.ORACLE 物理体系结构 原理结构图 各部分解释: PGA: 私有内存区,仅供当前发起用户使用. 三个作用 用户登录后的session信息会保存在PGA. 运行排序.假设内存不够,orac ...
- [置顶] Codeforces Round #197 (Div. 2)(完全)
http://codeforces.com/contest/339/ 这场正是水题大放送,在家晚上限制,赛后做了虚拟比赛 A,B 乱搞水题 C 我是贪心过的,枚举一下第一个拿的,然后选使差值最小的那个 ...
- uva10465(完全背包,要求装满背包)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&c ...
- MySQL Full Join的实现
MySQL Full Join的实现 由于MySQL不支持FULL JOIN,以下是替代方法 left join + union(可去除反复数据)+ right join select * from ...
- svn 使用(一个)
一个. 安装svn server(操作系统centos) yum install subversion 通过 subversion -v 如果成功安装命令来查看 温馨提示不承担任何subversio ...
- .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介
.NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and ...
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释(转)
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- 关与 Visual.Assist.X.V10.7.1912的Crack破解补丁(vs 番茄插件的key破解方法)
在win7系统下, 我用的是vs2012版本号. Visual Assist沿用了快10年的界面,最终有了更新,变得更加适合Win8 以及 VS2012的主题风格了 ,这也是以后软件的发展趋势,仅仅是 ...
- linux、hdfs、hive、hbase经常使用的命令
linux经常使用命令 pwd 查看当前工作文件夹的绝对路径 cat input.txt 查看input.txt文件的内容 ls 显示当前文件夹下全部的文件及子文件夹 rm recommender-d ...
- strategy pattern