Влияние и преимущества создания пустого объекта с помощью Object.создать(нуль)

прежде всего, я сделал быстрый тестовый случай jsperf, чтобы показать очевидное:
Object.create(null) намного медленнее, чем создание объекта с помощью {} синтаксис.
http://jsperf.com/js-object-creation-null-proto

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

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

является ли этот метод слишком рискованным для использования в библиотеке, где люди могут привести к heandle этот объект, который не владеет стандартными свойствами принести стандарт Object прототип?

кроме того, вы знаете другой (более быстрый) способ создать самый легкий js объект?

PS: Я сделал краткий тестовый случай, чтобы показать случай, когда использование Object.create(null) и доступ к свойствам немного быстрее, чем с {}.
http://jsperf.com/js-object-creation-and-accessing-properties

1 ответов


Я думаю, что создание объектов с Object.create(null) Как правило, ненужные и не стоит совместимость браузера и ясность вы жертвуете. При создании объекта с помощью {} синтаксис, который вы по сути делаете Object.create(Object.prototype), который создает объект с доступом к свойствам в Object.prototype. Это означает, что у вас есть доступ к методам как toString и hasOwnProperty непосредственно из объекта, но также может переопределить их, если вы хотите-хотя вы должны избегать этого, если это возможно. Что касается производительности, то разница очень small только с двумя свойствами на объекте (как показано на jsperf). Если бы у вашего объекта были сотни или тысячи свойств, разница была бы почти несуществующей.

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