2017-12-07 7 views
0

従来、ブラウザはHTMLを解析し、関連するすべてのデータをサーバーに送信します。私のサーバーは、このWebアプリケーションを使用したいブラウザがすべてのリソースを必要としていることをすでに知っていますが、これは大量の要求を必要とする可能性があるため、私にとっては非効率的です。Webアプリケーション全体を1つのHTTPレスポンス(html、js、css、images、...)として送信します。

私はjsとcssがインライン化できると知っていますが、これはサーバー側のコードとimgデータを複雑にします。これはbase64がデータのサイズを膨らませています...すべてのアセットがダウンロードされる前に、潜在的には機能しなくなる可能性があります(実装に応じて)。私はまだ、アプリケーション全体を一度にストリーミングすることは、数十のリクエストを別々に行うよりも、接続が遅い方が速いはずだと感じています。

理想的には、サーバー全体を1つのHTTP応答にストリームしたいと考えています。

このモデルはありますか?
推論は意味がありますか?

ps:これに関するブラウザのサポートが完全に欠けている場合、私は2段階アプローチについて疑問に思っています。圧縮されたWebアプリケーションファイルをダウンロードし、抽出してリソースをページに埋め込む小さなJavaScriptをダウンロードします。このようなことをしている人は誰ですか?

更新 は、私は1つを見つけた:http://blog.another-d-mention.ro/programming/read-load-files-from-zip-in-javascript/

+0

この新しいモデルを使用するには、HTTPプロトコルを変更してブラウザを再設計する必要があります。 – Barmar

+0

ブラウザは多くのコンポーネントをキャッシュするので、毎回ダウンロードする必要はありません。 – Barmar

+0

@Barmar私は知っていますが、Webアプリケーションのバージョン全体をキャッシュすることもできます。データがajaxを介して取得される場合、アプリケーションは新しいバージョンのリリースごとに1回のみ変更されます。 – nus

答えて

0

私はWeb標準を変更することなく、可能思われるもので最良の結果を得るための方法を見つけるために関連した問題を調査するために始めた、と私は、キャッシングについて疑問に思いました。ページのすべてのサブリソースの最終更新日を初期HTMLページと一緒に送ることができれば、ブラウザーは少なくとも1回はすべてのリソースをロードした後に変更されたヘッダーを尋ねることを避けることができます。これは実際には、最初のリクエストでのみすべてのリソースを送信するよりも優れています。これは、ブラウザがキャッシュを使用するほうが良いため(Barmarが指摘したように)、最初のロードでのみ有益であり、 。

Web拡張機能を使用しても、if-modified-sinceヘッダーを取得できないため、サーバーに接続する代わりにキャッシュされたバージョンを使用するようブラウザに指示することはできません。

この投稿はFacebookから、静的ファイルをハッシュして1年間の有効期限を与えてトラフィックを削減しようとしたところにあります。これは、URLがファイルの内容をガーベージすることを意味します。彼らはまだ多くの不必要な修正された要求を見て、FirefoxとChromeにリロードボタンの動作を変更してもはや静的リソースをリロードしないように納得させました。 Firefoxの場合は、新しいcache-control: immutableヘッダーが必要です。Chromeの場合はそうではありません。

これまでのようなものを見たことがありましたが、リソースの内容をハッシュしてデータベースから少なくとも10年間サービスするよりも便利なこの問題の解決策があることが判明しました。これはファイル名の新しいバージョン番号です。さらに便利な解決策は、バージョンクエリ文字列を追加することですが、それはturns out that that doesn't always workです。

確かに、これらのファイルを参照するファイルも変更する必要があるため、ファイル名を常に変更することは迷惑です。ただし、ファイルは実際には変更する必要はありません。サーバーを制御する場合、logo.vXXXX.pnglogo.pngにリダイレクトされるようにリダイレクトルールを書くのと同じくらい簡単かもしれません(XXXXはエポックからの秒単位で最後に修正されたタイムスタンプです)[1]。今すぐあなたのテンプレートシステムは、ワードプレス 'wp_enqueue_scriptのようにタイムスタンプを自動的に生成させます。WordPressは、実際にはクエリ文字列技法で満足しています。これで、有効期限を遠からずに設定し、不変のキャッシュヘッダーを使用できるようになりました。ブラウザーがキャッシュコントロールを尊重している場合、etagsとif-modified-sinceヘッダーは完全に冗長になっているので安全に無視できるようになりました。

このソリューションは、ブラウザがキャッシュの検証を要求しないことを保証します。ただし、有効期限を事前に決定することなく、古いリソースは見られません。

クリーンなキャッシュで同じページのリソースをフェッチするために複数のリクエストを行う必要を回避する方法については、ここで元の質問には答えませんが、それ以降は(ブラウザのキャッシュがクリアされない限り)、 あなたは上手い!それが私のために十分だと思います。

[1]アプリケーションのバージョン番号を使用してページが参照するたびに、すべてのリソースのタイムスタンプをチェックするサーバーオーバーヘッドを回避することもできます。デバッグモードでは、開発のためにタイムスタンプを使用して、ファイルのすべての変更時にバージョンをバンプする必要がなくなります。

関連する問題