HI伙计们,我有一个问题,
我试图在性能方面找到最有效的方法来存储和访问javascript原型类库中的元素。
假设我在测试类中使用子元素动态创建父元素
testclass = Class.create({
newParent: null, //I will create a global reference to the parent element
method1: function(){
this.newParent = new Element('div',{'id':'newParent'});
var elm = new Element('div',
{
'id': 'elm1',
'identifier': 'elm1identifier'
}
);
newParent.insert(elm);
},
method2: function(){
??????????
}
})
在方法2中,我希望能够访问元素elm1。
我一直在想,这是我不同的解决方案。
我可以使用原型$()
提供的实用程序方法访问该元素method2: function(){
$('elm1');
}
我可以对元素进行全局引用。
elm1: null,
....
method2: function(){
this.elm1
}
3.我可以将方法中的元素作为参数传递,但此选项并不总是可用
我创建了一个唯一标识符作为属性,并使用原型.down函数
this.newParent.down('[identifier=elm1identifier]');
所以当然我使用这些的组合,但我很好奇,在所有方法中,这是最有效的性能。
我听说$()实用程序方法搜索整个dom?这是一个显着的差异吗?如果你有很多元素怎么办?
存储对元素的引用也可能导致内存问题,尤其是如果您在大型网站中有大量的javascript。
使用唯一的自定义标识符也很不错,但您还添加了可能对dom本身产生影响的新属性。但是这个优点是您可以使用原型中的element.down()方法指定要搜索的位置。
感谢帮助人员。
答案 0 :(得分:0)
如果要创建一个应该代表DOM元素的对象,给它一个引用该元素的属性似乎是明智的,比如说“元素”。然后在 method1 :
this.element = elm;
我认为在这个阶段,微观优化性能是没有意义的,因为性能的最大改进是不使用Prototype.js。
$()方法首先是 document.getElementById 的别名(在浏览器中速度非常快,而且一直都是这样),其次为元素添加了便利方法回。如果浏览器没有实现基于原型的继承方案,Prototpye.js会将约50个方法作为属性直接添加到元素中,这是一个非常昂贵的操作。
我怀疑存储对元素的引用会导致严重的内存问题,除非你存储数万而不使用它们(毕竟它们只是引用)。
使用唯一的自定义标识符 也很好,但你也添加了新的 可能有效的属性 在dom本身
不要向DOM元素添加自定义属性或属性。 Prototype.js版本2.0正在远离这个模型(最后),只是不要这样做。如果您有一个表示(或“包装”)元素的对象,请将该属性添加到该元素。