문제

오늘 여기에 질문이 제기되었는데 명확한 답변이 없습니다.

모든 리소스 파일(CSS 및 Javascript)을 연결 및 축소하고 "마스터 페이지"에서 선언한다고 가정합니다.

다중 페이지 앱에서 CSS 파일이 변경되면 다음 전체 페이지 로드 시 재충전됩니다.

단일 페이지 앱에서 사용자는 며칠 동안 계속 작업할 수 있으며 CSS 파일이 선언된 기본 페이지를 다시 충전하지 않아도 됩니다.사용자는 Ctrl-F5를 실행할 때까지 변경 사항을 볼 수 없습니다.

누군가 이미 이것을 생각하고 공유할 경험이 있을 것이라고 확신합니다 :)

나에게 WebSocket을 사용하는 것은 옵션이 아닙니다.첫 번째는 너무 과도하고 두 번째는 모든 고객이 이 기술을 지원하는 것은 아니기 때문입니다.모든 WebSocket 대체에도 동일한 이유가 적용됩니다.이 때문에 계속 서버를 공격하지 않을 것입니다.

그럼 누구 아이디어 있나요?:)

그런데, 우리는 특정 솔루션에 도움이 될 수 있다면 AngularJS를 사용하고 있습니다.

감사해요!

도움이 되었습니까?

해결책

이 문제를 해결합니다. 의견을 나타내고 기준에 응답하지 않을 수있는 내 솔루션 :

FRONT-APP와 MY SERVER-APP를 패키지 할 때 앞면 앱의 현재 버전이 포함 된 구성 파일을 공유합니다.

전면 측면 : 내 경로의 75 %가 변경되면 WebService (Route Change Resolve)를 암시 적으로 호출합니다. 그래서 서버를 호출 할 때마다 Front-앱의 클라이언트 버전이 포함 된 사용자 지정 HTTP 헤더 (또는 GET / POST PARAM)를 포함합니다.

서버 측 : 나는 공유 구성 파일의 Front-App 버전으로 Front-App 버전으로 Front-App 버전 (사용자의 브라우저, SPA를 새로워 지거나로드 한 마지막 시간으로 로드됨)을 비교합니다.

  • 버전이 일치하는 경우 : 나는 아무것도하지 않습니다.
  • 버전이 일치하지 않으면 사용자 정의 HTTP 상태 오류 코드 (예 : 418)

그런 다음 앞면 : 418 오류 코드를 가로 챌 수있는 응답 인터셉터를 추가하고 전체 앱의 힘을 새로 고침합니다

. 기본적으로 Front-App 버전이 최신 인 경우 "확인"이벤트는 경로 변경입니다 (AJAX를 통해 WS를 호출하는). 그러나 당신은 각각 5 분 정도 전용 WS를 호출하는 무한 $ 간격을 추가 할 수 있습니다 ... 필요한 경우 몇 가지 코드를 추가 할 수 있습니다.

희망이 도움이됩니다.)

다른 팁

$route 서비스 및 공급자를 통해 AngularJS의 라우팅을 사용한다고 가정하면 다음을 사용할 수 있습니다. $routeChangeSuccess 변경해야 할 중요한 변경 사항이 있는 경우 서버 요청을 수행하는 이벤트입니다.있는 경우 window.location.reload()를 수행하여 페이지를 새로 고치고 업데이트된 모든 리소스와 HTML을 가져올 수 있습니다.

구현 방법에 따라 다음 프로세스가 변경될 수 있습니다.

1.앱 버전을 나타내는 구성 파일을 서버에 설정합니다.다른 파일에 대해 다른 버전을 할당하도록 선택할 수도 있지만 모든 리소스 파일을 연결했으므로 구성에서 버전 옵션을 제한할 수 있을 것 같습니다.

2.필요한 모든 정보(서버의 파일 버전)와 서비스에 저장된 현재 파일 버전을 확인하기 위해 서버에 대한 서버 요청을 수행하는 방법이 포함된 서비스를 만듭니다.

3.사용 $routeChange성공 단계에서 생성한 서비스를 사용하여 서버 요청을 수행하는 이벤트 2, 요청이 변경 사항이 있다는 유효한 확인을 반환한 경우 다음을 통해 강제 페이지 다시 로드를 수행합니다. window.location.reload().

나의 마지막 생각을 대답으로 추가하기로 결정했습니다.

우리는 지금 감소 된 솔루션을 위해 갔다.

이 응용 프로그램과 상호 작용하는 유일한 사람이 "프록시 서비스"가있는 "프록시 서비스"가 있으므로 모든 응답의 HTTP 헤더에 응용 프로그램 버전을 추가했습니다.우리가 최신 버전을 받으면 사용자에게 알림이 표시되고 전체 페이지 새로 고침이 발행됩니다 ...

이 솔루션은 자신의 "개인"서비스가없는 응용 프로그램에서 작동하지 않습니다.

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