2011-05-18 105 views
0

我有一個帶Google地圖的頁面。在頁面加載時,只有一個標記,用戶可以動態添加標記和表單。爲什麼時間爲每個呼叫增加多個ajax呼叫?

我使用AJAX調用檢索數據庫中的座標。每次調用返回150個標記。因此,如果我必須檢索更多標記,則我會進行其他調用,直到所有標記都顯示在我的地圖上。

我注意到(加載2500個標記和螢火蟲)執行服務器端動作的時間隨着每次調用而增加。

任何人都可以解釋爲什麼,如果有辦法解決它(因爲,最後,電話大約需要30秒)?

編輯:

執行時間爲每個呼叫(嘗試檢索約2500標記):

request 1 : 2.54s 
request 2 : 1.83s 
request 3 : 1.25s 
request 4 : 1.31s 
request 5 : 1.4s 
request 6 : 1.81s 
request 7 : 2.86s 
request 8 : 8.25s 
request 9 : 20.06s 
request 10 : 19.25s 
request 11 : 23.33s 
request 12 : 25.86s 
request 13 : 26.62s 
request 14 : 27.85s 
request 15 : 32.37s 
request 16 : 34.91s 
request 17 : 35.82s 
request 18 : 36.7s 

功能是每個呼叫完全相同,返回值具有相同類型和相同長度。

我做了很多調用,以便用戶可以在標記加載時繼續在地圖上工作。

+0

您可以發佈您在AJAX調用中運行的代碼嗎? – 2011-05-18 11:03:52

+0

在我看來,它與服務器端的東西,而不是AJAX有關。 – binaryLV 2011-05-18 11:35:10

+0

你可以調用單個請求而不需要調用以前的請求嗎?也就是說,只嘗試調用請求14並查看是否需要28秒。 – binaryLV 2011-05-18 12:39:41

回答

2

如果您在被調用腳本中使用session_start,則只有一個調用可以併發執行,因爲會話文件被鎖定,直到第一個調用腳本終止並釋放該鎖定,或者通過調用session_write_close手動釋放(),那麼下一個排隊呼叫就可以運行並依次鎖定文件。

使用單個調用一次檢索所有標記數據可能更容易,而不是每個包含150個標記條目的每個組的大量單個調用......這將繞過任何會話鎖定問題,因爲只有一個腳本正在執行;並且對網絡開銷更有效

+0

我試圖在一個請求中檢索所有標記,但它太長了,請求在完成之前停止。感謝您的解釋,但它不能解釋爲什麼時間增加(我編輯我的帖子來顯示你的回覆)。 – Elorfin 2011-05-18 11:26:17

+0

在這種情況下,請嘗試在腳本中使用session_write_close()以儘可能早地手動釋放鎖。 – 2011-05-18 11:27:32