6

我正在尝试提高我对 javascript 的了解,并且在搜索一些“最佳实践”时,有人向我指出,缓存 DOM 文档然后通过该 var 访问它而不是直接访问文档对象会更快。

你可以在这里看到结果,在我对 jsperf 进行的编辑中: http: //jsperf.com/jquery-document-cached-vs-uncached/3(编辑:标题包含“jsquery”,因为那是原始测试,我的编辑包含香草 javascript,框架没有区别)

这真的让我很好奇。基本上我在等式中引入了一个新变量,这怎么能让事情变得更快而不是更慢?

据我所知,"print a" 应该比 "b = a; print b" 更好(说话的形象) 这种情况有什么不同?

4

2 回答 2

2

我相信我在这里找到了解释(最后一部分的重点是我的):

存储对浏览器内对象的指针引用。使用此技术通过在实例化期间存储对浏览器对象的引用以供以后使用,从而减少 DOM 遍历行程。例如,如果您不希望您的 DOM 发生变化,您应该存储一个对您将在创建页面时使用的 DOM 或 jQuery 对象的引用;如果您正在构建一个 DOM 结构,例如对话框窗口,请确保在实例化期间在其中存储一些对 DOM 对象的方便引用,这样您就不需要在用户单击某物时一遍又一遍地查找相同的 DOM 对象或拖动对话框窗口。如果您没有存储对 DOM 对象的引用,并且需要在函数内部进行迭代,您可以创建一个包含对该 DOM 对象的引用的局部变量,这将大大加快迭代速度,因为局部变量存储在堆栈中最容易访问的部分

因此,如果我理解正确,将 DOM 缓存在局部变量中可以更容易地访问内存堆栈,从而提高执行速度。

于 2012-10-19T10:48:03.470 回答
2

document不像普通的 Javascript 变量。当访问它的属性时,不知道在幕后发生了什么奇怪的魔法,尤其是 DOM,它可能是根据内部浏览器结构的需求创建的。

于 2012-06-18T20:07:37.320 回答