2016-04-24 9 views
0

私は1秒間に1台のサーバーから別のサーバーにWebリクエストを受け取りました。私のブラウザの同じ要求はほとんど時間がかかりません。私は、様々な同様の質問を通して見て、 PHPの内部からのWeb要求がブラウザより遅い

  • がするドメインとして
  • 使用グーグルのfile_get_contentsで独自のクローズ接続ヘッダーを埋め込む代わりのfile_get_contentsの

    • 使用のカールを含め、私が見つけることができるすべての提供の提案を試してみました高速化ドメインルックアップ
    • これらの

    なし、時間上の任意の影響を与えていないキープアライブを避けるために、ターゲットサーバ上のヘッダーを使用しています。

    $timeBefore = microtime(true); 
    
    
    //Only one of these active at a time 
    $context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n'))); 
    $output = file_get_contents($url,false,$context); 
    
    //Or 
    $context=stream_context_create(array('http' => array('header'=>"Host: www.google.com\r\n"))); 
    $output = file_get_contents($url, false, $context); 
    
    //Or 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch); 
    
    $timeAfter = microtime(true); 
    

    し、ファイル$timeAfter - $timeBeforeにログインします。ここで私はこれを試した方法があります。私は結果として約1.04202604294を常に得て、これを使用するクライアントアプリケーションは実際に1秒の遅延を見ます。

    ここで2つのサーバーは、次のようにAからBの話をしています.BのAへの返答中に、このURLをAに送り返し、すべてを取り込んで元の応答を送信しますソースに接続している間にソースに戻る接続があります。ここで

    curl_getinfo
    content_type => text/html, 
    http_code => 200, 
    header_size => 219, 
    request_size => 479, 
    filetime => -1, 
    ssl_verify_result => 0, 
    redirect_count => 0, 
    total_time => 1.04360199999999991860022419132292270660400390625, 
    namelookup_time => 0.0001579999999999999915796522476085783637245185673236846923828125, 
    connect_time => 0.0007219999999999999855393451042573360609821975231170654296875, 
    pretransfer_time => 0.000772000000000000008264222639553508997778408229351043701171875, 
    size_upload => 0, 
    size_download => 1, 
    speed_download => 0, 
    speed_upload => 0, 
    download_content_length => -1, 
    upload_content_length => -1, 
    starttransfer_time => 1.0435689999999999688640173189924098551273345947265625, 
    redirect_time => 0, 
    redirect_url => 
    

    からのデバッグ出力である。このコマンドは、お互いに同じホスティングサービス上の2つのサーバーから送信されている、と彼らは、負荷とその高品質のホスティングサイト(下の両方ではありません液体ウェブ専用サーバ)。応答とURLはどちらも非常に小さい

  • +0

    'curl_getinfo'を見てください。これは、ルックアップの各段階がどのくらいの時間を要したかを示すはずです。 DNSから名前を解決するまでどれくらいかかりましたか?これにより、最適化が必要な領域が表示されます。 – halfer

    +0

    上記の出力を追加しました。 – user2292539

    +0

    うん、 'starttransfer_time'は大部分の時間です - あなたは他のサーバと同じような遅い時間を得ますか?あなたのサーバとターゲットサーバはどこにありますか?どこまで離れていますか? – halfer

    答えて

    2

    これはまったく同じコードを実行していないとブラウザで同じサイトに接続することなく診断することはほとんど不可能です。しかし、一般的に、ブラウザはCURLよりもサーバーとの高速接続をネゴシエートするためにもっと多くのことを行う予定です。これには、HTTP/2 & gzipのサポートが含まれます。両方とも、データ転送をエンドツーエンドで高速化します。

    +0

    この要求のペイロードはかなり小さく、2台のマシン間のpingは<1ミリ秒ですので、最適化が進み、速度が1秒に達するようになっているように感じられます。 – user2292539

    0

    私の経験では、別のページ/サーバーに連絡するのに時間がかかります。
    できることは、データをx分間キャッシュすることによって行われる接続の数を制限することです。 (可能であれば)

    私はデータをput_file_contents()でtxtファイルにキャッシュし、filemtime()を使用してファイルの経過時間を確認します。
    この方法では、ローカルのtxtファイルからfile_get_contents()を読み取ってデータを取得するだけで済みます。

    これにより速度が向上しますが、「日付付き」データが表示される可能性もあります。

    +1

    これは実際には与えられているコマンドであり、ウェブページではないので、オプションではありません。 – user2292539

    関連する問題