Dom引用vs存储Dom引用
dom referenceing vs storing dom reference
以下语句的区别是什么?
$("#txt").val("123");
和
var txt=$("#txt");
txt.val("123");
哪一个是最有效的?
两个版本都是查找相关的dom元素并设置值
除非您需要再次引用它,否则执行其中一个操作或另一个操作没有任何好处。想想看:if ( $("#txt").val()!='123' )
$("#txt").val("123");
// vs.
var txt=$("#txt");
if ( txt.val()!='123' )
txt.val("123");
后一种方法更有效,因为您只查找元素一次。
但是如果你只是简单地设置它…在你的例子中,两种方法的工作量都是一样的。稍微从设置变量开始增加了一些开销,但是没有什么可以动摇的…但即使是上述情况也不值得大惊小怪,除非你喜欢微秒的瞬间。
在您的代码中,如果您只需要一次指定所需的元素选择器:
$("#txt").val("123"); // is just fine
但是大多数时候程序员需要多次引用同一个元素,并且为了提高应用程序的整体性能,他们将选择器存储在可变内存槽中:
var txt = $("#txt");
var input = $("#someInput");
input.on('input', function() {
txt.val( this.value ); // *
});
txt.addClass('selected'); // JS says "hey I know this guy!"
- 在这一点上,JS不需要在每个keyup/keydown或其他input事件上寻找您的
#txt
输入。你能想象其中的好处吗?
如果要对#txt
的值进行不止一次的操作,那么如果要多次使用该对象,最好像在第二个版本中那样缓存选择器。最后,您可能不会注意到使用一种方法比使用另一种方法有任何显著的性能提高。
定量数据:
versionOne(): 0.0359999998472631
versionTwo(): 0.02500000037252903
这个测试似乎表明,第一个是较慢的,使用window.performance
。运行此命令时,请确保清空浏览器缓存。
(function() {
var v1 = [];
var v2 = [];
function avg(data) {
var sum = 0
for(var i = 0; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;
}
function versionOne() {
$("#txt").val('hello');
}
function versionTwo() {
var txt=$("#txt");
txt.val("123");
}
for(var i = 0; i < 1000; i++) {
var start = window.performance.now();
versionOne();
var end = window.performance.now();
v1.push(end - start);
var start = window.performance.now();
versionTwo();
var end = window.performance.now();
v2.push(end - start);
}
console.log("versionOne(): " + avg(v1));
console.log("versionTwo(): " + avg(v2));
})();
小提琴
相关文章:
- Datatables:通过DOM数据源中的名称引用列
- 如何在使用Ractive.extend()时引用DOM元素
- 我应该如何从我的javascript中引用DOM元素
- 什么是子树(在JavaScript中引用DOM时)
- 性能问题:存储对DOM元素的引用与使用选择器相比
- AngularJS,引用指令中的其他DOM项
- 用于查找JS代码中引用的DOM元素的工具
- 强制DOM在$scope模型对工厂模型的引用发生更改时进行渲染
- 从自身获取对脚本作为 HTML DOM 元素的引用
- 如何避免“this”引用 DOM 元素,并引用对象
- 如何在使用 outerHTML 更改内容后获取对新 DOM 对象的引用
- 根据对元素的变量引用从 DOM 中删除该元素
- 在插件后用 $(this) 引用 DOM
- 在jQuery中更新DOM引用
- 是否有可能通过服务器向另一个浏览器发送DOM引用
- 使用DOM引用下拉菜单中的选定项
- 如何将DOM引用转换为jQuery选择器
- 如何检查DOM引用是否已被销毁
- Dom引用vs存储Dom引用
- DOM引用变量的工作原理