Javascript의 WeakMap
WeakMap
했습니다.WeakMap
는 더 강력한 형제인 Map
와 매우 유사한 방식으로 작동합니다. 키와 값을 제공합니다. 해당 키의 값을 검색해야 할 때마다 WeakMap
에서 가져올 수 있습니다.Map
와 WeakMap
의 차이점은 후자가 키에 대한 참조를 보유하지 않는다는 것입니다. 가비지 수집기가 메모리에서 키를 지워야 하는 경우 WeakMap
는 괜찮다고 말하고 키와 값은 동시에 클리어.캐싱
이 특성이 주는 힘은 메모리 누수 위험 없이 캐싱을 시작할 수 있다는 것입니다. 키를 수집할 준비가 된 경우 캐시는 GC 방식에 문제가 되지 않습니다.
weakMemoize
를 사용하여 캐싱 레이어로 함수를 장식하는 WeakMap
라는 고차 함수를 구현할 수 있습니다.function weakMemoize(toDecorate) {
const cache = new WeakMap()
return function (value) {
if (!cache.has(value)) {
cache.set(value, toDecorate(value))
}
return cache.get(value)
}
}
그런 다음 함수를 캐시하는 데 사용할 수 있습니다.
const getKeys = weakMemoize((value) => {
return Object.keys(value)
})
const obj = { a: 10, b: 20, c: 30 }
getKeys(obj)
// second time the value is read from the cache.
getKeys(obj)
obj
또는 getKeys
가 범위를 벗어날 때마다 가비지 수집기도 맵에서 값을 수집하기 때문에 이것의 메모리 소비에 대해서는 걱정하지 않습니다. 내 함수 구현에 추가 복잡성 없이 두 번째 실행Object.keys
을 피하고 있습니다.고려 사항
고려해야 할 몇 가지 사항. A
WeakMap
키는 객체( object
또는 Array
)만 될 수 있으며 기본 값을 키로 사용할 수 없습니다.또 다른 고려 사항은 수명이 긴 개체가 있는 경우 이와 같은 것을 캐싱하는 것이 그다지 유익하지 않을 수 있으며 많은 개체가 메모리에 유지된다는 것입니다. LRU 캐시 사용을 고려하십시오.
또한 자신의
weakMemoize
를 구현할 필요가 없으며 npm 에 좋은 구현이 있습니다.읽어 주셔서 감사합니다!
내 게시물에 문제가 있습니까? 에 댓글을 달거나 연락해 주세요.
Reference
이 문제에 관하여(Javascript의 WeakMap), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/l2zg7e/weakmap-in-javascript-54i3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)