2017-08-28 22 views
0

基本的にHarvest APIを使用してHarvestに接続し、いくつかの情報を取得するPHPページを作成しています。コードは基本的にHarvestのすべてのユーザーオブジェクトを返し、各ユーザーの費用を計算します。ロードに約50秒かかります。以下のコードをご覧ください。このPHPページの読み込みを高速化するには

<?php require_once('connection.php'); 
    $result= $api->getUsers(); 
    $users=$result->data; 



    $range= Harvest_Range::lastMonth(); 


    foreach($users as $key=>$value){ 

$user_id=$value->get("id"); 
$first_name=$value->get("first-name"); 
$last_name=$value->get('last-name'); 

    $result_expenses=$api->getUserExpenses($user_id, $range); 
$expenses_data=$result_expenses->data; 

$total_cost=0; 

foreach($expenses_data as $key=>$value){ 
if($value->get("is-locked")=="true"){ 
$total_cost=$total_cost+$value->get("total-cost"); 

}} 
?> 
<?php if($total_cost!=0){?> 
<tbody> 
<tr> 
<td> <?php echo $first_name; echo " ".$last_name; ?> </td> 
<td> $ <?php echo $total_cost; ?> </td> 
</tr> 
</tbody> 
<?php }}?> 

</table> 

ページの読み込みを高速化する手段はありますか?

+1

それをベンチマークし、遅い部分が何であるかを見つけることから始めます。 – rtfm

+2

私はあなたの側に最初にそのレコードをキャッシュしなければならないと思うし、その後キャッシュまたはローカルデータベースからデータを取ることができる – OsDev

+1

ユーザーがページをリクエストしたときに実行時にそのような要求をすることはめったに良い考えではありません。あなたは@OsDevが示唆するようにすべきです。設定された間隔で呼び出しと計算を行い、結果をいくつかのキャッシュ(memcache、redisなど)またはあるデータベースに格納するバックグラウンドスクリプトを用意します。その後、ビジターはキャッシュまたはデータベースからデータを取得するだけで済みます。 –

答えて

0

各ユーザーのデータを1つずつ要求しているため、ページが遅いです。これは、より多くのユーザーを獲得するにつれて、より多くのリクエストを行う必要があることを意味します。リクエストが増えると、アプリケーションの所要時間が長くなります。

残念ながら、あなたが一度に一人のユーザからのデータを要求することができます表示されます。http://mdbitz.com/docs/harvest-api/

ローカルにデータを保存することができるならば、あなたが大幅にアプリケーションの速度を上げることができました。データベース、キャッシュ、テキストファイルなど、簡単にアクセス可能な場所に格納することができます。次に、Harvest APIからローカルコピーを更新して最新のデータを取得する頻度を判断する必要があります。

関連する問題