【发布时间】:2011-06-06 13:57:12
【问题描述】:
这个问题与之前的问题有关:
Reducing number of calls to the methods of a JavaScript object
使用 Firebug 分析这两个代码 sn-ps 时:
function ie6PNGFixLoader(scriptURL) {
if(arguments.length > 0) {
for (var i = 0; i < arguments.length; i++) {
$.ajax({// load PNG fix scripts
url: arguments[i],
cache: true,
dataType: 'script'
});
}
} else {
return false;
}
}
var pngFix = "/Global/ICIS/Scripts/DD_belatedPNG_0.0.8a-min.js";
var pngList = "/Global/ICIS/Scripts/DD_PNG_listing.js";
ie6PNGFixLoader(pngFix, pngList);
和
function InjectScriptsAndExecute(url) {
this.url = url;
}
InjectScriptsAndExecute.prototype.InjectMethod = function() {
var inject = $.ajax({
url: this.url,
cache: true,
dataType: 'script',
async: false, // Otherwise you cannot depend on the parse order
});
return inject;
}
var pngFix = new InjectScriptsAndExecute("/Global/ICIS/Scripts/DD_belatedPNG_0.0.8a-min.js");
var pngList = new InjectScriptsAndExecute("/Global/ICIS/Scripts/DD_PNG_listing.js");
pngFix.InjectMethod();
pngList.InjectMethod();
显然后者对 InjectScriptsAndExecute 方法的调用比前者对其函数的调用要快得多。一位同事问我为什么当我提到性能改进但我自己无法解释时。
我们将非常欢迎任何有助于更好理解的建议。
【问题讨论】:
-
你将不得不发布更多关于你的性能测量的信息。它们之间的主要区别不是编码风格(这几乎不会产生可测量的差异),而是 ajax 操作的不同设置(异步与同步)。
标签: javascript performance oop object functional-programming