未优化代码 优化后的代码
var oarrSum = new Array(); var oarrSum = [];
var oarrSum = new Array(30); var oarrSum = [];
var oarrSum = new Array(30,234,234,43,nNum); var oarrSum = [30,234,234,43,nNum];
var oarrSum = new Array(); var oarrSum = {a:"test1",b:"test2"}; // 这样优化后有两种访问方式:
oarrSum["a"] = "test1"; oarrSum.a + oarrSum['b'];
oarrSum["b"] = "test2";
var oTmp = new Object(); var oTmp = {test:"good",test2:function(s){return s.replace(//s/gm,"")}};
oTmp.test = "good";
oTmp.test2 = function(s){return s.replace(//s/gm,"")};
2、日期
未优化代码 优化后的代码
var oDt = new Date(); var oDt = new Date; // 不可小看少了一对括号哦
关于日期对象,如果不是要使用他的方法getTime(),那么最好定义个全局的Date对象,在各个js文件、各个需要的方法里引用他,这样避免多次创建对象而浪费性能。
3、一些全局对象的简写
建议在js开头有这样的代码
var d = document, w = windiw,out = d.write,t = top;
如果把var w = this;就更迷惑人了,其实全局的this就是window对象
这样就可以在以后的方法里引用他们了,不过这时候要注意你取的变量名不要和他们冲突,
这样做的目的是让代码更简洁,js文件体积就会更小写,当然,变量名力求简短也是必须的。
4、for循环的优化
注意:本优化方法适用于各种编程语言哦!
我们假定给id为oTable的表格的第2列求和,并写到最后一行的第2列里,如果行数在万行以上,下面的优化就看出效率了
< script >
var n1 = 0, n2 = 0, d = document;
var out = d.write;
// 未优化代码
function fnSum()
{
try{
if(null == oTable || "object" != typeof oTable)return 0;
var o = oTable.rows; // 为了让代码简洁
// 从第二行开始,跳过标题行和末尾行
var nSum = 0;
out("表格有" + o.length + "行");
var nStart = new Date;
for(var i = 1; i < o.length - 1; i++)
{
// 如果遇到无效的数字或空值就表示表格中有空行,
// 因此就停止循环,开发人员一定要作好兼容的处理
// 由于n的值在两个地方用到,因此就提出来
var n = parseFloat(o(i).cells[1].innerText);
if(!isFinite(n))break;
nSum += n;
}
// 看看用了多少豪秒
return n1 = (new Date - nStart),o(i).cells[1].innerText=nSum;
}catch(e){alert("fnSum: " + e.message)}
}
// 优化后的代码,虽然代码量多了,但是运行效率却相当客观
// 其实,下面的代码是充分利用了CPU的新特性
function fnSum1()
{
try{
if(null == oTable || "object" != typeof oTable)return 0;
var o = oTable.rows; // 为了让代码简洁
// 从第二行开始,跳过标题行和末尾行
var nSum = 0;
var nStart = new Date, i = 1, R = o.length - 2, T = 8;
var k = R % T, n = 0;
var fnS = function(o){var n = parseFloat(o.innerText);if(!isFinite(n))return -1;return n};
while(k--)
{
n = fnS(o(i++).cells[1]);if(-1 == n)break;nSum += n;
}
k = parseInt(R / T);
while(k--)
{
for(var x = 0; x < T; x++)
{
n = fnS(o(i++).cells[1]);if(-1 == n)break;nSum += n;
}
}
// 看看用了多少豪秒
return n2 = (new Date - nStart),o(i).cells[1].innerText=nSum;
}catch(e){alert("fnSum1: " + e.message)}
}
var s1 = fnSum(), s2 = fnSum1();
out("
fnSum1比fnSum快" + (n1 - n2) + "豪秒
");
out("fnSum1:" + n2 + "豪秒;结果 = " + s2 + "
");
out("fnSum:" + n1 + "豪秒;结果 = " + s1 + "
")
< / script >
表格有4898行
fnSum1比fnSum快2735豪秒
fnSum1:240豪秒;结果 = 279072
fnSum:2975豪秒;结果 = 279072