【发布时间】:2012-10-15 09:04:34
【问题描述】:
问题
不敢相信我在网上找不到任何东西,也许我正在寻找错误的东西......
可能几乎没有区别,但由于我正在尽我所能优化我的代码,我觉得值得一问。
很简单,我想知道在对象中定义和运行方法是否比全局定义和运行函数更快。
示例
考虑一下:
(function($){
$.fn.test = function() {
// do something here
};
})(jQuery);
还有这个:
function test(){
// do something here
}
我的问题
以上哪个更快,为什么?如果速度没有差异,那么您建议使用哪个?
提前致谢
更新 1
因为它可能是相关的,我觉得有必要解释我为什么要问这个问题。我有一个多年来编写的库,其中包含多种功能。由于它们太多,我想知道如果我要扩展 jQuery 对象,它们是否会运行得更快,或者保持原样?
【问题讨论】:
-
对我来说,全局函数的开销会更少,因为没有要处理的对象。不过我可能完全错了:)
-
@JonTaylor 即使对象仍然存在?
-
您是否尝试分析您的两个示例?例如,Chrome 为您提供了一个分析工具 (
CTRL + SHIFT + I > Profiles)。分析并查看最适合您的情况。不要忘记在您的目标浏览器上进行测试。 IMO,我认为方法可以更快地调用,因为它们位于 smaller 命名空间中。全局函数位于全局命名空间中,您通常无法想象所有函数都存在于其中... -
回答 X 比 Y 更快的问题的最佳方法是测试自己。我建议 jsperf.com 跨浏览器测试它。只需设置它并使用多个浏览器运行。还请不同机器和 Op.Systems 上的朋友做同样的事情,瞧。
-
@BenCarey 检查此测试:jsperf.com/global-context-or-class-context/3(Chrome 17.0.963 + FF 10.0.2 + IE6)。使用 noop test() 函数,全局上下文显然“获胜”。
标签: javascript jquery oop optimization