{ userId, picture, email, verificationCode } = data;
delete data.userId;
delete data.picture;
delete data.email;
delete data.verificationCode;
мы часто используем метод delete или добавляем новые поля объекта, иногда модифицируем новые поля, то-есть мы это всё делаем непосредственно уже в самом сервисе, а не когда Объект только вышел из фабрики или конструктора
Дайте совет, с точки зрение мономорфного написания кода, насколько это плохая практика писать код вот так, модифицируя объект на всем его пути пока он не попадёт к базе ?
Кстати ровно тоже самое мы делаем с request, у нас реквест мутируется по пути к контроллеру раза 5 на разных middleware, мы к нему дописываем различные поля, на сколько понимаю request - это такой же самый объект который лучше не модифицировать просто так
Скажите почему такая практика плохая с точки зрения производительности(может не только с точки зрения производительности, но еще есть какие-то причины)
и самое главное скажите как правильно писать код в таких ситуациях когда необходимо мутировать объект, создать просто новый объект и уже работать с ним ? А что если это request, мы же не будем создавать новый реквест
когда ты мутируешь обьект таким образом через удаление полей и добавлении новых полей происходит деоптимизация и код начинает работать на порядок медленней но возможно все равно не так критично медленней чтобы заметил человеческий глаз но деоптимизация происходит это факт
какая альтернатива, как правильно решать такие задачи ?
не мутировать / не удалять поля / не создавать поля пользоваться всегда const значения которые на развилках получать через функции и тд
к сожалению конст не запретит тебе добавлять, мутировать поля
может Object.freeze()
Если ещё не успели рассказать про hidden classes и деоптимизацию, которая возникает после delete, можешь погуглить про них Старый, но относительно актуальный доклад про hidden classes: https://youtu.be/SNs61SwZbTI Про деоптимизацию вроде был issue, но не помню как его искать, можешь поискать самостоятельно
Обсуждают сегодня