Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript/MooTools—在对象属性中保存元素比每次使用$(';elem';)访问更好?_Javascript_Performance_Mootools - Fatal编程技术网

JavaScript/MooTools—在对象属性中保存元素比每次使用$(';elem';)访问更好?

JavaScript/MooTools—在对象属性中保存元素比每次使用$(';elem';)访问更好?,javascript,performance,mootools,Javascript,Performance,Mootools,就速度/内存效率而言,将元素(通过$检索)保存到对象中的变量或每次使用$访问它有意义吗 访问对象属性(特别是嵌套了几个级别的对象)是否比使用$执行得更快?缓存经常使用的选择器始终是一个好主意。imo说,在几个层次的深层对象后面的名称空间创建了一个比必要的更长的全局范围链。我倾向于在简单的闭包中缓存选择器,或者使用mootools的元素存储 例如,如果您在一个div中有一个链接定位父对象,然后向下查找2个元素和第一个img,您可以看到用户多次单击它,您可以执行以下操作: document.id("

就速度/内存效率而言,将元素(通过$检索)保存到对象中的变量或每次使用$访问它有意义吗


访问对象属性(特别是嵌套了几个级别的对象)是否比使用$执行得更快?

缓存经常使用的选择器始终是一个好主意。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);
...
});
第一次单击时,它将查找目标img并将其存储在链接的存储器下,键为
targetImg
,随后的任何单击都将使用存储的引用。mootools在扩展元素和分配uid时创建的存储。只是闭包后面的一个简单对象,因此它不在元素的专有属性内,这将降低IE等中的访问速度,也不在任何窗口中。财产

当您考虑MOOToE编码的一般概念——即类代码时,在编写MOOToCs类/插件时,有一些(未编写的)最佳实践。

如果它属于单个元素,则设置
this.element=document.id(元素)-存储引用。如果它是一个数组,则类似地执行缓存
this.elements=document.getElements(this.options.selector)


因此,始终存储对主选择器的引用

谢谢你的回复。所以MooTools本身不使用任何形式的缓存$?据我所知,这是一件好事。假设您引用$(“foo”),它将成为指向对象的指针。然后,您可以使用ajax或dom操作来销毁元素或通过重写父元素的html来重新创建元素—您不希望引用$(“foo”)来返回旧元素(以及与之关联的uid、事件等)。无论如何,通过选择器的查找通常非常快,因此始终将其存储到变量中没有意义,但您会注意到每秒发生几次或10次的动画中的差异<代码>如果多次调用,则缓存