Метод прототипа Javascript в сравнении с эталонной производительностью - PullRequest
0 голосов
/ 27 мая 2011

Привет, ребята, у меня вопрос,

Я пытаюсь найти наиболее эффективный с точки зрения производительности способ хранения и доступа к элементу в библиотеке прототипов 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. Я могу передать элемент в методе в качестве параметра, но эта опция не всегда будет доступна

  1. Я создаю уникальный идентификатор в качестве атрибута и использую функцию прототипа .down

    this.newParent.down('[identifier=elm1identifier]');
    

Так что, конечно, я использую их комбинацию, но мне любопытно, что из вневсе методы, которые являются наиболее эффективными с точки зрения производительности.

Я слышал, что служебный метод $ () ищет весь домен?Это существенная разница?Что делать, если у вас много элементов.

Хранение ссылок на элементы может также вызвать проблемы с памятью, особенно если у вас много javascript на большом веб-сайте.

с использованием уникального и пользовательского идентификаторатоже неплохо, но вы также добавляете новые атрибуты, которые могут влиять на сам домен.Но это преимущество в том, что вы указываете, где вы хотите искать, используя метод element.down () в прототипе.

Спасибо за помощь, ребята.

1 Ответ

0 голосов
/ 27 мая 2011

Если вы создаете объект, который должен представлять элемент DOM, кажется разумным дать ему свойство, которое ссылается на элемент, скажем, «элемент». Тогда в method1 :

this.element = elm;

Я думаю, что на данном этапе микрооптимизация для производительности не имеет смысла, так как самым большим улучшением производительности было бы не использовать Prototype.js.

Метод $ () , во-первых, является псевдонимом для document.getElementById (который невероятно быстр в браузерах и всегда был), а во-вторых, добавляет удобные методы к возвращаемому элементу. Если браузер не реализует схему наследования на основе прототипа, Prototpye.js добавляет около 50 методов непосредственно к элементу в качестве свойств, что является довольно дорогой операцией.

Я сомневаюсь, что хранение ссылок на элементы вызовет значительные проблемы с памятью, если вы не храните десятки тысяч и не используете их (в конце концов, они просто ссылки).

с использованием уникального и пользовательского идентификатора тоже приятно, но вы также добавляете новые атрибуты, которые могут оказать влияние на самого дома

Не добавлять пользовательские атрибуты или свойства к элементам DOM. Prototype.js версии 2.0 уходит от этой модели (наконец-то), просто не делайте этого. Если у вас есть объект, который представляет (или «оборачивает») элемент, добавьте к нему свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...