2011-05-18 82 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