2009-09-30 12 views
1

我試圖做一個php腳本,可以加載當前的天氣預報,它使用了一些XML預處理來消化輸入,但它經常訪問並重新加載。問題始於當前的主機,我確實明白爲什麼,這限制了腳本佔用的處理能力。我會如何減少php腳本的處理器佔用空間?

當前需要執行一整個過程,每次執行大約需要3秒。我僅限於12歲,但我獲得了相當多的獎勵。

我給你們的問題是:我可以使用什麼方法來緩存腳本的輸出,以便它不必預處理5分鐘前已經做過的事情。既然是天氣,我可以有兩個小時的時差。

我對php也很熟悉,所以不用擔心xD。

〜非常感謝你, 強尼:d

回答

2

您可以運行一個cronjob,將產生氣象預測數據,然後就顯示整個事情從緩存。您可以使用APC,以便始終將其加載到內存中(以及所有其他優勢)。

+0

啊,將可能的工作,謝謝:d – JonnyLitt 2009-09-30 23:32:35

+1

否則,只有PHP的替代辦法是使用'filemtime()'返回一個緩存文件或後再生一段時間。 – 2009-09-30 23:34:40

0

需要一段代碼,看到你在做什麼樣的處理。考慮使用xdebug來更好地優化你的代碼。 此外,您可以使用AB等基準測試工具來查看您的服務器可以處理多少個進程。

有幾種不同的緩存機制可用,但沒有看到你在做什麼樣的過程,很難說......

0

3秒鐘的時間極長的執行時間,因爲已經問,有些感冒會很高興地看到你如何處理「輸入」和說了什麼格式的輸入是英寸

約一個快速和骯髒的文章緩存了腳本文件是在這裏找到:

http://codestips.com/?p=153

1

Zend Framework提供與多個後端(文件,memcached的,APD)的Zend_Cache對象。或者你可以滾你自己的東西,如:

$cachFile = "/path/to/cache/file"; 
$ttl = 60; // 60 second time to live 
if (!file_exists($cacheFile) || time()-filemtime($cacheFile) > $ttl) { 
    $data = getWeatherData(); // Go off and get the data 
    file_put_contents(serialize($cacheFile), $data); 
} else { 
    $data = unserialize(file_get_contents($cacheFile)); 
} 
+0

是的,我可能會做某些事情,我將使用文本/純文本將輸出存儲爲緩存類型對象,然後在每次執行時間結束時對其進行更新。 – JonnyLitt 2009-09-30 23:41:11

+0

或者你可以將整個事情序列化到文件中,我編輯了匹配的答案。 – Neel 2009-09-30 23:51:33