簡體   English   中英

您如何在PHP中處理多個AJAX請求?

[英]How do you handle multiple AJAX requests in PHP?

我的AJAX搜索程序不斷向PHP詢問特定搜索字詞的結果。 PHP腳本的開始通過MySQL數據庫讀取並進行初始化,因此,如果PHP繼續重新啟動,它將必須讀取數據庫數百萬次。 如果我可以保持它的生命力,並讓一個運行中的PHP腳本實例滿足多個愚蠢的AJAX請求,我相信性能會有所提高。

您通常如何做? 使用服務? 服務可以做到嗎?

PHP沒有長期對象或線程或請求之間的共享狀態的概念,每個請求始終從零開始(當然,會話狀態除外)。 您可以通過緩存到磁盤或內存來模擬長期存在的對象(請參閱memcached )。

腳本初始化時,您是否有特定的原因讀取整個數據庫?

如果您知道每次的結果都是相同的,只需將這些結果移至會話變量即可。

PHP會話在其文檔中得到了很好的解釋:

http://us3.php.net/manual/en/book.session.php

如何將數據庫結果存儲在會話變量中? 您將首先檢查關鍵字是否不在會話中(會話允許在頁面刷新之間傳輸變量值),否則,請執行數據庫查詢。

要存儲它:

$_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';

如果您使用JavaScript庫(例如jquery),則ajax部分非常簡單:

$('#resultZone').load('find.php',{keyword: $('input.search').val() });

如果搜索結果類似於多個用戶,我通常會創建一個緩存文件並在那里序列化結果集。 作為文件名,我可以使用包含搜索查詢和用戶組的字符串的md5sum。 然后,當Ajax需要數據時,我只需要檢查文件是否太舊,如果不需要,我只需要將其發送到客戶端,甚至只是將Ajax http請求重定向到文件(假設文件格式正確)即可。 。 如果文件太舊,我只是用新內容刷新它。

對於非常大的站點,memcached通常是更好的選擇。 而且,某種形式的php緩存也有幫助,SQL連接池降低了打開SQL連接的開銷。

連接到數據庫是一項非常昂貴的操作,您可以通過緩存結果來解決該問題,看看Zend_Cache並了解它如何可以減輕您的分配麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM