2012-04-02 22 views
5

ウェブの世界では、Webブラウザは取得しなければならないすべての静的ファイルに対して新しい要求を行います。スタイルシート、javascriptファイル、インラインイメージ - すべて新しいサーバー要求を開始します。私のウェブ知識はかなり良いですが、ウェブソケットのような基盤技術は、彼らがどのように働いているのか、何ができるのかという点で私には新しかったです。理論:WebSocket経由で静的コンテンツを提供することは可能か実行可能ですか?

私の質問は理論的ですが、今は可能か、websocket経由で静的ファイルを提供することが可能か疑問に思っていますか? Webソケットはクライアント(Webブラウザ)からサーバーへの永続的な接続であることを考慮すると、静的コンテンツではないにしてもいくつかのサービスを提供するためにWebソケットを使用することができます。

少し明確にする。

私は接続に関する私の言い回しが以下のGregによって指摘されたように間違っていたことを認識します。しかし、私が理解しているのは、CDNが作成され、今日でも使用されている理由から、同時ダウンロードの数に厳しい制限があるブラウザーやサーバーの問題に対処することです。ページ読み込み時間。私は彼らもクッキーレスのリクエストを提供するために作成されたことを知っています。だから本当に私の質問は: "CDNの代わりにウェブソケットを使うことができますか?"

BrowserScopeにはいくつかの有用な指標がありますが、ほとんどの最新のブラウザやIE8でもリクエスト制限は約6です。しかし、私は時々人々が6以上のリソースを持っていると言いましたが、これは待ち行列に入れられ、ウェブソケットが潜在的にこれを1に減らす可能性があるページの読み込み時間を遅くするということですか?

+1

最初の仮定は間違っています - 各イメージなどは別々の* HTTPトランザクション*であり、必ずしも別個の要求ではありません。 [HTTP持続接続](https://en.wikipedia.org/wiki/HTTP_persistent_connection)を参照してください。 –

+0

これは可能です。 IIRC、Webブラウザとサーバーは、おそらく10年以上前に接続の使用を最適化しました。各ファイルに対して新しい接続を開かない。 – gbulmer

+0

あなたは正しいグレッグであり、私の質問の一部が間違っています。永続的な接続にはまだ限界がありますが、そうですか?したがって、15個の静的ファイル(実際には高い数ではありません)を使用している場合は、限界を超えています。 WebSocketを使用して、ファイルを最大限迂回して高速に処理することができますか、またはWebソケットの機能を熟考していますか? –

答えて

6

それは間違いなく可能ですが、あなたはおそらく静的なリソースのためにこれを使用したくないいくつかの理由があります。

  • あなたは、静的意味標準のHTTPメカニズムを介して配信される少なくとも1つのリソースを必要としますとにかく静的リソースを提供できるものが必要です。一般的にはJavascriptをHTMLと区別して別の静的なロードを意味します。または、あなたは面倒なことがあり、メインページに埋め込まれたWebSocketコードを置くことができます。
  • ページ上のスクリプトの実行が開始されるまで、WebSocket接続を開くことはできません。 WebSocket接続を確立すると、初期レイテンシが追加されます。
  • ほとんどのブラウザでは、競合しない静的リソースが並列に読み込まれます(古いブラウザの中には、並列接続の数に厳しい制限がありますが、まだまだ並列化されているものがあります)。さまざまな静的リソースに対して複数のWebSocket接続を開くことができますが、これを確実かつ効率的に行うことは、多くの労力を要します。ブラウザは静的リソースのためにこれらの問題のほとんどをすでに解決しています。
  • 各WebSocket接続は、保証された注文メッセージベースの転送です。 Javascriptの実行のシリアライズされた性質と合わせて、これは事実上、一度に1つのWebSocketメッセージを処理することを意味します。 Web Workerを使用すると、複数のWebSocket接続を並行して処理できるようになりますが、メインレンダースクリプトは引き続きこれらの接続を介してシリアル化されます。確かにこれを効率的にすることはできますが、もう一度、これは簡単な問題ではなく、ブラウザーはこれらの静的なリソースローディングの問題をすでに解決しています。
  • 多くのWebサーバーは、gzipingリソースを配信する前にサポートしています。 WebSocketにはまだ圧縮サポートがありません(ワーキンググループの拡張機能として議論されています)。つまり、WebSocketを介してリソースを圧縮する場合は、Javascriptでこれを行う必要があり、待ち時間が長くなります。

静的リソースを使用して動的に更新されるページ(HTML5キャンバスゲームに新しい画像を読み込むなど)がある場合は、既に確立されているWebSocket接続のレイテンシが低いため、WebSocketが最適ですサーバーからの更新をプッシュしてからHTTP経由で配信するためのオーバーヘッド。しかし、最初のページを読み込むときに初期静的リソースとしてWebSocketを使用することはお勧めしません。

3

この答えは本当にあなたのウェブソケットの質問には対応していませんが、それはそれは時代遅れにすることがあります。

単一の接続を介して複数の資産を転送する問題を解決することになっている次世代の技術がある、SPDYです現在、HTTP 2.0の候補です。 ChromeとFirefoxに実装されており、既にGoogleやTwitterなどの実験的なサーバ側のサポートがあります。

+0

SPDYプロトコルは本当に私の疑問を時代遅れにしています。理論的には、静的資産を提供するためにウェブソケットが機能する一方で、複数のブラウザ間でサイトが正常に動作するのに費やす時間はほとんどかかりません。 –

関連する問題