我知道使用template.find()
或template.$
搜索Meteor中的DOM比使用document.querySelector()
或jQuery搜索所有DOM更快。但我不知道要快多少。
我想它会直接与应用程序的DOM节点数量相关,但我不知道是否是这种情况,或者Meteor中是否有任何其他优化/降级使得这个假设不成比例。
有人知道关于性能测试/结果吗?
答案 0 :(得分:3)
template
不等于document
。 document
可以包含许多template
个。 template.find
abstracts $
,但template.find
没有添加任何功能。因此,template.$
和template.find
或多或少会同等地执行。 $
是jQuery
的常见别名,当您将单个字符串传递给jQuery
函数时,它会经历更多抽象,可能登陆document.querySelector
。这就是为什么document.querySelector
is a lot faster than jQuery
(jsperf现在正在关闭,所以我无法告诉你更快的原因)。 jQuery
速度要慢得多,在大多数情况下,它可能会在document.querySelector
和template.$
之间进行近距离通话。
通过获取包装目标的节点然后使用native-DOM函数,您将获得最佳性能。如果模板中有包装元素,则可以使用template.firstNode
属性。否则你可以做火焰:template.firstNode.parentElement
。然后我使用getElementsByClassName
或getElementById
。它们比querySelector
快,因为querySelector
必须首先解析查询。至少在大多数情况下,它取决于包装节点中的节点数量以及树内搜索元素的距离。
答案 1 :(得分:0)
我不能说我已经注意到我的用户有任何真正的性能提升,但我会说template.find()似乎在我的编码方式上给我提升了性能。
例如
var someID = $('#some-id');
在我添加如下数组插槽之前,将无法管理:
var someID = $('#some-id')[0];
在哪里
var someID = template.find('#some-id')
只返回那个html元素,这意味着我不必每次都把它当成一个数组。