ホームページ >ウェブフロントエンド >jsチュートリアル >HTTP/2サーバープッシュについて

HTTP/2サーバープッシュについて

php中世界最好的语言
php中世界最好的语言オリジナル
2017-12-30 18:00:232416ブラウズ

HTTP/2 サーバー プッシュについて話す前に、HTTP/2 は HTTP/1.x の多くの欠点を解決するように設計されていることをまず知っておく必要があります。現代の Web ページでは、HTML、スタイルシート、スクリプト、画像など、多くのリソースが使用されています。 HTTP/1.x では、これらのリソースはそれぞれ明示的にリクエストする必要があります。これは時間がかかるプロセスになる可能性があります。したがって、ブラウザは HTML を取得することから始めて、ページを解析して評価するにつれて徐々にリソースを取得します。サーバーはブラウザがすべてのリクエストを行うまで待機する必要があるため、ネットワークはアイドル状態になり、十分に使用されていないことがよくあります。

レイテンシーを改善するために、HTTP/2 ではサーバー プッシュが導入されました。これにより、ブラウザーが明示的にリソースを要求する前に、サーバーがブラウザーにリソースをプッシュできるようになります。サーバーは多くの場合、ページに多くの追加リソースが必要であることを認識しており、ブラウザーの最初のリクエストに応答するときにそれらのリソースのプッシュを開始できます。これにより、サーバーはアイドル状態の可能性があるネットワークを最大限に活用できるようになり、ページの読み込み時間が短縮されます。

serverpush.svg.png

プロトコル層では、HTTP/2 サーバーのプッシュは、push_promise フレームによって駆動されます。つまり、サーバーは、ブラウザーが間もなく発行するリクエストを予測します。ブラウザは PUSH_PROMISE を受け取るとすぐに、サーバーがこのリソースを転送しようとしていることを認識します。その後、ブラウザーはリソースが必要であることを発見した場合、新しいリクエストを送信するのではなく、プッシュが完了するまで待機します。これにより、ブラウザがネットワークの待機に費やす時間が短縮されます。 net/http パッケージでのサーバー プッシュ

go1.8 では、http.Server からのプッシュ応答のサポートが導入されています。この機能は、実行中のサーバーが HTTP/2 サービスで、受信接続が HTTP/2 を使用する場合に使用できます。どの HTTP ハンドラーでも、http.ResponseWriter が新しい http.Pusher インターフェイスを実装しているかどうかを確認することで、サーバー プッシュをサポートしているかどうかを判断できます。

たとえば、app.js がページのレンダリングを要求されることをサーバーが認識している場合、http.Pusher が利用可能な場合、ハンドラーはプッシュを開始できます。

 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        if pusher, ok := w.(http.Pusher); ok {
            // Push is supported.
            if err := pusher.Push("/app.js", nil); err != nil {
                log.Printf("Failed to push: %v", err)
            }
        }
        // ...
    })

上記の紹介を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイト

その他の

関連記事に注目してください。 関連記事:

実行中のJSエンジンはどのように見えるか


ネイティブJSがAJAXとJSONPを実装する方法


JSの使用中にコンソールオブジェクトをカスタマイズする方法

以上がHTTP/2サーバープッシュについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。