Javascript原型实用程序方法与参考性能

时间:2011-05-27 06:16:14

标签: javascript performance optimization prototypejs

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。

我一直在想,这是我不同的解决方案。

  1. 我可以使用原型$()

    提供的实用程序方法访问该元素
    method2: function(){
       $('elm1');
    }  
    
  2. 我可以对元素进行全局引用。

    elm1: null,
    ....
    method2: function(){
      this.elm1
    }
    
  3. 3.我可以将方法中的元素作为参数传递,但此选项并不总是可用

    1. 我创建了一个唯一标识符作为属性,并使用原型.down函数

      this.newParent.down('[identifier=elm1identifier]');
      
    2. 所以当然我使用这些的组合,但我很好奇,在所有方法中,这是最有效的性能。

      我听说$()实用程序方法搜索整个dom?这是一个显着的差异吗?如果你有很多元素怎么办?

      存储对元素的引用也可能导致内存问题,尤其是如果您在大型网站中有大量的javascript。

      使用唯一的自定义标识符也很不错,但您还添加了可能对dom本身产生影响的新属性。但是这个优点是您可以使用原型中的element.down()方法指定要搜索的位置。

      感谢帮助人员。

1 个答案:

答案 0 :(得分:0)

如果要创建一个应该代表DOM元素的对象,给它一个引用该元素的属性似乎是明智的,比如说“元素”。然后在 method1

this.element = elm;

我认为在这个阶段,微观优化性能是没有意义的,因为性能的最大改进是不使用Prototype.js。

$()方法首先是 document.getElementById 的别名(在浏览器中速度非常快,而且一直都是这样),其次为元素添加了便利方法回。如果浏览器没有实现基于原型的继承方案,Prototpye.js会将约50个方法作为属性直接添加到元素中,这是一个非常昂贵的操作。

我怀疑存储对元素的引用会导致严重的内存问题,除非你存储数万而不使用它们(毕竟它们只是引用)。

  

使用唯一的自定义标识符   也很好,但你也添加了新的   可能有效的属性   在dom本身

不要向DOM元素添加自定义属性或属性。 Prototype.js版本2.0正在远离这个模型(最后),只是不要这样做。如果您有一个表示(或“包装”)元素的对象,请将该属性添加到该元素。