当使用具有巨大主体的函数时会有多少开销?
例如,考虑一下这段代码:
(function() {
// 25k lines
})();
它如何影响加载速度/内存消耗?
答案 0 :(得分:3)
说实话,我不确定,帮助回答你问题的好方法是衡量。
您可以使用javascript探查器,例如Google Chrome中内置的探测器,这里是mini intro to the google chrome profiler
答案 1 :(得分:3)
您还可以使用Firebug profiler()
和time()
:http://www.stoimen.com/blog/2010/02/02/profiling-javascript-with-firebug-console-profile-console-time/
答案 2 :(得分:3)
无论大小如何,静态函数声明的开销都可以忽略不计。唯一的性能损失来自函数内部的定义。
是的,您将拥有包含许多变量的大型闭包,但除非您在函数中声明数万个私有变量,或执行该函数数万次,否则您将不会注意到差异。< / p>
这里真正的问题是,如果将该功能拆分为多个较小的功能,您是否会注意到性能提升?答案是否定的,你应该看到一个轻微的性能减少,但开销更多,尽管你的内存分配至少应该能够收集一些未使用的变量。
无论哪种方式,javascript通常只会被明显昂贵的任务所困扰,所以在看到问题之前我不会打扰优化。
答案 3 :(得分:2)
那几乎是不可能回答的。 如果你真的想了解内存使用情况,自动垃圾收集和关闭的其他细节,请从这里开始:http://jibbering.com/faq/notes/closures/
答案 4 :(得分:2)
首先,像JQuery这样的产品是建立在使用闭包的极其重要的基础之上的。 JQuery被认为是一个非常高性能的Javascript代码。这应该告诉你很多关于它使用的编码技术。
任何给定功能的确切性能在不同浏览器之间会有所不同,因为它们都有自己的脚本引擎,这些引擎都是独立编写的,并且具有不同的优化。但他们所做的一件事就是尝试对最常用的Javascript功能进行最佳优化。鉴于JQuery及其类似的预测,你可以打赌闭包是非常优化的。
无论如何,随着最新一轮的浏览器发布,他们的脚本引擎现在都具有足够高的性能,你很难在基本的语言结构中找到任何可以解决重大性能问题的东西。