template.find()vs document.querySelector vs jquery vs template。$ meteor in Meteor

时间:2015-06-26 20:34:11

标签: performance meteor meteor-blaze

我知道使用template.find()template.$搜索Meteor中的DOM比使用document.querySelector()或jQuery搜索所有DOM更快。但我不知道要快多少。 我想它会直接与应用程序的DOM节点数量相关,但我不知道是否是这种情况,或者Meteor中是否有任何其他优化/降级使得这个假设不成比例。 有人知道关于性能测试/结果吗?

2 个答案:

答案 0 :(得分:3)

template不等于documentdocument可以包含许多template个。 template.find abstracts $,但template.find没有添加任何功能。因此,template.$template.find或多或少会同等地执行。 $jQuery的常见别名,当您将单个字符串传递给jQuery函数时,它会经历更多抽象,可能登陆document.querySelector。这就是为什么document.querySelector is a lot faster than jQuery(jsperf现在正在关闭,所以我无法告诉你更快的原因)。 jQuery速度要慢得多,在大多数情况下,它可能会在document.querySelectortemplate.$之间进行近距离通话。

通过获取包装目标的节点然后使用native-DOM函数,您将获得最佳性能。如果模板中有包装元素,则可以使用template.firstNode属性。否则你可以做火焰:template.firstNode.parentElement。然后我使用getElementsByClassNamegetElementById。它们比querySelector快,因为querySelector必须首先解析查询。至少在大多数情况下,它取决于包装节点中的节点数量以及树内搜索元素的距离。

答案 1 :(得分:0)

我不能说我已经注意到我的用户有任何真正的性能提升,但我会说template.find()似乎在我的编码方式上给我提升了性能。

例如

var someID = $('#some-id');

在我添加如下数组插槽之前,将无法管理:

var someID = $('#some-id')[0];

在哪里

var someID = template.find('#some-id')

只返回那个html元素,这意味着我不必每次都把它当成一个数组。