programing

Angularjs pubsub vs $broadcast

coolbiz 2023. 4. 1. 00:04
반응형

Angularjs pubsub vs $broadcast

Angularjs에서 이벤트 패싱에 대해 자세히 읽어봤는데 $broadcast를 사용하는 것이 좋은 생각이라고 생각하지 않습니다.

이런 블로그는 '과잉 살상'이라고 느껴지더라도 '$on'에 익숙해지는 것을 옹호한다.

다만, 실장에서는 스코프의 깊이 우선 트래버스가 사용되고 서브 스크라이버가 검색되기 때문에, 이벤트의 속도는 트리 구조에 의존합니다.다음은 각진 부분의 코드입니다.

// Insanity Warning: scope depth-first traversal
// yes, this code is a bit crazy, but it works and we have tests to prove it!
// this piece should be kept in sync with the traversal in $digest
if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
   while(current !== target && !(next = current.$$nextSibling)) {
     current = current.$parent;
   }
}

또한 이러한 방법으로 의존성 주입을 해킹할 수 있을 것 같습니다.

대체 방법은 단순히 이벤트유형과 콜백을 캐시하여 직접 콜하는 서비스입니다.이를 위해서는 누수를 방지하기 위해 구독을 정리해야 합니다.

질문입니다. $broadcast/$on 패러다임의 동기에 대해 제가 놓치고 있는 것이 있습니까?아니면 좀 더 전통적인 펍서브에 비해 그것을 사용하는 것이 이득이 있나요?

제 질문이 명확하지 않으면 알려주세요. 시간을 내주셔서 감사합니다.

난 네가 아무것도 놓치고 있다고 생각하지 않아.각 접근 방식의 장단점을 성공적으로 설명했습니다.

$broadcast/$on어프로치는 구독을 취소할 필요는 없지만 모든 범위에 브로드캐스트되므로 그다지 효율적이지 않습니다.또한 진입 장벽이 매우 낮습니다.서비스를 주입할 필요도, 생성할 필요도 없습니다.그들은 모두에게 방송하기 때문에 더 간단한 접근법이다.

펍/서브 접근법은 훨씬 더 직접적이다.이벤트는 서브스크라이버만이 취득하기 때문에 시스템 내의 모든 범위에서 동작하는 것은 아닙니다.단, 콜백핸들러를 사용하여 서비스를 기술해야 하고 가입 해제를 기억해야 하기 때문에 더 복잡합니다.내 생각에 구독을 취소해야 한다는 기억은 꽤 큰 것 같아.이걸 제대로 못 맞추면 메모리 누수가 생길 수 있어요.그리고 3개월 후에 문제가 될 때까지 알 수 없습니다.

내장된 접근 방식이 왜$broadcast.

저도 같은 문제를 보고 있었어요.특히 $rootScope에 액세스하지 않고 서비스를 통해 이벤트를 브로드캐스트 및 구독할 수 있도록 하는 방법(몇 가지 이유로 좋지 않음).http://millermedeiros.github.io/js-signals/의 매우 뛰어난 js-module 구현을 이용하여 각진 서비스로 포장하였습니다.

github의 요지는 이쪽:https://gist.github.com/anonymous/b552c7fafa77427e6d06

언급URL : https://stackoverflow.com/questions/21638563/angularjs-pubsub-vs-broadcast

반응형