为什么这个基于setTimeout的代码在Firefox中没有超时(在Internet Explorer/Chrome中有效)?

 小猪爱情守护者 发布于 2023-02-08 14:13

我有以下代码,它演示了直接从事件触发器调用长时间运行的函数与使用的区别setTimeout().

预期行为:

当按下第一个按钮时,它会显示为按下,计算运行几秒钟,然后当计算完成时,按钮再次按下,第二列从"尚未计算"变为"计算完成".(我不会详细说明为什么会发生这种情况; 它在相关答案中进行了解释.)

按下第二个按钮时,按钮立即按下; 第二列立即更改为"正在计算..."文本.当计算在几秒钟后完成时,第二列从"计算..."变为"完成计算".

实际发生了什么:

这在Chrome中完美运行(两个按钮都按预期运行)

这在Internet Explorer 8中完美运行

这在Firefox(第25版)中不起作用.具体来说,第二个按钮作为第一个按钮表现为100%.

在更改超时setTimeout()01无影响

在更改超时setTimeout()0500 作品

这让我有一个很大的难题.

根据为什么setTimeout()有效的原因,而缺少一个没有的原因,延迟对事物的运作方式应该没有影响,因为这里setTimeout()的主要目的是改变排队顺序,而不是拖延事情.

那么,为什么它不能在Firefox上使用延迟0或1,但按预期工作延迟500(并且适用于Internet Explorer 8/Chrome上的任何延迟)?

更新:除了下面的源代码,我还做了一个JSFiddle.但由于某些原因,JSFiddle甚至拒绝加载我的Internet Explorer 8,因此对于该测试,需要以下代码.

更新2:有人提出了dom.min_timeout_valueFirefox中配置设置问题的可能性.我已将其编辑为4到0,重新启动浏览器,并且没有修复任何内容.它仍然失败,超时为0或1,成功为500.


这是我的源代码 - 我只是将其保存到C:驱动器上的HTML文件中,并在所有三个浏览器中打开:



Not Calculating yet.
Not Calculating yet.

要进行测试,您需要将Internet Explorer 8的嵌套循环边界更改为300/100/100; 或者对于Chrome的1000/1000/500,由于"这个JS花费太长时间"的错误以及JavaScript引擎速度的不同灵敏度.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有