문제

나는 여러 개의 창을 동일한 정보와 동기화하고자하는 Firefox 확장 프로그램을 연구하고 있습니다. 툴바는 창을 열었을 때 주기적으로 정보를 위해 원격 서버를 쿼리합니다. Firefox Windows는 모두 별도의 독립적 인 환경이기 때문에 각각 고유 한 도구 모음을 사용하여 별도의 코드를 실행합니다. 여러 요청이 필요하지 않습니다. 각 Windows에 대해 하나의 요청이있을 수 있습니다. 문제는 여러 Windows 컨텍스트에 걸쳐 오버로드되는 글로벌 마스터 범위가 없으며 Windows 컨텍스트 만 있습니다. Windows 중 하나에 이미 알림 클래스가 실행되는 인스턴스가 있는지 확인하기 위해 공장 클래스를 작성하고 동일한 인스턴스를 사용하여 업데이트를받는 것이 좋습니다.

그것은 싱글 톤을 합법적으로 사용하는 것처럼 보이지만, 나는 그들이 어떻게 사악한 짐승에 대해 계속 읽고 있습니다. 이것은 괜찮은 용도입니까?

도움이 되었습니까?

해결책

문제는 각 Firefox 창이 JavaScript에 관한 한 완전히 별도의 프로세스라는 것입니다.

예, 효과가 있지만 조건부로 싱글 톤을 만드는 경우에만 가능합니다. 글로벌 스코프에서 무조건적으로 생성 된 경우 (내 경우, 최상위 확장 객체의 구성원으로서) 모든 Windows에있을 것입니다.

다른 문제는 Windows가 JavaScript를 시작하고 실행하는 데 시간이 걸리며 동기화와 같은 것이 없다는 것입니다. 창 2가 싱글 톤을 만들었는지 확인하기 위해 Window 1을 확인할 가능성이 전적으로 가능합니다. Window 2 확인 창 1을보고, 그렇지 않은 것을보고, 둘 다 자신의 싱글 톤을 만듭니다.

나는 경험에서 말합니다 : 나는 당신이하고 싶은 것과 매우 흡사하는 Firefox 확장을 썼습니다. 하나의 창만 원격 서버를 점검해야합니다 (그리고 하나의 창을 닫을 때 다른 모든 Windows에 정보를 제공해야합니다).

(광산에서는 스타트 업의 각 창이 다른 모든 창문을 쿼리하여 "마스터"창을 찾습니다.)

이 주위의 더 깨끗한 방법은 브라우저가 JavaScript에 노출시키는 것과 마찬가지로 서비스를 만드는 것입니다. 그러나이를 통해 JavaScript가 아닌 C로 코딩이 필요하며 연장 크로스 플랫폼을 설치하는 데 더 많은 고통을 겪습니다.

다른 팁

싱글 톤, 그 자체에는 본질적으로 잘못된 것이 없습니다. 문제는 (AB)를 사용하는 방법에 있습니다. 본질적으로 글로벌을 갖는 멋진 방법입니다. 싱글 톤을 사용하면 해당 데이터의 대부분을 독이하게하는 간접 수준이 있습니다. 그러나 때로는이 패턴이 특정 문제를 해결할 수있는 유일한 방법입니다. 이 경우 완벽하게 괜찮습니다. 그러나 달성하기 위해 약간 더 많은 코드/메모리/성능을 사용하는 다른 방법을 생각할 수 있다면, 가능하다면 그와 함께 갈 것입니다. 그렇지 않으면, 당신이 무엇을 얻는 지 알고있는 한 싱글 톤을 사용하는 데 아무런 문제가 없습니다.

싱글 톤 자체는 악하지 않습니다. 그것은 그들의 학대입니다.

나는 당신이 설명하는 분야에서 경험이 없습니다. 그러나 싱글 톤은 나에게 합리적인 선택을 좋아해 보인다.

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