1

私は外部ソースを使用してユーザーの場所を自分のWebサイトに取得し、その場所に合わせてサイトをカスタマイズできるようにしていますが、使用している外部ソースは非常に遅い場合があり、サイトの速度が低下するためcURL、タイムアウト機能を実装しましたcurl_setopt($ch,CURLOPT_TIMEOUT,1000);が、タイムアウトが発生するとページの読み込みが停止し、ページの半分が失われます。

これは私のウェブサイトで使用されているスクリプトです

$i = 1;
$geoplugin = new geoPlugin();
$geoplugin->locate();
if(empty($_SESSION['country'])) { 
  $conchk = $geoplugin->countryName;
  $_SESSION['country'] =  $conchk;
}
else { $conchk = $_SESSION['country']; }
if(empty($conchk)) {$countrygeo = "NULL_CONT";} else {$countrygeo = $conchk;}
//$countrygeo = "Spain";
$country_find = mysql_query("SELECT * FROM country_list 
  WHERE country='$countrygeo' LIMIT 1");
while($row_cou = mysql_fetch_array($country_find)) {
  $rowcov = $row_cou[1];
  //Geo-location default!
  print "<option selected value=\"$rowcov\">$rowcov</option>\n";
  $kvar = 1;
}
//finish first while loop!
//if we cant find the geo-country in the list print the whole table!
$country_full_list_print = mysql_query("SELECT * FROM country_list 
  ORDER BY country ASC");
while($row_full = mysql_fetch_array($country_full_list_print)) {
  if( ($row_full[1] == "United Kingdom") && ($i == 1) && (empty($kvar)) ) { 
    print "<option selected value=\"$row_full[1]\">$row_full[1]</option>\n"; $i++; }   
    //always print uk as default if no results.
elseif ($row_full[1] == $rowcov) {  }
else { 
  print "<option value=\"$row_full[1]\">$row_full[1]</option>\n"; } //this is the default print!
} //close while loop and if num_rows less than 1.

$ geopluginを停止する方法について誰かがアイデアを持っていても、ページの読み込みを続行する場合は、大いに感謝します。

4

1 に答える 1

0

これに対する唯一の適切な解決策は、Javascript を使用することです。外部リソースを呼び出す部分を別のスクリプトに移動し、できるだけ早く AJAX で呼び出します。このようにして、その別のスクリプトに厳密な時間制限を課すことができます。それを超えても問題はありません。AJAX リクエストは失敗しますが、それを適切に処理でき、ページの残りの部分には影響しません。

外部からの応答が遅いためにページが中途半端な状態にならなくても、遅延の原因がページにあるように見えるため、これは既に行っている必要があります

于 2012-04-15T23:16:51.560 に答える