Тесты Javascript при тестировании различных эмуляций класса - PullRequest
1 голос
/ 14 февраля 2012

Я прочитал статьи, в которых говорится:

  • с использованием prototype будет самым быстрым, поскольку объявленные функции являются общими.более подробно было объяснено в этой статье , где касание собственного прототипа JS увеличит производительность по сравнению с использованием 'imparvisions'.

  • замыкания должны работать хуже поскольку каждое его создание возвращает отдельную копию набора функций и переменных.

  • объекты (функции) являются своего рода замыканиями, но с this.имеет контроль доступа (публичный / частный).они должны быть лучше, чем замыкания .

  • литералы объектов (выглядящие как JSON) действуют как объекты, но не имеют чувства конфиденциальности.они сопоставимы со статическими методами в JAVA.У меня нет статьи, на которую можно сослаться, я просто включил ее для сравнения.

Я тестировал простое сравнение 4 методов с использованием jsperf в построении "Классов" передЯ продолжаю свой проект, и я с нетерпением ждал победы прототипов.однако замыкания бьют их руки вниз.Как так?Есть ли здесь что-нибудь дать?Невидимый уклон?

Возможно, я не новичок в JS, но я совершенно новичок в этих концепциях оптимизации, пожалуйста, потерпите меня.я все еще изучаю эти вещи.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

Это не дано, что "закрытия должны работать хуже".Замыкания заставляют каждый объект получать свою собственную копию функции.Но если у вас достаточно памяти, это не должно вызывать проблем с производительностью.Во всяком случае, замыкания могут быть даже быстрее, потому что им не нужно идти по цепочке прототипов, чтобы найти свойство, они всегда находятся на первом уровне прямо на объекте.

Реальным недостатком замыканий является использование памяти, а не скорость.При создании тонны объектов это может стать проблемой.

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

1 голос
/ 14 февраля 2012

Разница в том, что замыкания ищутся в цепочке областей действия, свойства во внутренней цепочке прототипов.Несмотря на то, что оба они являются в основном поисками свойств объекта (один использует объекты активации, а другие - простые объекты), может оказаться, что протестированные вами UA оптимизированы больше для одного, чем для другого.

PS В IE8, прототипы быстрее в этом примере.

...