【问题标题】:Browser timing out Javascript recursive function, how to solve?浏览器超时Javascript递归函数,如何解决?
【发布时间】:2010-07-01 12:08:45
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我想我可以问一下,关于如何在浏览器上保持活动状态的递归 javascript 脚本的提示,它会长时间延迟调用自身?
  • 如果您发布您正在谈论的那种代码的示例,那么人们可能会提供帮助。 “使递归函数超时”没有意义(至少对我而言)。
  • 另外,当超时函数将自己设置为另一个超时时,它不是“递归”。我不熟悉任何拒绝遵守超时处理程序的浏览器(当然,除非调用页面消失)。
  • 您好,感谢您的收看。假设:函数倒计时( Nr_of_seconds );函数 sendEmailToList( list_Of_Emails, nr_of_emails_per_count ) { 如果倒计时( 30 秒 ) 结束,则如果存在真正的电子邮件 -> sendEmails( nr_of_emails_per_count ) 从电子邮件列表中删除 (nr 每计数的电子邮件) Sendemailtolist };
  • 之前的伪代码pastie.org/1026617

标签: javascript browser timeout mootools ping


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您需要使用 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-26
        • 2012-09-29
        • 2021-07-15
        • 2021-08-30
        • 2017-04-14
        • 2011-08-13
        • 1970-01-01
        • 2011-11-30
        相关资源
        最近更新 更多