我的AJAX搜索程序不斷向PHP詢問特定搜索項的結果。 PHP腳本的開始通過MySQL數據庫讀取並初始化,因此如果PHP不斷重新啓動,它將不得不讀取數據庫數百萬次。如果我可以保持它活着並讓一個正在運行的PHP腳本實例提供多個愚蠢的AJAX請求,我相信性能會得到改善。如何處理PHP中的多個AJAX請求?
你是如何做到這一點的?使用服務?這可以通過服務完成嗎?
我的AJAX搜索程序不斷向PHP詢問特定搜索項的結果。 PHP腳本的開始通過MySQL數據庫讀取並初始化,因此如果PHP不斷重新啓動,它將不得不讀取數據庫數百萬次。如果我可以保持它活着並讓一個正在運行的PHP腳本實例提供多個愚蠢的AJAX請求,我相信性能會得到改善。如何處理PHP中的多個AJAX請求?
你是如何做到這一點的?使用服務?這可以通過服務完成嗎?
如何存儲在一個會話變量分貝的結果嗎?如果關鍵字不在會話中(會話允許在頁面刷新之間傳輸變量值),則首先檢查,如果不是,則執行db查詢。
存儲它:
$_SESSION['storedQueries']['keyword']= 'its definition, from the database';
尋找它:
$index= array_search('keyword',array_keys($_SESSION['storedQueries']));
$result = ($index) ? $_SESSION['storedQueries'][$index] : 'nothing found, you should do a db query';
AJAX的部分是很容易的,如果您使用的是JavaScript庫,如jQuery:
$('#resultZone').load('find.php',{keyword: $('input.search').val() });
會話變量是否通過HTTP發送? – 2009-09-29 20:24:14
來自doc:「訪問您的網站的訪問者被分配了一個唯一的ID,即所謂的會話ID,它可以存儲在用戶端的Cookie中,也可以在URL中傳播。」 – pixeline 2009-09-29 23:45:41
PHP沒有長壽命對象或線程或請求之間共享狀態的概念,每個請求始終從零開始(excep t當然是會話狀態)。您可以通過緩存到磁盤或內存來模擬長期存在的對象(請參閱memcached)。
當腳本初始化時,您是否有特別的理由要讀取整個數據庫?
如果搜索結果與多個用戶類似,我通常會創建一個緩存文件並在其中序列化結果集。作爲文件名,我可以使用包含搜索查詢和可能用戶組的字符串的md5sum。然後,當Ajax需要數據時,我只需要檢查文件是否太舊,如果不是,我只需要將它發送到客戶端,或者甚至可以將Ajax http請求重定向到文件(假設它的格式正確) 。如果文件太舊,我只是用新的內容刷新它。
對於量大的網站,memcached通常是更好的選擇。而且還有一些php緩存幫助和SQL連接池降低了打開SQL連接的開銷。
連接到數據庫是一項非常昂貴的操作,您可以通過緩存結果來解決該問題,查看Zend_Cache並查看它如何幫助您解決頭痛問題。
這是用於標記系統嗎?沒辦法,您可以解析一次關鍵字的文本,並找到關鍵字變成鏈接一勞永逸嗎?也許可以解釋你打算做什麼。 – pixeline 2009-09-29 19:29:31
基本上我有一個AJAX請求應該查詢的PHP腳本。我不確定我將如何去做AJAX部分,但我想先了解PHP方面。 – 2009-09-29 19:31:45