Javascript 如果在很多函数中使用DOM元素,那么将其分配给全局变量会提高性能吗?

Javascript 如果在很多函数中使用DOM元素,那么将其分配给全局变量会提高性能吗?,javascript,jquery,Javascript,Jquery,在我的工作区中有人建议,如果我们将一个元素保存到一个变量中,那么JQ就不必每次调用DOM时都搜索它,那么也许我们可以提高JQuery的性能 例如。。。假设我在javascript中的许多函数中使用$('#myPopUp'),建议在文档中.ready函数中将其保存到变量中 mypopup=$(“#mypopup”)然后在整个脚本中使用此$(mypopup).hide(),.show(),blah() 这会提高我们的性能还是不值得向全局名称空间添加更多变量?将jQuery元素保存到变量中肯定比重复传

在我的工作区中有人建议,如果我们将一个元素保存到一个变量中,那么JQ就不必每次调用DOM时都搜索它,那么也许我们可以提高JQuery的性能

例如。。。假设我在javascript中的许多函数中使用
$('#myPopUp')
,建议在
文档中.ready
函数中将其保存到变量中

mypopup=$(“#mypopup”)
然后在整个脚本中使用此
$(mypopup).hide()
.show()
blah()


这会提高我们的性能还是不值得向全局名称空间添加更多变量?

将jQuery元素保存到变量中肯定比重复传递选择器更有效。速度有多快是值得怀疑的,这取决于选择器和DOM的复杂性。它的速度可能只是可以忽略不计,但保存到变量仍然是一种最佳做法。除了更快的执行之外,代码缩小工具还可以将变量重命名为类似
a
这样的短变量,这样可以节省字节并加快JS文件的物理加载时间

但是,您的示例误用了此技术

mypopup = $('#myPopUp');
$(mypopup).hide();
您正在将jQuery对象保存到变量
mypopup
,但您正在将其传递回第二行的jQuery构造函数。因为它已经是jQuery对象,所以可以直接调用它的方法:

mypopup.hide();

按照惯例,您应该通过在变量名称前面加一个美元符号来指示您的变量是jQuery对象,如:
$mypopup

如果您正确使用它(到目前为止您还没有这样做),它将提高性能

缓存jQuery集合的要点是

  • 不要每次都查询DOM
  • 不要总是调用jQuery构造函数
您不需要将缓存的变量包装在
$()
中,只需像

mypopup.hide();


注意一点:您正在使用术语“全局变量”,但您仍然不应该这样做。创建自己的应用程序上下文/-namepsace并将这些变量保持在其中“全局”就足够了。你不想破坏实际的全局上下文。

我找不到我在其中看到的视频或文章,但他们提出的理由是变量将是最快的(大多数情况下)如果它们对使用它们的函数是私有的。它不必是全局的,除非您在两个不同的.js文件中使用它。@KevinB即使这样,如果您在js中使用了一个好的模式,它也不需要是全局的。感谢您对$(varName).hide()而不是varName.hide()的说明。我想我也误用了“全球”这个词。。。我的意思是全局的,对于它们所在的整个(但单个)脚本都是可用的-基本上是我在所有函数之外声明的变量,所以如果我以后在许多函数中调用这个变量,它们都会引用它。。。我应该称之为不同的东西?这会改变我的问题吗?@toddv:这不会改变问题不,这只是一个“善待其他脚本,可能加载到你的网站”的问题。永远不要用任何东西污染全球环境,以避免冲突和意外行为,这始终是一个好主意。