<html> <head><meta http-equiv=content-type content=“text/html; charset=utf-8”> <title>测试初始化Object的性能</title> <style> html,body,td,p,div,span,th { font-size:9pt; } </style> </head> <body> <script type="text/javascript" language="JavaScript" src="/jcore/resource /javascript/Jcore.js"></script> <script type="text/javascript" language="JavaScript"> <!--// 功能描述:本方法主要用来测试本书中的性能相关代码 // 返回信息:无返回 // 使用指南:new fnMyTest(function() // { var szStr = new StringBuffer().append("good") // var szStr = new StringBuffer().append("good"). append(" just fine").append(" : summer").append(" xiatian") // .append(9876).toString(); // delete szStr; // }, function() // { var szStr = "good".append(" just fine").append(" : summer") // var szStr = "good".append(" just fine").append(" : summer") .append(" xiatian").append(9876).toString(); // delete szStr; // }, 500, "可以看出来,扩展的String更优于自己写的StringBuffer"); // 本方法将加入Jdebug.js,因此后面的章节不会出现这段代码了,请读者注意 // 应用范围:各种Web客户端和服务端开发 function fnMyTest(fnCode1, fnCode2, nRtCnt, s) { try{ var _this = this; fnGetObjs('code1')[0].innerText = fnCode1.toString(); fnGetObjs('code2')[0].innerText = fnCode2.toString() + "\n\n// " + s; fnGetObjs('tms')[0].innerText = nRtCnt; fnMyTest._fnCode1 = fnCode1; fnMyTest._fnCode2 = fnCode2; fnMyTest.ovcnt = 0; // aList的功能是返回值为从1到11的数组 [].aList(1, 11).each(function(n) { window.setTimeout(function(){myTestRun(n, nRtCnt)}, 64); }); Msg("多线程启动完毕"); }catch(e){fnCatch(e)} } // 功能描述:从a - b生成一个数组并返回 // 这以后将放入Jcore.js里 // 返回信息:返回取到的数组 // 使用指南:var a = [];a.ccp([23,234,"234"]).ccp([213123], "12313"); // 应用范围:各种Web客户端和服务端开发 Array.prototype.aList = function(a, b) { do{ this.push(a++) }while(a < b); return this; } // 功能描述:运行两段测试代码的方法 // 本方法将加入Jdebug.js,因此后面的章节不会出现这段代码了,请读者注意 // 返回信息:无返回 // 使用指南:系统用 function myTestRun(n, nRtCnt) { try{ var fnCode1 = fnMyTest._fnCode1, fnCode2 = fnMyTest._fnCode2; // fnGetObjs将在第8章讲解,这里也先提到Jcore.js里 var cd1rt = fnGetObjs('cd1rt' + n)[0], cd2rt = fnGetObjs('cd2rt' + n)[0]; var i = 0, nStart = new Date().getTime(); do { fnCode1(); }while(++i < nRtCnt); cd1rt.innerText =new Date().getTime() - nStart; i = 0, nStart = new Date().getTime(); do { fnCode2(); }while(++i < nRtCnt); cd2rt.innerText = new Date().getTime() - nStart; fnMyTest.ovcnt++; if(10 == fnMyTest.ovcnt)fnMyTest.free(); Msg(n + "号线程运行完毕"); }catch(e){fnCatch(e)} } // 功能描述:释放资源 // 本方法将加入Jdebug.js,因此后面的章节不会出现这段代码了,请读者注意 // 返回信息:无返回 // 使用指南:系统用 fnMyTest.free = function() { try{ delete fnMyTest._fnCode1; delete fnMyTest._fnCode2; fnMyTest.ovcnt = null; Msg("资源已经释放"); }catch(e){} } // 功能描述:根据一个名称或id返回一个对象数组, // 第8章讲解内容,这里先提到Jcore里去 // 返回信息:返回取到的数组 // 使用指南:fnGetObjs('myid') // fnGetObjs('myInputName'),fnGetObjs('dto(aac009)') // fnGetObjs('input');// 返回所有的input对象 // 应用范围:各种Web客户端和服务端开发 var fnGetObjs = Object.prototype.fnGetObjs = function(s) { // 支持从外面指定当前的window对象,往往我们需要在弹出窗口中获取父窗口 // 里的对象 var oWin = this.win || window, o = this.obj || oWin.document, oRst = [], oBjs; oBjs = oWin.document.getElementsByName(s); if(0 < oBjs.length) return _A(oBjs).each(function() { // 如果不支持包含的判断或者已经包含 if(!o.contains || o.contains(this)) oRst.push(this) }), oRst; oBjs = oWin.document.getElementById(s); if(!oBjs) { // 如果有o.getElementsByTagName为真才执行后面的表达式, // 并返回其结果 return o.getElementsByTagName && _A(o.getElementsByTagName(s)). each(function() { if(!o['contains'] || o['contains'](this))oRst.push(this) }), oRst; return []; } return [oBjs]; }; // 测试调用的代码 function fnTestMyCode() { try{ new fnMyTest(function() { // 普通的方式 var oMyObject = new Object(); oMyObject.name = "风云际会"; oMyObject.age = "天荒地老"; oMyObject.display = function() { alert([this.name, this.age].join("\n")); }; }, function() { // 相同功能,性能更卓越的方式 // 注意:这里不能用等号,否则就发生错误 var oMyObject = { // 注意:这里不能用等号,否则就发生错误,只能用冒号 name: "风云际会" ,age : "天荒地老" ,display:function() { alert([this.name, this.age].join("\n")); } }; }, 10000, "可以看出来,直接初始化的性能远远高于定义后在初始化的方式"); }catch(e){fnCatch(e)} } --> </script> <center><input type="button" value="运行" onclick="fnTestMyCode()"><br><br> <table border="1" style="width:100%;"> <tr> <th rowspan="2" width="120">运行次数及毫秒[每次运行<b id="tms"></b>回]</th> <th>一般代码写法</th> <th>优化代码写法</th> </tr> <tr> <td id="code1"> </td> <td id="code2"> </td> </tr> <tr> <td>1</td> <td id="cd1rt1" nowrap> </td> <td id="cd2rt1" nowrap> </td> </tr> <tr> <td>2</td> <td id="cd1rt2" nowrap> </td> <td id="cd2rt2" nowrap> </td> </tr> <tr> <td>3</td> <td id="cd1rt3" nowrap> </td> <td id="cd2rt3" nowrap> </td> </tr> <tr> <td>4</td> <td id="cd1rt4" nowrap> </td> <td id="cd2rt4" nowrap> </td> </tr> <tr> <td>5</td> <td id="cd1rt5" nowrap> </td> <td id="cd2rt5" nowrap> </td> </tr> <tr> <td>6</td> <td id="cd1rt6" nowrap> </td> <td id="cd2rt6" nowrap> </td> </tr> <tr> <td>7</td> <td id="cd1rt7" nowrap> </td> <td id="cd2rt7" nowrap> </td> </tr> <tr> <td>8</td> <td id="cd1rt8" nowrap> </td> <td id="cd2rt8" nowrap> </td> </tr> <tr> <td>9</td> <td id="cd1rt9" nowrap> </td> <td id="cd2rt9" nowrap> </td> </tr> <tr> <td>10</td> <td id="cd1rt10" nowrap> </td> <td id="cd2rt10" nowrap> </td> </tr> </table></center> </body> </html>
|