2014-11-05 37 views
1

我正在處理一個頁面,該頁面有超過100個數據庫調用,並且需要太多時間來加載網頁。PHP - 通過零數據庫調用加載頁面的方式

我想加載一個零數據庫調用的頁面。我已經在我的腦海以下方式 -

  1. 創建一個使用它每5分鐘頻繁運行cron作業,我的網頁的HTML副本,然後使用的file_get_contents加載它。

  2. 創建數據庫結果值的txt文件,然後將其加載到頁面中。

  3. 使用websockets - 當有新數據時,它更新頁面。

我需要你們:)

+0

這是查詢緩存的用途。但是....如果數據不斷變化,我會使用websocket推送更改後的數據。或者可能將當前數據存儲在localStorage對象中,並僅更新新數據 – KyleK 2014-11-05 06:20:04

+0

爲什麼從100個呼叫轉到0? 50或40或30或20或......怎麼樣? – Rasclatt 2014-11-05 06:20:20

+0

@KyleK - 是的,我記住了這一點,但我的頁面上的值經常更新,並與memcache/caches一起工作,它應該調用數據庫atleast一次。我的意思是,將有一個進程將調用數據庫,並將有其他頁面創建該頁面的副本,然後加載它爲用戶視圖 – D3Systems 2014-11-05 06:24:51

回答

0

專家意見如果您正在使用像笨一些框架,你可以管理頁面級別以及數據庫查詢級緩存。查詢緩存帶有過期時間,因此不需要擔心更新數據。

對於普通的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(); ?> 

末!

0

你有規範化這些數據庫中的表嗎?

我有一個類似的問題。不好的表格設計可能會讓你感到困惑

+0

是的,我之前也遇到過相同的情況,db調用大約是300,並且在規格化表格後,我設法將它減少到100,執行速度更快 – D3Systems 2014-11-05 07:17:31

+0

然後在嘗試緩存之前,您應該嘗試進一步減少 – Kamotho 2014-11-05 07:21:54

+0

我不贊成緩存。我想要什麼0當用戶打開頁面時調用數據庫。如果我把它減少到20,並且如果有1000個用戶同時訪問這個頁面,那麼會有20000個數據庫調用,我想避免這種情況 – D3Systems 2014-11-05 07:24:54