У объектов, созданных как литералы, возникает скрытый класс так же, как при использовании конструктора? Как влияет удаление свойства (например, через delete) на этот скрытый класс, согласно прочитанной статье?
Лично я столкнулся с этим вопросом в разработке и пришёл к выводу, что скрытые классы создаются как для объектов, заданных литералом, так и через конструкторы – V8 пытается оптимизировать структуру. Но если удалить свойство через delete, это сильно портит оптимализацию, так как создаётся новая, не такая оптимизированная структура объекта. Поэтому, если хочешь быстродействия, постарайся не менять форму объекта после его создания.
Скрытые классы формируются и для литералов, и для объектов, созданных через конструкторы. Опыт подсказывает, что удаление свойства меняет shape объекта, что заставляет движок пересобирать оптимизации и может снизить производительность. Стоит заранее продумывать структуру объектов и избегать изменений, если важна скорость исполнения, а если нужен delete – лучше сразу ставить undefined.
Интересно, как V8 вообще обрабатывает подобные изменения. У меня тоже возникали вопросы, насколько частое удаление свойств может замедлять работу. Кто-нибудь экспериментировал с массовым добавлением и удалением? Будет любопытно узнать реальные результаты подобных тестов.