Rich UI 메모리 관리

메모리 누수를 방지하기 위해 두 가지 메모리 관리 함수를 사용할 수 있습니다. 누수는 애플리케이션을 느리게 하며 브라우저를 손상시킬 수 있습니다.

이 문제는 함수 내에서 위젯 또는 임베디드 핸들러를 선언하는 경우에 주로 발생합니다. 이러한 인 함수 선언은 런타임 시 메모리를 할당합니다. 함수가 종료된 후에도 브라우저는 사용자가 브라우저 탭을 닫은 후에만 운영 체제에 메모리를 리턴합니다.

각 메모리 함수에서는 브라우저가 메모리를 리턴하도록 요청합니다. 일반적으로 브라우저는 지연 후 애플리케이션이 실행되는 동안에 요청을 이행합니다.

함수는 다음과 같습니다.

어떤 함수도 값을 리턴하지 않습니다.

여기서 설명된 문제에 대한 영향을 받는 경우 다음 코딩 규칙을 고려하십시오.
  • 메모리 관리 함수를 사용하여 더 이상 사용되지 않는 할당 메모리를 리턴하십시오.
  • 익명의 선언을 임베드하는 이름 지정된 위젯 named container에 대한 액세스 권한이 있는 경우 함수에서 익명의 선언을 사용하십시오.
    예를 들어 사용자가 페이지 영역 위에 마우스를 올리면 표시되는 도구 팁 상자를 고려해 보십시오. tooltip provider는 표시할 상자를 리턴하는 함수이며, 해당 함수의 코드는 다음과 같을 수 있습니다.
    Function myProvider (widget any in) returns(Box) 
       return (new Box {children = [new Button{text = "Memory leak"}]});
    end

    이 예에서 도구 팁 제공자는 함수 외부에서 참조할 수 없는 상자를 작성하고 이 상자는 익명의 위젯을 포함합니다. 상자를 참조할 수 없다는 것은 상자 또는 메모리 관리 함수에 대한 익명의 하위 요소를 전달할 수 없음을 의미합니다.

    이 예에서 문제를 방지하려면 도구 팁 제공자 외부에 상자를 선언하십시오.
    myBox Box{};
    Function myProvider (widget any in) returns(Box) 
       myBox.children = [ new Button{text = "Problem solved"} ];       
       return(myBox);
    end
    다음 예에서와 같이 애플리케이션의 다른 위치에서 myBox를 메모리 관리 함수에 전달할 수 있습니다.
    UtilLib.destroyWidgetChildren(myBox);
  • removeChild 또는 removeChildren 함수를 사용하여 DOM 트리에서 위젯을 제거한 후 해당 위젯에 할당된 메모리를 제거하십시오. 해당 함수에 대한 세부사항은 “위젯 특성 및 함수”를 참조하십시오.