0

我不得不用 JS + PHP + MYSQL 开发一个时事通讯管理器,我想知道一些关于浏览器超时 JS 功能的事情。如果我正在运行一个延迟调用自身的递归函数(而 PHP 返回一个电子邮件列表),我如何确定浏览器不会超时这个 JS 函数?

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

PS - 这还没有发生在这个应用程序上,我只是想防止更糟糕的情况(因为我测试了一个时事通讯管理器,它与我正在开发的这个工作相同)。由于我的虚拟电子邮件列表很小,而且通话之间的延迟也很小,所以这很好用,但是让我们想象一个 1,000 个联系人列表,发送之间的延迟为 120 秒:每 2 分钟发送 30 封电子邮件。

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

感谢您抽出宝贵时间对此主题发表任何评论;D

4

3 回答 3

0

您需要使用 setTimeOut。代码需要将控制权交给 UI 线程并让浏览器响应以避免脚本停止。

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

W3C 规范中也有一些关于此的内容,称为“高效脚本生成”,我不确定它有多远,或者是否有任何浏览器支持它。 https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html

你也可以试试 HTML5 Web Workers。

于 2013-05-05T21:11:33.170 回答
0

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

有很多选项可以处理批量作业,把它看成一个更复杂的 .periodical (setInterval),它可以理解结果的异步性质并可以补偿滞后等。我认为它实际上可以按照您的要求进行设置开箱即用,您所需要的只是一个 oncomplete 回调,它从您的挂起数组中清除完成(例如)。

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

于 2010-07-01T19:41:05.620 回答
0

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

这可以为您完成这项工作吗?

于 2010-07-01T19:52:10.293 回答