Частные методы Javascript - как влияет память? - PullRequest
3 голосов
/ 10 февраля 2010

Я работаю над небольшим кодом, где пытаюсь скрыть некоторые закрытые переменные внутри замыканий. Дело в том, что среда довольно ограничена с точки зрения памяти, поэтому я также обеспокоен тем, чтобы общая площадь классов была низкой.

Каково влияние использования замыканий для скрытия переменных и методов частного экземпляра по сравнению с простым раскрытием всех методов и переменных объекта? Будет ли экземпляр того, кто использует замыкания, занимать больше памяти, чем экземпляр, который не использовал замыкания? Если да, то сколько еще памяти я буду использовать?

мой код будет выглядеть так

function Foo() {
   // private variables
   var status = 3;
   var id = 4;
... 
...

   // private methods
   var privateMethod = function () {
      // do something awesome
   }
   ...

   // a whole bunch of these


   // public methods

   this.publicDriver =  function () {
        privateMethod();
   }
    .. a few more of these

};

Versus

function Bar() {
   // only define public variables
   this.x = 1;
   this.y = 3;
}

Bar.prototype.method1 = function () { 
// blah;
}

.... Продолжаем и определяем все остальные методы.

Ответы [ 4 ]

1 голос
/ 11 февраля 2010

Хорошо, так что, как я вижу, конструирование класса с использованием случая закрытия создает новые функциональные объекты для каждого метода, определенного в конструкторе, в то время как способ назначения прототипа создает центральную функцию, которая является общей для всех экземпляров объектов. Центральный экземпляр затем интерпретируется для каждого объекта для правильных ссылок на переменные экземпляра.

Я предполагаю, что каждая функция, определенная в примере закрытия, ссылается на один и тот же кадр стека.

Тем не менее, в моем случае гораздо больше объектов, плавающих вокруг.

0 голосов
/ 11 февраля 2010

Тот факт, что переменные, заключенные в замыкание, могут обновляться извне замыкания в JavaScript, предполагает, что существует только одна копия переменной. Это означает, что нет причин, по которым при использовании замыканий в JavaScript должно быть какое-либо значительное влияние на память.

Если значения переменных были заморожены после создания замыкания, это было бы другой историей, поскольку это означало бы, что каждое замыкание должно иметь личную копию вложенных переменных.

С учетом всего сказанного, вы все равно должны выполнить фактические тесты, чтобы проверить: -)

0 голосов
/ 10 февраля 2010

Проверьте эти тесты. Хотя они являются тестами наследования, они должны дать вам представление о влиянии памяти, поскольку некоторые из них используют замыкания, а некоторые нет.

0 голосов
/ 10 февраля 2010

Следующая ссылка показывает информацию о некоторых советах по профилированию функций javascript для просмотра информации об их производительности:

http://ejohn.org/blog/function-call-profiling/

...