我正在處理一個頁面,該頁面有超過100個數據庫調用,並且需要太多時間來加載網頁。PHP - 通過零數據庫調用加載頁面的方式
我想加載一個零數據庫調用的頁面。我已經在我的腦海以下方式 -
創建一個使用它每5分鐘頻繁運行cron作業,我的網頁的HTML副本,然後使用的file_get_contents加載它。
創建數據庫結果值的txt文件,然後將其加載到頁面中。
使用websockets - 當有新數據時,它更新頁面。
我需要你們:)
我正在處理一個頁面,該頁面有超過100個數據庫調用,並且需要太多時間來加載網頁。PHP - 通過零數據庫調用加載頁面的方式
我想加載一個零數據庫調用的頁面。我已經在我的腦海以下方式 -
創建一個使用它每5分鐘頻繁運行cron作業,我的網頁的HTML副本,然後使用的file_get_contents加載它。
創建數據庫結果值的txt文件,然後將其加載到頁面中。
使用websockets - 當有新數據時,它更新頁面。
我需要你們:)
專家意見如果您正在使用像笨一些框架,你可以管理頁面級別以及數據庫查詢級緩存。查詢緩存帶有過期時間,因此不需要擔心更新數據。
對於普通的PHP,我用於將整個輸出寫入某個文件,然後檢查日期時間以提供或更新相同的內容。
在php文件的開始,
<?php
$cachefile = "some-unique-name.html";
$cachetime = 864000;
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
readfile($cachefile);
exit;
}
// if no file or too old, render and capture HTML page.
ob_start();
session_start();
?>
------ output all your html code here ----
<?php $fp = fopen($cachefile, 'w+');
fwrite($fp, ob_get_contents());
fclose($fp);
// Send browser output
ob_end_flush();
ob_flush(); ?>
末!
你有規範化這些數據庫中的表嗎?
我有一個類似的問題。不好的表格設計可能會讓你感到困惑
這是查詢緩存的用途。但是....如果數據不斷變化,我會使用websocket推送更改後的數據。或者可能將當前數據存儲在localStorage對象中,並僅更新新數據 – KyleK 2014-11-05 06:20:04
爲什麼從100個呼叫轉到0? 50或40或30或20或......怎麼樣? – Rasclatt 2014-11-05 06:20:20
@KyleK - 是的,我記住了這一點,但我的頁面上的值經常更新,並與memcache/caches一起工作,它應該調用數據庫atleast一次。我的意思是,將有一個進程將調用數據庫,並將有其他頁面創建該頁面的副本,然後加載它爲用戶視圖 – D3Systems 2014-11-05 06:24:51