搜索范围与访问DOM - 速度性能

时间:2017-03-29 07:54:33

标签: javascript jquery

我正在学习javaScript,但仍有许多疑点。我已经尝试过搜索这个,但也许我使用了错误的单词。我总是推迟这个,但由于我正在研究的项目规模正在变得比我预期的要大,我需要澄清。

我知道在搜索范围访问Dom 方面的速度成本。但我不知道哪一个比另一个慢。

是否更快......

a)向上移动范围链以使用jQuery对象获取变量,仅转到Dom一次

b)不再向范围链上移,再次访问Dom

var $el = $("#el");

//$el is used on this scope (and so, the question makes some sense:))

$el (...)

// some or lot's of code

function a() {

   // some or lot's of code

   function b(){

      // some or lot's of code

      function c() {

         a) $el (...)
         b) var $el = $("#el");
            $el (...)

      }

  }

}

3 个答案:

答案 0 :(得分:1)

选项A更快。 (在顶部声明变量)

当您需要$("#el")以上时,请将其存储为变量。多次使用DOM很慢。

Greg Franko解释了一些最佳做法here。请参阅幻灯片10-13以获取您的问题。

答案 1 :(得分:1)

虽然你的问题很不清楚,但也许我可以用一般的经验来回答:

DOM很慢。如果您可以避免遍历它,请执行此操作。如果您搜索DOM以查找特定节点,请将该引用存储在变量中,以避免再次搜索DOM。

答案 2 :(得分:1)

如果我理解你的问题,那么你就是在询问jQuery中的性能访问元素。这里有一些提示:

  • 每次必须获取对jQuery对象的引用(示例中为$(“#el”))都会产生运营成本。在性能方面,您应该始终尝试根据需要声明最小化必要元素。

  • 访问兄弟姐妹(兄弟姐妹()),父母(最近(),父())或子女(儿童(),find())是一个不错的选择,如果只是为了几个操作,但如果你将多次使用这些元素,它更好地用直接选择器引用它们,如$(“#el-child”)或(“#el .child”)。

  • 如果声明类似$ el = $(“#el”)的var,则会获得当前状态的节点的引用。有时这个节点已被更新,删除,重新创建或其他东西,而且这个引用不会留下它们,所以你必须再次调用这个$ el = $(“#el”),正如我之前所说的,这取决于您的网站逻辑如何运作。

注意:对不起我的英语,我知道它并不he <