浏览器超时Javascript递归功能,如何解决?

时间:2010-07-01 12:08:46

标签: javascript browser timeout mootools ping

我必须使用JS + PHP + MYSQL开发一个新闻通讯管理器,我想了解浏览器超时JS功能的一些内容。如果我正在运行一个递归函数来延迟对它自己的调用(当PHP返回一个电子邮件列表时),我怎么能确定浏览器不会超时这个JS函数?

我问这个,因为我记得使用类似的新闻通讯管理员,在做几次调用之后,在执行ajax请求时,它没有任何明显的原因停止。我知道JS不是这个,我应该在服务器上使用Crontab,但是,我不能假设用户服务器处理cron,所以我不得不坚持使用JS + php。

PS - 这并没有发生在这个应用程序上,我只是试图阻止更糟糕的情景(因为我测试了一个新闻通讯管理器,这与我正在开发的这个一样工作)。由于我的虚拟电子邮件列表很小,并且呼叫之间的延迟也很小,这很好用,但让我们想象一下1000个联系人列表,发送间隔为120秒:每2分钟发送30封电子邮件。

顺便问一下,为什么呢?好吧,许多托管服务器对每天或每小时发送的电子邮件都有限制,这有助于防止违反该政策。

感谢您的时间对此主题的任何评论表示赞赏; D

3 个答案:

答案 0 :(得分:0)

从mootools的角度来看,这里有几种可能的解决方案。

有很多选项可以处理批量作业,看它就像一个更复杂的.periodical(setInterval),它理解结果的异步性质,可以弥补滞后等等。我认为它可以完全按照你的设置做在开箱即用的要求中,您只需要一个完整的回调函数来清除待处理数组中的完成(例如)。

基本上,设置处理数据块的所有请求,并将它们传递给Request.Queue以按顺序处理。从发送速率控制的角度来看可能不太复杂。

答案 1 :(得分:0)

meta refresh怎么样?这不会导致你的javascript函数超时。您只需在特定时间后重新加载页面,然后发送下一封电子邮件。在URL中添加一个参数,您可以找到您所在的“圆形”。

这可以帮你完成这项工作吗?

答案 2 :(得分:0)

您需要使用setTimeOut。代码需要控制UI线程,让浏览器响应以避免脚本被停止。

阅读Nick Z.的这篇文章。 http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

W3C Spec还有一些名为“Efficient Script Yielding”的东西,我不确定它有多远,或者是否有任何浏览器支持它。 https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html

您也可以尝试HTML5 Web Workers。