문제

프로토 팁 및 프로토 타입으로 만든 툴팁을 동적으로 업데이트하려고합니다. 내가이 작업을 수행하는 방식은 아마도 가장 좋은 방법이 아닐 것입니다 (따라서 도움이 될 수있는 더 나은 방법을 알고 있다면). 툴팁을 업데이트하기 위해 DIV 요소 내부의 JavaScript. 그러나 JavaScript가 업데이트 될 때마다 새로운 팁 개체가 작성되어 메모리에 저장되므로 메모리 누출로 보입니다. 더 나은 방법이 없다면 어떻게 메모리를 지울 수 있습니까?

메모리 누출을 테스트하기 위해이 간단한 스크립트를 만들었습니다. 이제이 예에서 메모리 누출이 패치되도록하는 방법을 알아 내야합니다.

for (i=0; i<1000; i++) {
    $('testdiv').update("<script type='text/javascript'> new Tip('chips_tip', 'Your Chips', {style: 'creamy',stem: 'topLeft',hook: { mouse: true, tip: 'topLeft' },offset: { x: 10, y: 16 },delay: 0.04,width: 85}); <\/script>");
}

다음은 툴팁의 JavaScript가 일반적으로 다음과 같습니다.

new Tip('element', "Description", {
    style: 'creamy',
    stem: 'topLeft',
    hook: { mouse: true, tip: 'topLeft' },
    offset: { x: 10, y: 16 },
    delay: 0.04,
    width: 85
});
도움이 되었습니까?

해결책

새 팁 구성은 툴팁 텍스트 대신 매개 변수로 요소를 취할 수있는 것 같습니다. 당신은 그것을 사용하고 싶을 수도 있습니다. 나는 이것을하지 않았으므로 스스로 시도해야합니다. 먼저 툴팁 레이아웃 (툴팁 텍스트 포함 DIV 태그)을 만들고 평소와 같이 스타일을 지정하십시오. 이 div의 스타일 속성을 "display : none"으로 설정하십시오. 그런 다음 다음과 같은 팁을 작성하십시오.

new Tip('source', $('tooltip_container'));

그런 다음 다음을 사용하여 툴팁의 텍스트를 변경할 수 있습니다.

$('tooltip_container').update('new tooltip text');

Prototip이 자체 툴팁 HTML 물건을 DOM에 삽입하는 것처럼 보이기 때문에 툴팁 구성을 전 세계 공간의 변수에 할당하는 것만으로는 충분하지 않습니다. 내 생각에 당신이 "새 팁"을 부를 때마다 당신은 DOM에 추가 HTML을 추가하고 있다고 생각합니다. 이 객체는 DOM 노드를 참조하여 수집되지 않습니다. DOM을 검사하기 위해 테스트 코드와 Firebug를 사용하여 확인할 수 있어야합니다.

최종 옵션은 Prototip 소스 코드를보고 일종의 settooltiptext 함수가 있는지 확인하는 것입니다. 그러면 다음과 같은 일을 할 수 있습니다.

var tooltip = new Tip('element', 'text');
// snip
tooltip.setText('some new text');

도움이되지 않으면 프로토 팁의 저자에게 이메일을 보내십시오. 나는 그가 도와 드리겠습니다.

다른 팁

보시다시피, 단순히 새 팁을 인스턴스화하면 새로운 팁 개체가 메모리에 만들어져 저장됩니다.

이 문제를 해결하려면 글로벌 범위에서 팁을 고유 한 변수에 할당해야합니다. 즉, 변수 "툴팁"을 인스턴스화 한 다음 루틴에서 "툴팁 = 새 팁"을 사용하여 한 번에 하나의 툴팁 만 사용할 수 있습니다. ). 쓰레기 수집은 나머지를 돌봐야합니다.

"팁"객체를 인스턴스화함으로써 실제로 생성자 호출 (예 : 간단한 함수 호출)을 수행하는 경우, 시각적 요소를 처리하고 업데이트하는 간단한 기능 호출을 수행하지만이 객체는 가비지 수집기가 수집 해야하는 변수에 의해 참조되지 않으면이 개체가 참조되지 않습니다. 다음을 수행 할 수 있는지 확인하고 싶다면 다음을 수행 할 수 있습니다.

var tip = new Tip( whatever);
// before next update do delete tip;

이것은 실제로 프로토 타입에서 메모리 누출 인 것 같습니다. 이것에 따르면, 누출은 1.6.1로 고정됩니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top