Javascript Vue';s ref每次使用时是否执行DOM查找?

Javascript Vue';s ref每次使用时是否执行DOM查找?,javascript,performance,vue.js,Javascript,Performance,Vue.js,我目前正在测试Vue.js,并在我的项目中使用了一些参考资料。 我不确定是否每次在方法中调用ref时都会执行DOM查找,或者vue是否只存储一次所有ref,然后访问该引用 我无法在文档中找到答案,也无法通过谷歌找到答案 范例 myDiv = this.$refs.myDiv 我是否需要自己将ref存储在变量中,或者多次调用ref时不会影响性能?引用只注册一次并缓存在$refs对象中。你可以直接使用,没问题 浏览源代码时,启动vue实例时,它会将属性$ref={}设置为空对象。看 通过检查虚拟

我目前正在测试Vue.js,并在我的项目中使用了一些参考资料。 我不确定是否每次在方法中调用ref时都会执行DOM查找,或者vue是否只存储一次所有ref,然后访问该引用

我无法在文档中找到答案,也无法通过谷歌找到答案

范例

myDiv = this.$refs.myDiv

我是否需要自己将ref存储在变量中,或者多次调用ref时不会影响性能?

引用只注册一次并缓存在
$refs
对象中。你可以直接使用,没问题

浏览源代码时,启动vue实例时,它会将属性
$ref={}
设置为空对象。看

通过检查虚拟节点是否具有
ref
属性,即函数中的
vnode.data.ref
来填充此
vm.$refs
对象

所以你不必自己做这件事


并且引用
$refs.myRef
不会执行DOM查找。它将由虚拟dom修补程序进程管理。

ref是否每次都执行dom查找?

简而言之,答案是否定的

以下是我的大致理解:(如果我错了,请纠正我)

Vue使用虚拟DOM。在Vue中,真实DOM的虚拟表示是VNode。Vue首先基于模板和脚本创建VNode。然后,Vue将虚拟DOM(包含所有VNode的树)与真实DOM进行比较。如果真实DOM和虚拟DOM之间存在差异,Vue使用
document.createElement
(或其他DOM创建函数)创建DOM元素
document.createElement
返回指向实际DOM元素的指针。在将元素追加到显示之前,指针会保存到
Vnode.elm
中。
每当创建/更新/销毁Vnode时,Vue都会检查ref属性并将
设置为
Vnode.elm

换句话说,从来没有DOM查找。Vnode已经包含指向实际DOM元素的指针。使用ref时,Vue只会将现有DOM指针分配给
$refs