SPA에서 ActiveX의 메모리할당이 해제되지 않는 경우

2016. 10. 18. 12:57Programming/JavaScript

반응형

  보통 ActiveX는 페이지가 닫힐 때 메모리 할당이 해제되며, 소멸자까지 실행된다. 그러나 만약 원 페이지 웹을 사용한다면 어떨까? 메모리 할당이 해제될 수도 있고, 안될수도 있다. 나의 경우에는 AngularJS를 이용하여 구현한 원 페이지 웹에서, 이러한 증상이 발생했다. 놀랍게도 해당 증상이 발생한 PC와 동일하게 설정한 후 테스트했으나, 증상이 재현되지 않았다. 아무래도 브라우저 설정에 따라 달라지는 것 같은데, 캐시 등에 페이지를 전환하면서 ActiveX의 소멸자를 호출하지 않는 듯한 증상을 보였다.

  당시의 ActiveX는 영상을 스트리밍해서 화면에 출력하는 형태로, 소멸자가 호출됨과 동시에 스트리밍 세션이 종료되도록 구현되어있었다. 그러나 페이지를 전환하더라도 스트리밍 세션이 최대 세 개까지 유지됐으며, 이후 네 번째 스트리밍 세션을 연결하려고 시도할 경우 브라우저가 응답하지 않거나 혹은 종료되었다.

  여하튼 잡설이 길었고, 나의 경우에는 페이지를 전환할 때마다 다음의 코드를 실행하도록 하여 해결했다.


var activex = document.getElementById("id_activex");
activex.parentNode.removeChild(activex);
angular.element(activex).empty();
delete activex.prototype;


  이후 페이지가 전환될 때 ActiveX의 메모리할당이 정상적으로 이뤄졌으며, 다시 ActiveX를 호출했을 시 전송량이나 혹은 메모리 사용량이 두 배로 늘어나는 현상도 발생하지 않았다. 물론 브라우저가 죽는 현상도 발생하지 않았다. 

반응형