编写高性能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 原因:代码整体结构是执行速度的决定因素之一.代码量少不一定运行速度快,代码量多不一定运行速度慢.性能损失与组织代码和具体 ...
随机推荐
- 双向绑定 TwoWay MVVM
1前台代码 <Grid> <StackPanel > <Grid x:Name="gridOne"> <Grid.Resources> ...
- 【python】按行切分文本文件
python脚本利用shell命令来实现文本的操作, 这些命令大大减少了我们的代码量. 比如按行切分文件并返回切分后得到的文件列表,可以利用内建的split命令进行切分.为了返回得到的文件列表名,可以 ...
- Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍
原文 Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍 前言 不同于iOS,Xamarin 在Visual Studio中针对Android,可以直接设 ...
- AspNetPager分页实际应用
---恢复内容开始--- 首先,这个分页是快速开发的一种,弊端就是一次查询数据库全部,然后分页显示. 注意: 1,最好绑定的数据是一个list格式! 1首先打开 http://www.webdiyer ...
- 判断DAG图
拓扑排序O(E), bellman O(VE) , 使用邻接表的dfs O(V+E) ,floyd O(N*N*N) bellman算法只能判断是否存在负环. 所以可以先把权值全部设为-1 #in ...
- libyuv编
下载代码(墙): git clone http://git.chromium.org/external/libyuv.git 用 make 编译(linux.mingw.cygwin): mak ...
- Eclipse+Maven创建webapp项目<一> (转)
Eclipse+Maven创建webapp项目<一> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...
- jQuery来源学习笔记:扩展的实用功能
// 扩展的实用功能 jQuery.extend({ // http://www.w3school.com.cn/jquery/core_noconflict.asp // 释放$的 jQuery 控 ...
- Linux安装jdk 8和环境变量配置
1.下载jdk 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.将刚刚 ...
- Codeforces Round #258 (Div. 2) B. Sort the Array
题目链接:http://codeforces.com/contest/451/problem/B 思路:首先找下降段的个数,假设下降段是大于等于2的,那么就直接输出no,假设下降段的个数为1,那么就把 ...