setInterval 会导致浏览器挂起吗?

2024-05-04

几年前,我被警告不要使用setInterval很长一段时间,因为如果被调用的函数运行时间超过指定的时间间隔,可能会导致浏览器挂起,然后无法跟上:

setInterval( function(){
  foo = 'bar_' + i++;
}, 1 );

现在,我知道在循环中添加大量代码可能会导致浏览器挂起anyway,以及像这样的阻塞代码alert, prompt, and confirm会停止代码的运行,但是有什么充分的理由可以避免setInterval?

注意:我知道如何进行递归setTimeout调用(因为这就是我一直在使用的),这个问题是我试图弄清楚它是否仍然值得使用它们,或者是否setInterval可以安全使用。


原因setInterval不好的是因为它会尝试每隔 X MS 执行一次代码,而不管线程中发生了什么。所以如果你有:

setInterval( complexFunction, 1 ); // complexFunction takes >1 MS to complete

...你最终可能会得到setInterval在它自己的代码完成之前尝试重新执行几次!但是,您可以使用setTimeout类似地并避免这个问题:

setTimeout( complexFunction, 1 );

function complexFunction() {
  // complex code
  setTimeout( complexFunction, 1 );
}

...now complexFunction只有在其自己的代码完成后才会再次调用自身,因此,如果其自己的代码花费的时间超过 1 MS 才能完成,您将不会像您那样有任何待处理的积压工作setInterval

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setInterval 会导致浏览器挂起吗? 的相关文章

随机推荐

  • 使用 ui-router 转到祖父母状态

    With ui router我可以用 state go 无需指定其完整路径即可转到父状态 有没有类似的方式去祖父母状态 我的父母状态是抽象的 In 文档示例 http angular ui github io ui router site
  • rspec 视图存根和部分视图

    我正在使用 RSpec Rails 3 2 8 上的 2 12 测试视图 我正在使用 CanCan 有条件地在页面上显示某些元素 这需要一个控制器方法 current user 在我的一些规范中 我已经能够删除 current user 例
  • Vim 中的空格作为制表符和退格键行为

    在我的 vimrc 中我有 set shiftwidth 4 set tabstop 4 set expandtab 当我点击 Tab 按钮时 设置为使用 4 个空格而不是 Tab 但是当我在 Tab 之后按退格键时 我需要退格所有 4 个
  • Python 对象什么时候可以被 pickle

    我正在使用多处理模块在 Python 中进行大量并行处理 我知道某些对象可以是 pickle 因此作为 multi p 中的参数传递 而其他对象则不能 例如 class abc pass a abc pickle dumps a ccopy
  • Google 放置 API:从 CID 到参考?

    我的目标 用已知的商业地点填充数据库 以便生成包含这些地点的地图 我坚持使用 已知地点 因为我的用户只会搜索数据库中的地点 我不想在地图上重新创建商业地点作为标记 因此纬度和经度不足以识别地点 因为这些地点已经在 Google 地图上提供了
  • 如何禁用 Aloha 编辑器工具栏?

    有没有办法像侧边栏一样禁用 Aloha 的 ExtJS 工具栏 Aloha settings modules aloha aloha jquery editables editable jQuery sidebar disabled tru
  • 使用 ADB 或 java 代码更改默认的 Android 键盘

    我正在构建一个使用特定键盘的自定义应用程序 因此当用户运行该应用程序时 默认键盘应更改为我的特定键盘 名称为黑客键盘 我如何使用java代码或从java代码调用adb命令来做到这一点 我的设备已获得 root 权限 这又是特定的应用程序 而
  • 未捕获的类型错误:未定义不是 indexOf 上的函数

    我目前有此代码来检查特定 ID 的网站 URL GET 选项 但每当运行此代码时 我都会收到一个奇怪的错误 Uncaught TypeError Undefined is not a function 这是我的代码 如果我能得到关于这个问题
  • 在 Unix 中,如何删除当前目录及其下面的所有内容?

    我知道这会删除子目录及其下面的所有内容 rm rf
  • 提高大型结构列表的二进制序列化性能

    我有一个以 3 个整数保存 3d 坐标的结构 在测试中 我将 100 万个随机点放在一起 List 然后对内存流使用二进制序列化 内存流大小约为 21 MB 这似乎非常低效 因为 1000000 点 3 坐标 4 字节应该至少为 11MB
  • iphone总是返回UIInterfaceOrientationPortrait

    我需要确保当我的UIViewController负载 它根据需要旋转 我已经实施了shouldAutorotateToInterfaceOrientation方法及其所有工作正常 除非应用程序首次加载时 当 iphone 处于横向模式时 或
  • JavaScript Intellisense 在 Visual Studio 2015 中不起作用

    我知道这个问题在网上以及整个网络上都有很多重复的问题 不幸的是 所提出的建议都不起作用 除了重新安装 VS 15 之外 我已经完成了所有操作 如果我可以帮助的话 我宁愿不这样做 我去过的一个网站 references js 背后的故事 ht
  • VBA - 循环遍历表单上的控件并读取值

    我想循环遍历表单上的控件并读取值 但是 Value 和 Checked 属性不可用 我的问题是 当我循环访问控件 在本例中为复选框 时 如何读取它们的值 Dim Ctrl as Control For Each Ctrl In frmMai
  • 指针问题! (安卓)

    我在 onTouch 方法中遇到多个指针的问题 所有指针都与一个布尔值相关联 如果向下则为 true 如果向上则为 false 非常重要的是 如果一个指针从 true 变为 false 它不会影响其他布尔值 我遇到的问题是 例如 当指针 1
  • JSON.NET 序列化 JObject,同时忽略 null 属性

    我有一个JObject它被用作template用于调用 RESTful Web 服务 这JObject通过解析器创建 并且由于它用作模板告诉用户端点架构是什么样子 所以我必须找到一种方法来保留所有属性 这就是为什么我将它们的值默认为null
  • 如何提高MySQL INSERT和UPDATE性能?

    我们数据库中的 INSERT 和 UPDATE 语句的性能似乎正在下降 并导致我们的 Web 应用程序性能不佳 表是InnoDB 应用程序使用事务 我可以做一些简单的调整来加快速度吗 我认为我们可能会遇到一些锁定问题 我怎样才能找到答案 你
  • iOS:iOS 4.3 和 5.0 之间不同的 addSubview 行为

    之前在 iOS 4 3 中编码时 我发现将视图控制器的视图添加到另一个视图时 superview addSubView controller view 控制器实例将不会收到 viewWillAppear viewDidAppear消息 比我
  • 带有 wsdl2java 插件的 gradle

    我正在使用 no nils wsdl2java 插件 完整的 gradle build 文件如下所示 plugins id org springframework boot version 2 3 4 RELEASE id io sprin
  • 通过网络共享的 SQL CE

    我之前见过这个问题 但找不到关于什么是可能 不可能以及什么解决方法可能可用的明确解释 我有一个现有的 C 应用程序 它使用 SQL CE 来存储本地信息 该数据库只能由单个应用程序访问 并存储在用户的 appdata 文件夹中 某些环境将
  • setInterval 会导致浏览器挂起吗?

    几年前 我被警告不要使用setInterval很长一段时间 因为如果被调用的函数运行时间超过指定的时间间隔 可能会导致浏览器挂起 然后无法跟上 setInterval function foo bar i 1 现在 我知道在循环中添加大量代