2017-02-18 7 views
0

私はAngularJSで開発されたWebサイトを持っていて、index.htmlはアプリケーションのルートを提供しています。手動介入なしにangularJSで "index.html"を再ロードするにはどうすればいいですか?

すべてのJSとCSSのバージョンはindex.html自体に保存されています。つまり、ユーザーに反映させるための変更があれば、ブラウザで "index.html"を再読み込みします。ここに)。 これは問題です。ユーザーがブラウザでウェブサイトのタブを開き、新しいリリースを公開している可能性があるからです。このリリースは、「手動リフレッシュ」が実行されず、「index.html」が再ロードされないため、ユーザーが最新のリリースを使用しない可能性があります。

リリースが検出されると、すべてのリソースをリロードするためのフレームワークを作成しました。これは、Webサーバーから最新のバージョンを送信し、ブラウザの現在のバージョンと比較し、自動的にリロードをトリガーします。この修正はうまくいきますが、もう一度このリリースをすべてのユーザーのブラウザに公開する方法が問題です。

私はあなたの問題を願っていますか?そうでなければ私に教えてください。

+0

クライアントがブラウザに常に開いているWebサイトを持っている場合、この状況を処理するために何か手を差し伸べていないと、Webサイトの動作を制御する方法がありません。 ページを更新して、次にリソースが変更されたときに、そのページに対処するようにしてください。 –

+0

@ Omri Luzon:ありがとうございます。これは間違いなく最後の選択肢です。これを処理する可能性があるかどうかを確認したいだけですか? Btw私はWebサーバーとしてNginxを使用しています。これを達成するためにNginxで設定できるものはありますか? –

+0

私が知っている一般的なものではありません、 あなたのアプリケーションに固有のものでなければならないようです。 –

答えて

1

これはできません。開いているページに、その機能を実装するコードがまだない場合は、強制的にリフレッシュする方法はありません。ユーザーがそれ自身をリフレッシュするまで待つ必要があります。ブラウザキャッシュの有効期限が切れます。また、ユーザーとサーバー間の中間キャッシュもすべて更新されます。

「HTTPキャッシュ」についてよく知っているだけでなく、「キャッシュ無効化」についても検索することをおすすめします。一般に、index.html<script>タグ内の大きなファイルを参照する小さなファイルとし、index.htmlのキャッシュコントロールを非常に低く設定し、大きなファイルに対してキャッシュ無効化技術を使用することを検討してください。

最初のリリースでは、開いているタブや既存のキャッシュを無効にする方法はありません。これがあなたのサーバーに問題を引き起こす場合は、それを処理するさまざまな方法については、「APIバージョン管理」をお読みください。

0

あなたの問題が正しく理解されている場合サーバー上のコードを変更するときにページをリロードする場合

私もこのような状態になりました(このようなものではありませんが、このようなものではありません)。自分のアカウントへのユーザーログインがログインしているかどうかを確認する必要がありましたが、他のブラウザを使用したり、別のタブや地上のどこからでもログオンすると、ログオンした場所からログアウトする必要があります。その後、使用して、

は、だから私は、サーバー上のサービスを作成し、ユーザーが最初のログインは、私はunique idとのセッションを作成し、フロントエンドにunique idを戻したとき(いくつかの他にどこからユーザのログインは、新しく作成されたものと、このunique idを交換する場合) timeoutサーバーunique idで20秒ごとにpingを実行します。サーバunique idと私のunique idが同じであれば、彼はログインを維持します。そうでなければ、ログインページにリダイレクトします。

これで、同じロジックを問題に使用できます。あなたは、いくつかの変数を作成することができますし、あなたのコードを更新するかどうかを確認することができ、代わりにこの

$window.location.reload(); 

が、それはあなたのために働くことを願っていますページ 使用してログインするために彼をリダイレクトします。 :)

+0

次のリリースで同様の機能を実装しましたが、この実装をすべてのブラウザに公開する方法が問題です。すでに開かれているものを含む。 –

+0

それは私がやったことです、もしそれがオープンブラウザならサーバにpingして、あなたがスクリプトを変更したならtrueを返し、それが本当であればそれをリロードします。 –

+0

ブラウザにpingを送信するこのコードも一度公開する必要があります。どうやって?また、このコードは変更や保守点に関係なく毎回実行されるため、私たちのケースではオーバーヘッドであると感じています。思考? –

関連する問題