JavaScript/MooTools - 最好将元素保存在对象属性中,而不是每次使用$('elem')进行访问?

And*_*Rey 2 javascript performance mootools

在速度/内存效率方面,将元素(通过$检索)保存到对象中的变量或每次使用$来访问它是否有意义?

访问对象属性(特别是嵌套几个级别 - 对象内的对象)执行速度比使用$更快吗?

Dim*_*off 5

经常使用的缓存选择器总是一个好主意.在几个级别的深层对象后面的命名空间创建了一个比必要的全局范围链更长的imo.我倾向于在简单的闭包中或通过使用mootools的元素存储来缓存选择器.

例如,如果你在div中有一个定位父项的链接,然后找到2个元素和第一个img,你可以看到用户多次点击它,你可以这样做:

document.id("somelink").addEvent("click", function() {
    var targetImg = this.retrieve("targetImg") || this.store("targetImg", this.getParent().getNext().getNext().getElement("img.close"));
    targetImg.fade(.5);
...
});
Run Code Online (Sandbox Code Playgroud)

在第一次单击时,它将查找目标img并将其存储在带有密钥的链接存储下targetImg,任何后续点击都将使用存储的引用.在扩展元素和分配uid时创建的mootools存储.只是一个闭包背后的一个简单对象,所以它不在元素的专有属性内,会降低IE等中的访问速度,而且它不在任何窗口中.属性.

当你考虑一般的mootools编码的哲学 - 即带有类的代码 - 在编写mootools类/插件时,有一些东西是(un)编写的最佳实践.

如果它属于单个元素,则设置this.element = document.id(element);- 存储引用.如果它是一个数组,那么你也可以进行缓存this.elements = document.getElements(this.options.selector);

所以,始终存储对主选择器的引用.