2013-10-19 54 views
0

我做這必須以用戶顯示一個動態變化的市場價格和成交量從數據庫中檢索數據每2秒的網頁。如何優化AJAX查詢到mysql

我得到了下面的代碼:

$.ajax({ 
     type: "get", 
     url: "getData.php", 
     data: { 
      item: 'H', 
      type: 'price' 
     }, 
     success: function (high) { 

      $.ajax({ 
       type: "get", 
       url: "getData.php", 
       data: { 
        item: 'L', 
        type: 'price' 
       }, 
       success: function (low) { 

        var dist = high - low; 
        // do something with the high and low prices... 
        // keep retrieving data based on the high and low prices... 
        //more ajax called are nested inside here... 
       } 
      }); 
     } 
    }); 

請問這種嵌套Ajax調用導致服務器CPU過度使用?

在我訪問getdata.php文件,我總是有require_once( 'connect.php');它連接到數據庫。它會導致很多的mysql連接,因爲我有時會得到錯誤「超過最大mysql連接數」?我該如何解決它?我是否合併類似的ajax調用並使用parseJSON?

謝謝。

+1

是不是很簡單更好的方法是在一次通話中回覆高低。或者如果你只是想要差異,你可以從後端發送它 – bansi

+0

謝謝。我需要使用高和低。這只是我的問題:我應該總是在我的php文件中完成可能的計算,然後返回到ajax成功? – michael

+0

對我來說最簡單的方法是選擇PHP語句中的所有數據select並返回所有項目,然後可以使用jQuery對返回的數據進行排序,至少可以消除其中一個Ajax調用。 –

回答

1

與往常一樣,數據庫本身應該是你的主要性能問題。除了增加你的連接,工作在服務器上最小化服務器的影響你的數據庫有:

  • 如果可能的話請確保您的查詢(IES)是很好的索引和索引使用(不表掃描)。使用explain語句來測試這個。有時,對數據庫模式的小改動可能會產生巨大的差異
  • 嘗試確保查詢位於數據庫查詢緩存中,即。它們實際上只有在數據發生變化時纔會執行。否則,結果應該是內存不足。爲此,查詢緩存需要足夠大,並且有一些查詢條件需要注意,例如Mysql函數等。
  • 您可能更適合簡單地查詢查詢。儘管一個更大的查詢可以自行執行,但如果將它們分解,則可能會從查詢緩存中提供更多的查詢,並且它們通常會自行縮短。

希望這會有所幫助,如果你需要的更多的幫助,你可能需要發佈一些例子查詢和模型(也可能把它放在dba.stackexchange.com)

0

我不知道在你使用的情況下,這些AJAX調用,但嵌套AJAX調用其他的AJAX調用內不會造成更多的I/O使用,因爲AJAX調用不是循環。你基本上是這麼做的

$.ajax{ 
    //do something 
} 
$.ajax{ 
    //do something else 
} 

除了你要求一個條件,以便第二次調用啓動。

你想編輯你的MySQL「的my.cnf」文件來擺脫你所得到的錯誤:

max_connections = 100 

這裏默認值是100。這聽起來像你正在運行一個AJAX這樣的怪物與數據庫更改爲一個較大的數字