ASP.NET性能优化
2010-10-31 08:59:55 来源:WEB开发网核心提示:4. 书写最正确的代码,容错功能是要付出性能代价的,ASP.NET性能优化(14),4.2 JScript语言本身的优化4.2.1 变量1. 尽量使用局部变量,因为全局变量其实是全局对象的成员,2. 预先计算collection的length,如:将for (var i = 0; i < collection.l
4. 书写最正确的代码。容错功能是要付出性能代价的。
4.2 JScript语言本身的优化
4.2.1 变量
1. 尽量使用局部变量。
因为全局变量其实是全局对象的成员,而局部变量在栈上定义,优先查找,性能相对于全局变量要高。
2. 尽量在一个语句中做定义变量和赋值。
3. 省略不必要的变量定义。
如果变量的定义可以被一个常量替代,就直接使用常量。
4. 使用Object语法对对象赋值。
Object的赋值语法在操作复杂对象时效率更高。
例如,可以将下面的代码:
car = new Object();
car.make = "Honda";
car.model = "Civic";
car.transmission = "manual";
car.miles = 100000;
car.condition = "needs work";
替换成:
car = {
make: "Honda",
model: "Civic",
transmission: "manual",
miles: 100000,
condition: "needs work"
}
4.2.2 对象缓存
1. 缓存对象查找的中间结果。
因为JavaScript的解释性,所以a.b.c.d.e,需要进行至少4次查询操作,先检查a再检查a中的b,再检查b中的c,如此往下。所以如果这样的表达式重复出现,只要可能,应该尽量少出现这样的表达式,可以利用局部变量,把它放入一个临时的地方进行查询。
2. 缓存创建时间较长的对象。
自定义高级对象和Date、RegExp对象在构造时都会消耗大量时间。如果可以复用,应采用缓存的方式。
4.2.3 字符串操作
1. 使用"+=" 追加字符串,使用"+"来连接字符串。
如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr。
如果要连接多个字符串,应该使用"+",如:
s+=a;
s+=b;
s+=c;
应该写成
s+=a + b + c;
2. 连接大量的字符串,应使用Array的join方法。
如果是收集字符串,最好使用JavaScript数组缓存,最后使用join方法连接起来,如下:
var buf = new Array();
for (var i = 0; i < 100; i++)
{
buf.push(i.toString());
}
var all = buf.join("");
4.2.4 类型转换
1. 使用Math.floor()或者Math.round()将浮点数转换成整型。
浮点数转换成整型,这个更容易出错,很多人喜欢使用parseInt(),其实parseInt()是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用Math.floor()或者Math.round()。
对象查找中的问题不一样,Math是内部对象,所以Math.floor()其实并没有多少查询方法和调用的时间,速度是最快的。
2. 自定义的对象,推荐定义和使用toString()方法来进行类型转换。
对于自定义的对象,如果定义了toString()方法来进行类型转换的话,推荐显式调用toString()。因为内部的操作在尝试所有可能性之后,会尝试对象的toString()方法尝试能否转化为String,所以直接调用这个方法效率会更高。
4.2.5 循环的优化
1. 尽可能少使用for(in)循环。
在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,事实上,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以就应该尽量少用。
2. 预先计算collection的length。
如:将for (var i = 0; i < collection.length; i++)
替换成:for (var i = 0, len = collection.length; i < len; i++)
效果会更好,尤其是在大循环中。
4.2 JScript语言本身的优化
4.2.1 变量
1. 尽量使用局部变量。
因为全局变量其实是全局对象的成员,而局部变量在栈上定义,优先查找,性能相对于全局变量要高。
2. 尽量在一个语句中做定义变量和赋值。
3. 省略不必要的变量定义。
如果变量的定义可以被一个常量替代,就直接使用常量。
4. 使用Object语法对对象赋值。
Object的赋值语法在操作复杂对象时效率更高。
例如,可以将下面的代码:
car = new Object();
car.make = "Honda";
car.model = "Civic";
car.transmission = "manual";
car.miles = 100000;
car.condition = "needs work";
替换成:
car = {
make: "Honda",
model: "Civic",
transmission: "manual",
miles: 100000,
condition: "needs work"
}
4.2.2 对象缓存
1. 缓存对象查找的中间结果。
因为JavaScript的解释性,所以a.b.c.d.e,需要进行至少4次查询操作,先检查a再检查a中的b,再检查b中的c,如此往下。所以如果这样的表达式重复出现,只要可能,应该尽量少出现这样的表达式,可以利用局部变量,把它放入一个临时的地方进行查询。
2. 缓存创建时间较长的对象。
自定义高级对象和Date、RegExp对象在构造时都会消耗大量时间。如果可以复用,应采用缓存的方式。
4.2.3 字符串操作
1. 使用"+=" 追加字符串,使用"+"来连接字符串。
如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr。
如果要连接多个字符串,应该使用"+",如:
s+=a;
s+=b;
s+=c;
应该写成
s+=a + b + c;
2. 连接大量的字符串,应使用Array的join方法。
如果是收集字符串,最好使用JavaScript数组缓存,最后使用join方法连接起来,如下:
var buf = new Array();
for (var i = 0; i < 100; i++)
{
buf.push(i.toString());
}
var all = buf.join("");
4.2.4 类型转换
1. 使用Math.floor()或者Math.round()将浮点数转换成整型。
浮点数转换成整型,这个更容易出错,很多人喜欢使用parseInt(),其实parseInt()是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用Math.floor()或者Math.round()。
对象查找中的问题不一样,Math是内部对象,所以Math.floor()其实并没有多少查询方法和调用的时间,速度是最快的。
2. 自定义的对象,推荐定义和使用toString()方法来进行类型转换。
对于自定义的对象,如果定义了toString()方法来进行类型转换的话,推荐显式调用toString()。因为内部的操作在尝试所有可能性之后,会尝试对象的toString()方法尝试能否转化为String,所以直接调用这个方法效率会更高。
4.2.5 循环的优化
1. 尽可能少使用for(in)循环。
在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,事实上,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以就应该尽量少用。
2. 预先计算collection的length。
如:将for (var i = 0; i < collection.length; i++)
替换成:for (var i = 0, len = collection.length; i < len; i++)
效果会更好,尤其是在大循环中。
- ››ASP.NET及JS中的cookie基本用法
- ››ASP.NET获取MS SQL Server安装实例
- ››asp.net实现调用百度pai 在线翻译英文转中文
- ››ASP.NET页面选项进行提示判断
- ››Asp.net定时执行程序
- ››ASP.NET中利用DataList实现图片无缝滚动
- ››ASP.NET验证控件RequiredFieldValidator
- ››ASP.NET中使用System.Net.Mail发邮件
- ››ASP.NET中获取用户控件中控件的ID
- ››ASP.NET中FileBytes写成文件并存档
- ››asp.net报“INSERT INTO 语句的语法错误解决
- ››Asp.net中表头合并 复杂表头实现
更多精彩
赞助商链接