【问题标题】:The way to improve jQuery code performance [Selector point of view]提高jQuery代码性能的方法【选择器观点】
【发布时间】:2015-12-05 05:17:30
【问题描述】:

我想了解提高 jQuery 代码性能的最佳方法。

实际上,我知道如何缓存 jQuery 选择器以不多次触及 DOM,如下所示:

最糟糕的方式

$('.selector').text('Text');
$('.selector').text('New Text');

更好的方法

var elem = document.querySelectorAll('.selector');
$(elem).text('Text');
$(elem).text('New Text');

最好的方法

var $elem = $('.selector');
$elem.text('Text');
$elem.text('New Text');

第一个问题:为什么第三种方法比第二种方法快,$(elem) 究竟在这里做什么?

第二个问题:当我在jQuery中使用.data()时,我访问的是内部缓存,并且不接触DOM,那么JavaScript中的内部缓存是什么?

【问题讨论】:

  • 第二个不等同于其他,只匹配第一个元素与类selector,你肯定是指document.querySelectorAll('.selector')。无论如何,如果你没有成千上万的元素要匹配,你不应该太担心这里的性能

标签: javascript jquery dom


【解决方案1】:
  • Third 更快,因为您将 jQuery 元素放入变量 (RAM) 中,这样您就可以直接访问它,并且 jQuery 不必在每次访问时解析 DOM。把它想象成你想编辑一个文件,你不想每次触摸它时都使用搜索引擎,你只是让它打开。在您的示例中,elem 是一个 HTML 元素,jQuery 找出您使用 $(elem) 引用的元素。

  • .data() 方法,不要触摸 HTML 元素,因为它不需要。它只是将一些数据放入 RAM,因为它比每次将数据写入/读取到 HTML 元素中要快。

【讨论】:

  • 第二个问题,获取值呢?
  • 你说.data()会使用RAM来设置值,我问你,.data()将如何获取值?
  • 好吧,就像任何其他变量一样... Javascript 将它们存储在 RAM 中并从那里获取它们。你不想让我解释一下 RAM 是如何工作的吗?
  • @Peter,您的第二段并不完全正确。 data() 的 getter 形式在第一次调用时从 DOM 读取 data- 属性,它的 setter 形式也在第一次调用时“接触” DOM(将键值添加到全局数据缓存中的 expando 属性)。跨度>
  • @FrédéricHamidi 是的,我对“data() 的 getter 形式在第一次调用时从 DOM 读取数据属性”表示满意。但不是休息,.data() setter 永远不会触及元素。如果您想在控制台中输入$('#comment-52814139').data('hello', 'world'),可以在此页面上进行测试,您将不会在tr 元素上看到 data-hello
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
相关资源
最近更新 更多