当前位置: 首页 > 面试题库 >

setTimeout是否有限制?

法风畔
2023-03-14
问题内容

具体说说(服务器端)V8,并假设我不担心准确性,因为我可以检测和补偿它,那么我可以使用setTimeout 逐字
间隔设置几千个相对简单的超时,而无需面对任何其他限制除了RAM以外?如果我要使用一个在任何给定时间可能有数千个计划的超时的系统,我应该注意什么吗?

作为记录,我已经阅读了John’s Resig关于Javascript计时器如何工作的出色文章,因此无需指出那里已经介绍的内容:)我知道node.js是单线程的,如果计时器花费的时间太长,计时器可能会阻塞其他计时器等

PS:我严格地试图理解我所描述的内容的可行性,无需指出“肯定有更好的方法来完成您打算做的事情!”。


问题答案:

您可能遇到的唯一实际限制是节点可用的内存量。使用以下代码进行测试。我使用oneMillion和int32Max成功运行了以下示例。使用int64Max时,我从节点收到以下错误。我正在使用具有4GB
RAM的64位Windows。

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

要测试的节点代码:

var util = require('util');
var int64Max = 9007199254740992; 
var int32Max = 2147483647;
var oneMillion = 1000000;
var tenThousand = 10000;
var counter = 0;

//Exchange the limiter with one of the above vars to test.
for (var i = 0; i < oneMillion; i++){   
     setTimeout(log, 1);
     //Required as the timeout/callback method will not be called until the loop ends due 
     //to node/js being single threaded.
     util.log('loop:' + i);
}

function log(){
     util.log('callback: ' + counter++);
}


 类似资料:
  • 问题内容: 如标题所述,会话变量是否有限制(如果有),或者它们被视为 常规 变量并且可以存储相等数量的数据? 我在寻找是否存在除最大长度,最大值等变量类型之外的其他限制。 附注:如果问题不清楚,请告诉我。 提前致谢! 问题答案: 正如@Thariama所说,变量的数量没有限制。此外,会话中可以存储的数据量没有限制(我看到会话的大小为几十MB)。 随着会话的大小变大,您会遇到各种奇怪的问题:PHP

  • 问题内容: 考虑以下示例: 是什么导致该执行 立即 ,而不是等待3秒为单位设置,以及只执行警戒 ONCE ,而不是在计划每隔5秒? 感谢您的任何帮助,您可以提供! 石匠 问题答案: 这看起来不像立即调用函数吗? 尝试传递函数(不执行):

  • 问题内容: 这个问题出现在Spring类中,该类具有相当长的类名称。类名长度的语言是否有限制? 问题答案: 在Java语言规范指出标识符的长度不受限制。 但是实际上,文件系统将限制生成的文件名的长度。

  • 问题内容: HTML中的属性值需要多长时间? 我在一个新的应用程序中使用HTML5样式数据属性(),并且在一个地方存储大量数据(最多100个字符)非常方便。虽然我怀疑这笔钱是可以的,但它提出了多少是太多的问题? 问题答案: HTML 4 从HTML 4的角度来看,属性是SGML构造。它们的限制在HTML4的SGML声明中定义: 这里讨论的值是“ ATTSPLEN”,这是元素的属性规范列表的限制(应

  • 问题内容: 在浏览器中,如果从调用的函数中使用,则将强制执行至少4ms的延迟。Mozilla的开发人员Wiki 描述了此行为,并提到该行为已在HTML5中标准化。 Node.js的文档未提及最小延迟。但是,该函数的文档将其描述为的更有效的替代方法。这表明它有更高的效率,因为它避免了这种延迟。否则可能会被优化以表现出相同的行为。 是否像网络浏览器一样,Node.js对setTimeout实施了最小延

  • 问题内容: 我们都知道,将字符串传递给(或)是邪恶的,因为它是在全局范围内运行的,存在性能问题,如果您注入任何参数等,则可能不安全。因此,绝对不建议这样做: 赞成: 我的问题是:有没有理由做前者?有 没有 更好的选择?如果不是,为什么甚至允许呢? 我想到的唯一一种情况是希望使用全局范围内存在但局部范围已被覆盖的函数或变量。在我看来,这听起来像是糟糕的代码设计,但是… 问题答案: 您始终可以通过将全