vue 사용자 정의 명령으로 인한 메모리 유출 문제 해결
다음 코드를 참조하십시오.
directives: {
scroll: {
inserted (el, cb) {
// ||
if (el.nodeType !== 1 || !cb) return
let direct = 'down'
let rollHeight = 0
let getScrollEventTarget = (target) => {
while (target.nodeType === 1 && target.tagName !== 'BODY' && el.tagName !== 'HTML') {
var overflowY = getComputedStyle(target).overflowY
if (overflowY === 'scroll' || overflowY === 'auto') {
return target
}
target = target.parentNode
}
return window
}
let targetNode = getScrollEventTarget(el)
let scrollListener = () => {
if (targetNode.scrollTop > rollHeight) {
direct = 'down'
} else {
direct = 'up'
}
rollHeight = targetNode.scrollTop
cb.value(rollHeight, direct)
}
el.unbindEventListener = () => {
targetNode.removeEventListener('scroll', scrollListener)
}
targetNode.addEventListener('scroll', scrollListener)
},
// unbind (el) {
// if (el.unbindEventListener) {
// el.unbindEventListener()
// }
// }
}
}
처음에 나는 주석의 unbind 방법을 잊어버려서 메모리 유출이 발생했고 원소에 연결된 scroll 방법은 메모리에 계속 존재할 것이다.예를 들어 내가 페이지에 들어가 3페이지로 스크롤하고 나가서 한 페이지를 더 누르면 4페이지로 스크롤할 때 두 번, 한 번은 지난 페이지의 4페이지, 한 번은 이번 페이지의 4페이지, 당신이 퇴장하고 다시 한 페이지, 5페이지로 스크롤할 때 세 번(지난 페이지, 위 페이지와 이 페이지)을 요청하는 것이 전형적인 사건 미해결로 인한 메모리 유출이다.
그래서 원소의 묶음을 풀어줘야 합니다. vue 명령에 unbind 갈고리 함수를 제공하면,
하지만 여기에는 여전히 기술적인 묘점이 있다.
1. 우리 scroll의 원소는 귀속된 원소의 상위 등급일 수 있습니다. 한 층 한 층 위로 찾아야 합니다.
2. 묶음을 풀 때 우리도 그 부급 원소를 찾아야 한다. 그리고remove에 대응하는 방법이 필요하다. 그러면 unbind에서 다시 한 번 쓸 수 없기 때문에 insert 갈고리 함수에서el에게 묶음 해제 사건el을 묶을 수 있다.unbindEventListener, unbind 갈고리 함수에서 직접 호출하면 됩니다.
이상의 vue 사용자 정의 지령으로 인한 메모리 유출 문제를 해결하는 것은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.