2013-02-19 21 views
0

我可以創建動態頁面,並且它正在工作,但着陸頁加載非常緩慢。使用PHP動態快速生成頁面

我真的很喜歡一些幫助。以下是我的網站的功能。

讓我們先從一個鏈接http://example.com/search.php

<?php 

session_start(); 

//(pretend there is code here that gets, decodes, and displays data from an api) 

$title = $titleFromApi; 
$a = $dataFromApi; 


$_SESSION['storeTitle'] = $title;  // stores 'title' in a session variable  
$_SESSION['store_a'] = $a;   // stores 'a' in a session variable 

echo '<a href="http://example.com/'. $a .'/' . $title .'> ' . $title . '</a>'; 

// the line above is a clickable link that will take them to the landing page 


?> 

現在這裏是着陸頁(http://example.com/$a/$title):

<?php 

session_start(); 


$al = $_SESSION['store_a'];  // stores session variable in new variable 'al' 

$getter = 'http://api.somewebsite.com/dev/' . $al . '/get_these_variables'; 

// the line above gets data from an api using variable 'al' 

// (pretend that there is code here that decodes the data) 

// the code below displays the data retrieved from the api 

foreach($data as $entry){ 

echo ' 

<div> 
    ' . $entry['decoded_data_1'] 
    . ' 
</div> 


<div> 
    ' . $entry['decoded_data_2']   // and so on 
    . ' 
</div> 

';          // ends echo 

} 

?> 

我今天學到了會議(我認爲這將讓事情變得更快);之前,我將這些數據從search.php發送到地址欄,然後在着陸頁上讀取它以傳遞變量(我知道,我對php和開發一般都很陌生)。着陸頁的網頁加載速度未發生變化。

+6

您正在對遠程站點進行呼叫。這總是意味着您的頁面至少需要等待遠程站點響應才能顯示。 – GordonM 2013-02-19 22:08:39

+0

search.php頁面是否位於「mysite.com」之外的其他域上? – 2013-02-19 22:13:16

+0

使用'microtime(true)'來測量代碼中兩個或更多點之間的時間。這將幫助你識別瓶頸,儘管@Gordon說,它可能是API調用。 API可能很慢,或者您的網絡速度很慢? – halfer 2013-02-19 22:15:52

回答

0

正如評論中所提到的,在其當前形狀中,腳本不能比查詢的API的響應時間快。

您對API沒有任何說法,因此無法保證在該區域加快速度。但是,如果該API一致地返回同一查詢的相同結果,則可以通過實現結果緩存來緩解該問題。

基本上,您應該在持久數組中存儲由其參數索引的查詢結果,並且每次查詢時都檢查結果是否已經存在。您可以選擇將該陣列設置爲會話值,位於database或基於內存的緩存機制中,如memcache

每一種方法都有它的優點和缺點,並在另一選擇一個解決方案也將依賴於API:

  • 基於會話的緩存將每個客戶端的限制,這將大大降低其有效性,但可能如果API的使用必須是客戶機密的,則必須是強制性的,如果數據庫的訪問速度比API服務器更快,那麼基於數據庫的數據庫可能會比較有效。本地數據庫具有足夠大的帶寬,
  • 的內存緩存選項應該是最快的國家之一,但緩存的數據將會丟失,如果必須重新啓動該服務,

您還可以結合數據庫和memcache,以後者的速度和前者的持久性來獲得後者的速度。

這一切都假設您可以稍微預測一下查詢是否可以緩存,以及它將保持有效的時間。您還需要對服務器配置進行一些控制,或者希望它已經支持上面討論的功能。