JavaScript 객체 의 속성 을 제거 할 때 delete 연산자 보다 undefined 나 null 값 으로 만드는 것이 낫다
Операторское удаление происходит неожиданно медленно!
Удалить - единственный верный способ удалить свойства объекта без остатков, но он работает примерно в 100 раз медленнее, чем его «альтернатива», при установке object [key] = undefined. Если вам важна производительность, используйте значение undefined. Это может дать серьезный импульс вашему коду. Ключ остается на своем месте в хеш-карте, только значение заменяется на undefined. Поймите, что цикл for..in по-прежнему будет перебирать этот ключ. В JavaScript нет способа принудительно выполнить сборку мусора, да и в этом нет необходимости. x.y = ноль; и удалите x.y; оба исключают ссылку x на предыдущее значение y. При необходимости значение будет собрано мусором. Единственный раз, когда я могу подумать о том, где вы предпочли бы удалить, - это если бы вы собирались перечислить свойства x. Если вы обнуляете свойство, оно по-прежнему считается «установленным» для объекта и будет перечислено.
Http://stackoverflow.com/a/21735614
https://stackoverflow.com/questions/1947995
https://bertanguven.com/preventing-memory-leaks-in -javascript-null-vs-delete /
https://perfectionkills.com/understanding-delete/
요약:
- удалить 는 단순히 객체 와 속성 과 의 연결 을 끊을 뿐 실제로 메모리 에서 제거 하는 것은 아니다
- удалить 하고 싶은 удалить 연산자 를 사용 하기 보다 값 을 null 이나 undefined 로 설정 하는 것을 추천 한다
- 단, 이 경우 hashmap 에서 ключ 가 삭제 되는 것은 아니라서 цикл for-in 을 사용 하거나, hasOwnProperty () 같이 ключ 의 존재 를 체크 하는 경우 ключ 가 드러나 긴 할거다. 하지만 значение === undefined 같은 식 으로 체크 하는 경우 는 문제 없을 거다.
- 스크립트 에서 gc 를 강제 로 트리거 할 방법 은 없고 브라우저 가 필요한 отметьте галочкой 에 알아서 한다.
성능 측정:
https://jindo.dev.naver.com/jsMatch/index.html?d=192&openResult=1