多次使用jQuery $()运算符会对性能产生影响吗?
如果我在元素周围构造一次或多次jQuery对象,会有什么显着差异吗? 例如:
var jEl = $(el); $.each(myArray, function() { jEl.addClass(this); }
与:
$.each(myArray, function() { $(el).addClass(this); }
我知道还有其他方法可以回答这个问题,但我的问题是我是否应该只做一次$(el),或者它是否真的无关紧要。 这个例子是人为的。
奖金积分用于解释$(el)在幕后的作用。
我知道理论上正在做更多的工作,我不知道的是它是否重要……如果jQuery缓存它或浏览器都非常擅长第二个请求或其他什么,而不是它的价值。
仅供参考:相关的jQuery API链接在这里(我提供的是因为$()对谷歌来说不是最简单的事情): http : //api.jquery.com/jQuery/#using-dom-elements
还值得包括这个有用的链接: http : //www.artzstudio.com/2009/04/jquery-performance-rules/ ,他的几个要点集中在保存,链接和选择上。
是的,会对性能产生影响。
在第一个示例中,仅创建了一个实例。
在第二个中,将为循环的每次迭代创建一个实例。
根据myArray
的大小,这可能会导致创建大量无关的实例,这些实例将通过内存进行咀嚼。
第一种方式会更快。 首先,您每次创建一个新对象,这取决于您的浏览器,您的页面以及el是什么。
如果el是一个字符串(例如“#myname”),则$(el)
将“查询”DOM以查找该元素。 jQuery在执行查询时速度非常快,但确实需要一些时间。 所以多次这样做会花费更多倍的时间。
我获得奖励积分吗?
是的会有。 每次调用$()时,jQuery都会对元素进行单独的DOM搜索。
如果每次搜索需要0.1秒(通常要快得多,但这是一个很容易使用的数字),并且你的数组中有1000个元素,那就是100秒专门用于遍历第二个例子中的DOM,而不是第一次只有0.1秒。