2012-04-03 92 views
1

這是一個更符合服務器效率和可用性的問題。AJAX或PHP可以「回聲」太多嗎?

說我有一個調用AJAX腳本的php頁面,並且有100萬用戶在同一秒內連接。

如果我限制AJAX腳本,使其只響應一次而不是每次接收數據時性能會提升嗎?

我計劃將所有數據打印到變量,然後在腳本完成後回顯該變量。

我不確定echoing是否只是將數據存儲在服務器中,直到腳本完成,類似於我上面要做的或者它實際上是否每次都與客戶端連接?

如果爲每個回聲建立一個連接,那麼這會比用數據填充一個變量更好,可能導致RAM快速填滿?

這個AJAX腳本從數據庫中拉取數據(調用PHP頁面)。我有很多「回聲」語句,它們只是簡單地打印table,div,tr等標籤,然後最終從數據庫中打印數據。然後,再次印刷表格,div,tr等標籤。你說最好用這個數據填充一個變量並打印/回顯一次?

感謝,

+0

http://c2.com/cgi/wiki?PrematureOptimization – 2012-04-03 17:36:50

+0

你的問題是含糊不清我。如果你能澄清(也許是一個例子),這將有所幫助。 – 2012-04-03 17:37:23

+0

你想解釋的是關於CACHING的結果,對吧? – safrazik 2012-04-03 17:39:17

回答

2

一般來說,服務器處理腳本,並將在HTML的形式輸出,所以沒有一個頁面與服務器之間不再聯繫。當您發出AJAX請求時,您將再次打開連接併發送請求。

主要的瓶頸中的性能發生從您發送到服務器的請求量。您應該儘可能限制請求。

如果爲每個回聲建立一個連接,那麼這會比用數據填充一個變量更好,可能會導致RAM快速填滿。

你錯了,你應該儘量減少請求,尤其是當你處理大量的人時。


接下來,它幾乎毫無意義地更新內容。看看facebook如何更新其內容。定時器和內容每分鐘更新一次。除通知部分外。

+0

如果服務器上啓用了保持活動狀態,AJAX調用是否可以重用現有連接? – 2012-04-03 17:40:38

+0

@ Pierre-OlivierBourgeois,Apache KeepAlive指令指定客戶端到Apache服務器的TCP/IP連接在由KeepAliveTimeout值指定的給定持續時間內保持「活動」狀態。所以當你處理一個重要的請求時它是唯一有用的。 – Starx 2012-04-03 17:47:04

+0

@Starx這裏有一些細節。這個AJAX腳本從數據庫中提取數據(調用PHP頁面)。我有很多「回聲」語句,它們只是簡單地打印table,div,tr等標籤,然後最終從數據庫中打印數據。然後,再次回顯table,div,tr等標籤回到ajax腳本。你說最好用這個數據填充一個變量,然後在等待的AJAX腳本中輸出/ echo ONCE?謝謝, – 2012-04-03 21:37:10

0

"I'm not sure if echoing is simply storing the data in the server until the script finishes, similar to what I want to do above or if it is actually connecting with the client each time?"

如果使用輸出緩衝,則輸出數據被存儲在輸出緩衝器和發送到瀏覽器作爲一個整體的數據。例如:您的輸出大小爲10kb,完成回顯時發送完整的10kb數據。

否則,輸出會以一定的輸出大小間隔發送,具體取決於您的PHP配置設置。例如:您的輸出數據大小總共爲10kb,並且在達到2kb,4kb,6kb,8kb和10kb數據時發送輸出。

但是,

it is NOT connecting with the client each time

有時,它也取決於瀏覽器。不同的瀏覽器以不同的方式處理它。

如果考慮對性能,你也可以看看caching your ajax results