2017-08-28 96 views
0

我正在使用Harvest API基本連接到收穫的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

您的頁面速度很慢,因爲您正在爲每個用戶請求一次一個數據。這意味着,當你獲得更多的用戶時,你將不得不提出更多的請求。更多請求意味着您的應用程序需要更長和更長的時間

不幸的是,似乎你只能在同一時間從一個用戶請求數據:http://mdbitz.com/docs/harvest-api/

如果你能夠在本地存儲數據,你可以大大提高應用程序的速度。您可以將其存儲在任何易於訪問的地方,例如數據庫,緩存甚至文本文件。然後,您需要確定從Harvest API更新本地副本的頻率以獲取最新數據。