単一ページアプリケーションでアプリケーションのバージョンの変更を検出します

StackOverflow https://stackoverflow.com//questions/23056808

質問

今日ここに提出され、私は明らかな答えを持っていません。

すべてのリソースファイル(CSSとJavaScript)を連結して軽減し、「マスターページ」に宣言しているとします。

マルチページアプリでは、CSSファイルが変更された場合、次のフルページロードに充電されます。

単一ページアプリでは、ユーザーは日数のために働き続け、CSSファイルが宣言されているメインページを払い戻しません。ユーザーは、CTRL-F5が発行されるまで変更を表示しません。

私は誰かがこれをすでに考えており、共有する経験を持っていると確信しています。)

私にとって、WebSocketsを使用することはオプションではありません。私のすべてのクライアントがテクノロジをサポートするわけではないため、最初にそれがoverkillとsecondだからです。同じ理由がすべてのWebSocketsのフォールバックに適用されます...私はこれのためにサーバーを打ち続けません。

だから、誰かのアイデア?:)

BTW、それが特定の解決策に役立つことがある場合はAngularyJSを使用しています。

ありがとう!

役に立ちましたか?

解決

これと同じ問題を踏み入れました。私の解決策を発音し、あなたの基準に反応しないかもしれません:

私のフロントアプリと私のサーバーアプリをパッケージ化するときは、現在のバージョンのフロントアプリを含む設定ファイルを共有します。

正面:私のルートの75%の変更は、WebService(Route Change Resolve)を暗黙的に呼び出します。そのため、サーバーを呼び出すたびに、フロントアプリのクライアントバージョンを含むカスタムHTTPヘッダー(または取得/投稿パラメータ)が含まれています。

サーバーサイド:フロントコンフィギュレーションファイルのフロントアプリバージョンでFront-Appバージョン(ユーザーのブラウザのもの、最後にロードされた最後のユーザーリフレッシュ/ロード)を比較します。

  • バージョンが一致した場合:私は何もしません。
  • バージョンが一致しない場合は、カスタムHTTPステータスエラーコード(たとえば418)

その後、418のエラーコードを傍受し、App全体の強制リフレッシュを行う応答インターセプターを追加しました

それはそれです。基本的には、前面版のバージョンが最新の場合は「チェック」した場合のイベントです(AJAXを介してWSを呼び出す)。しかし、5分ほどの専用のWSを呼び出す無限$間隔を追加することができます。 必要に応じていくつかのコードを追加できます。

これが助けを願っています;)

他のヒント

$ ROUTSサービスとプロバイダを介してAngularJSのルーティングを使用していると仮定すると、変更する必要があるかなりの変更がある場合は、$routeChangeSuccessイベントを使用してサーバー要求を実行できます。その後、window.location.reload()を実行してページを更新し、更新されたすべてのリソースとHTMLを取得できます。

次の処理は、実装方法に応じて変更できます。

1 。アプリのバージョンを示すサーバーに設定ファイルを設定します。さまざまなファイルに対してさまざまなバージョンを割り当てることもできますが、すべてのリソースファイルを連結しているため、バージョンオプションを設定に制限できると思います。

2 。サービスに保存されている現在のファイルバージョンを確認するために、必要な情報(サーバーからのファイルのバージョン)とサーバーへのサーバー要求を実行するためのメソッドを含むサービスを作成します。

3 $ routechangesuccess 作成したサービスを使用してサーバー要求を実行するイベントステップ 2 の場合、要求が変更されたことの有効な確認を返した場合、Force Pageはwindow.location.reload()を介してリロードします。

私は私の最後の考えをここで答えとして追加することを決めました:

今のところ解決策のために行きました。

「今のところ」(再び今のところ)このアプリケーションと対話する唯一の応答の唯一の応答のHTTPヘッダーにアプリケーションバージョンを追加しました。新しいバージョンを受け取ると、ユーザーに通知され、フルページの更新が発行されたポップアップが表示されます...

このソリューションは、独自の「プライベート」サービスを持っていないアプリケーションでは機能しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top