web-dev-qa-db-ja.com

ウェブサイトの「最初のバイトの時間」を減らす方法は?

ホームページにアクセスすると、ページが読み込まれる前にブラウザが待機していることがわかります...

どのようにして最初のバイトの時間を削減できますか?

enter image description here

16
sparkle

サイトのコンテンツの生成を担当するコードを示さない限り、だれも詳細な答えを出すことはできません。それが遅延の原因だからです。

ただし、サイトはphpを使用しているため、おそらく output buffering を使用しています。

その場合、次のコードは(ネットワーク遅延+)2秒のTTFBを提供します。

<?php ob_start(); ?>
<!doctype html>
<html>
    <head>
        <title>Slow to Load, Slow to finish</title>
    </head>
    <body>
    <?php 
        sleep(2); // Simulate slow processing
        echo "Body"
    ?>
    </body>
</html>

これにより、(ネットワーク遅延+)0秒のTTFBが得られます。

<!doctype html>
<html>
    <head>
        <title>Fast to load, Slow to finish</title>
    </head>
    <body>
        <?php ob_start(); ?>
        <?php 
            sleep(2); // Simulate slow processing
            echo "Body"
        ?>
    </body>
</html>

ページ全体をロードする時間はどちらの場合も同じです-遅延が変更される場合のみ。特にTTFBの削減に焦点を当てている場合(理由)、これにより、さらに調査するための十分な情報が得られます。

[〜#〜]重要[〜#〜]:多くの フロントエンドの変更 に集中する前に行う必要がありますTTFB。

16
AD7six

私は巨大なTTFB(8-10秒)を扱い、解決策を必死に探しました。検索して成功しなかった後、私はPHPコードとデータベースインデックス

出力バッファリングソリューション TTFBを少し下げますが、十分ではありません。ユーザーから再び苦情がありました。

実際の問題は、サーバーの処理時間(DBクエリとPHPループ)および生成したHTMLソースです。

今、私はこれらの手順を実行することをお勧めします:

  1. データベースインデックスを確認します。 返される "all data"には、適切なインデックスを必ず使用してくださいExplain を使用して、インデックスが使用されているか、どのインデックスがどのように使用されているかを確認します。

私の場合、オブジェクトの配列を返し、メインテーブルのインデックスを確認しました。すべて問題なく見えましたが、オブジェクトに他のテーブルの他の小さいオブジェクトが含まれていることを忘れていました。これらのテーブルは適切にインデックス付けされていませんでした。したがって、私の巨大なTTFBです。適切なインデックスを適切なテーブルに追加するだけで、8秒から2秒になります。

  1. PHPコードを見てください。

ループインループがあり、処理が遅くなる場合があります。 PHP MVCフレームワークを使用する必要があります。あなたの選択です。私は名前を付けません。

それが機能している場合でも、そのようなコードは避けてください。 PHP4プログラマーの中には、それが良いと言う人もいます。 :)

$query = "SELECT something FROM table";
$result = mysqli_query($mysqli, $query);

if($result) {
    while($row = mysqli_fetch_assoc($result)) {
        $query = "UPDATE other_table SET something_else = "'.$row['something'].'";
        $result2 = mysqli_query($mysqli, $query)
    }
}
  1. 生成されたHTMLコードに注意してください。

たとえば、PHP loopsを介してJavascriptコードを生成します。ロジックは問題ありません。読み込み時間はそうではありません。テーブルに100行を返すとしましょう。行ごとに可能なアクションは5つだけです(ステータスの変更、編集、削除、複製、印刷)。つまり、5つのjQueryダイアログ(HTML div、コントロール付き)と5つのJSスクリプトで100行を乗算すると、そのページに何千行ものコードが書き込まれます。私のケースでは、4MBのHTMLコードで32.000行を超えています。これらすべてのダイアログを適切なJS関数に配置した後、2秒から1秒未満に渡されました。

結論、(まだこれを読んでいるのなら:))TTFBを減らすためにいくつかの魔法の関数を検索しないでください。 コードとデータベースを検索します。

PS:速度の向上には他にもいくつかあります:ブラウザのキャッシュと圧縮、CDNの使用、HTML、CSSとJSの縮小、JavaScriptの解析の延期、CSSスプライトへの画像の結合など。 。

6
Adrian P.

遅延は、インデックスページを生成するサーバー側スクリプトが原因です。

あなたのウェブサイトをざっと見れば、そのウェブサイトがPHPを使用していることが推測できます。したがって、遅延はindex.phpスクリプトに含まれているものによって引き起こされます。

ホスティング、ネットワーク、ハードウェア、HTTPサーバー(Apache)が原因ではありません。グラフは、静的ファイル(.css、.jsなど)がかなり高速に配信されていることを示しています。

したがって、詳細については、より多くの情報を提供する必要があります(index.phpの実行が遅いのには、さまざまな理由があります...).

3
Frunsi

.htaccessのエラーもTTFBを大幅に増加させる可能性があります。

8〜12秒のTTFB(現在は500ミリ秒)を解決するために、Wordfenceが残した古いコード行をいくつか削除する必要がありました。

3
Supaiku

この種のデータを測定するためにどのツールを使用するかによります。私がwebpagetest.orgを使用したとき-最初のバイトまでの時間は292ミリ秒でした。おそらく、チェックを再実行する必要がありますか?

この数の一部は、サーバーとの関係にあるところです-より多くのホップを実行する必要がある-この数は大きくなります。それはまた、サーバーのハードウェアと接続性についてでもあります-通常これはあなたが本当に制御できないものです。他のホストを調べたいと思うかもしれませんが、私は最初にさらにいくつかのテストを実行します。友達にwebpagetest.org(または同様のもの)でサイトをテストしてもらい、それらがどのような値を得るかを確認してください。

0
Alex Holsgrove