2011-12-04 5 views
1

Google Complete APIを使用していましたが、検索された単語の上位26個の質問プレフィックスアルファベット。PHPを使用してGoogle Complete APIに複数のリクエストを行う際の効率を改善

私は自分自身プログラマーは数えませんが、楽しい作業のようでした!

私のスクリプトはローカルで正常に動作しますが、共有サーバーで時間がかかりすぎて30秒後にタイムアウトします。共有されているため、最大実行時間を長くするためにphp.iniにアクセスできません。これは、APIへのリクエストを作成するより効率的な方法があったなら、私は不思議作ら

は、ここに私のコードは次のとおりです。

<?php 

$prep = $_POST['question']; 

for($i=0;$i<26;$i++){ 

    $letters = range('a','z'); 
    $letter = $letters[$i]; 
    $term = $prep . $letter; 

    if(!$xml=simplexml_load_file('http://google.com/complete/search?output=toolbar&q=' . $term)){ 
     trigger_error('Error reading XML file',E_USER_ERROR); 
    } 
    do{ 
     $count = 1; 
     $result = ucfirst($xml->CompleteSuggestion->suggestion->attributes()->data); 
     $queries = number_format((int)$xml->CompleteSuggestion->num_queries->attributes()->int);     
     echo '<p><span>' . ucfirst($letter) . ':</span> ' . $result . '?</p>'; 
     echo '<p class="queries">Number of queries: ' . $queries . '</p><br />'; 

    } while ($count < 0); 
} 

?> 

また、私はYahoo!知恵袋のに質問を与え数行を書きましたAPIを使用すると、結果はさらに長くなりましたが、APIを使用して検索語句を正確に一致させることはできませんでした。

基本的に、上記のコードはAPIを複数回呼び出す最も効率的な方法ですか?

おかげで、

リッチ

答えて

2

あなたは、

を自問してみて、この問題に再見て、ユーザの視点を使用する必要がありますロードするために、Webページのための30秒を待つのが好きでしょうか?明らかに
あなた焦げ茶色が

がどのように速く、ページの読み込みを行うことができますしたいですか?
あなたが外部リソースに依存している (GoogleのAPI)
と一度だけ呼び出していないが、非同期26回

だから、あなたは上記の同期、
合計時間が低減され、フォーム26〜1を変更した場合

(ネットワーク帯域幅の費用で)ここに
は、最適化の最初のステップである、http://php.net/manual/en/function.curl-multi-exec.phpを見てみましょうあなたは上記成し遂げる場合


外部リソースに費やす時間が最大95%短縮できます

これで十分でしょうか?
明らかまだ

外部リソースへのすべての呼び出しは、ダウンネットワークは、DNS解決できない、あなたのページがあることを防ぐためにどのように

あまりにも下がっている場合でも、Googleの
で、信頼できるものではありません?

あなたはキャッシュを必要とし、基本的にロジックは次のとおりです。 - 既存のキャッシュのための

  • 検索、見つかった場合は、(AからZまでの)同期クエリGoogleのAPI
  • 店、
  • ない場合はキャッシュから返しますキャッシュ
  • への結果は、オンデマンドプロセスはまだ、0123(要求が最長を待たなければならない最初のユーザーの問題)ではない理想的である、

しかし、結果を返す

  • あなたは、ユーザー入力の順列(うまくいけばそれほど大きくない)、
    はあなたが定期的に、GoogleのAPIに起因
    を引くために、スケジューラ(cronジョブ)を使用して、ローカルに

  • +0

    を結果を格納することができますを知っていれば 私がやったいくつかのそれについての読書とそのような音はちょうどトリックを行うだろう!詳細な答えを感謝:) – RichieAHB

    0

    私は、この種の仕事のためにcronジョブを使用することをお勧めします。このようにして、パラメーターを使って最大実行時間を変更するか、作業を複数の操作に分割し、cronジョブをより規則的に実行して、別の操作を実行することができます。

    関連する問題