В JavaScript какой метод создания объекта со свойствами наиболее эффективен? - PullRequest
3 голосов
/ 05 декабря 2011

Я немного новичок в JavaScript.Я использовал его здесь и там на стороне клиента некоторое время, но теперь я вхожу в Javascript на стороне сервера.Этот вопрос касается объектов Javascript, их создания и эффективного определения их свойств.

Я видел (несколько раз), что создание объекта как var o = {}; теперь предпочтительнее, чем var o = new Object(); из соображений производительности.,Существуют ли различия в производительности при добавлении свойств к объекту?

Например, есть ли разница в производительности между этой ситуацией:

var o = {
  thing1: "yardigooven",
  thing2: "goovenyardi",
};

и этой ситуацией?:

var o = {};
o.thing1 = "yardigooven";
o.thing2 = "goovenyardi";

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

Спасибо.

Ответы [ 2 ]

11 голосов
/ 05 декабря 2011

Прежде всего, var o = {}; и var o = new Array(); - это не одно и то же.Первый инициализирует объект, второй массив.var o = {}; и var o = new Object(); эквивалентны.

Теперь о производительности использования литерала объекта вместо добавления свойств после.Какой из них самый быстрый?Ответ в том, что нам все равно, и вам тоже не следует. Если разница в производительности, она будет настолько мала, что никогда не повлияет, даже если вы создадите 1 миллион объектов одновременно, что вряд ли когда-либо произойдет.

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

Ради полноты, вот тест, который я запустил на jsperf .В моем браузере, Chrome 15, инициализация литерала объекта была на 53% быстрее.Вау, 53%, это огромно, верно?Если вы не наведете указатель мыши на всплывающую подсказку для теста, который использует свойства после инициализации, вы увидите, что он говорит что-то вроде

Выполнено 681 285 раз за 0,077 секунды.

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

3 голосов
/ 05 декабря 2011

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

Однако на основе этого эталонного теста JSPerf и размер выборки один (в Chrome / Mac OS X), буквенная форма объекта (o = {foo:'bar'}) на намного быстрее, чем установка свойств после построения (o={}; o.foo='bar').

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