2014-07-11 2 views
4

저는 클라이언트 측에 Om을 사용하고 있습니다. 응용 프로그램의 수명 기간 동안 많은 구성 요소가 마운트/마운트 해제됩니다. 장착시 다양한 채널이 열립니다 (이동 블록). 그리고 IWillUnmount를 사용하여 그것도 닫을 계획입니다. 그러나 우선, 내 질문은 다음과 같습니다. 닫히지 않은 채널은 어떻게됩니까? 그들이 사용한 자원이 공개 되나요? 채널을 닫지 않으면 (컴포넌트를 마운트 해제 할 때) longrun에서 브라우저 성능이 저하 될 수 있습니까? 감사.브라우저에서 채널을 닫지 않았습니까?

답변

3

구현의 간단한 읽기에 따라, 폐쇄되지 않은 채널은 가비지 수집 대상인 경우 리소스를 사용하지 않아야합니다. 이는 발신자와 수신자 모두 참조를 유지할 수 없거나 수집 대상이되어야 함을 의미합니다.

채널을 닫을 때마다 해당 버퍼가 비어 있으며 닫힌 상태로 표시되므로 아무 것도 버퍼에 추가 할 수 없습니다. 버퍼에 메시지가없는 경우 열린 채널은 닫힌 것과 동일한 리소스를 사용합니다.

https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L110

관련 문제