iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中怎么利用setTimeout防止循环超时
  • 493
分享到

JavaScript中怎么利用setTimeout防止循环超时

2024-04-02 19:04:59 493人浏览 八月长安
摘要

今天就跟大家聊聊有关javascript中怎么利用setTimeout防止循环超时,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。js是单线程的,一个

今天就跟大家聊聊有关javascript中怎么利用setTimeout防止循环超时,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

js是单线程的,一个代码块里面的代码,只能按顺序从上到下执行,所以如果中间有一块代码,执行起来非常耗时,就会导致下面的代码无法执行,出现浏览器假死的状态。

JS的耗时操作,常见的有两种  1.向服务器发起请求   2.对数组的循环操作  (当然,还有一种,就是把1和2合在一起,叫做  在循环操作里面向服务器发出请求,哈哈哈,实际项目里面经常有人这么干)

解决这两种耗时操作的思路都是一样的——异步编程。JS的异步编程,并不是多线程,因为正如上面所说的,JS是单线程的。JS的异步,直观上的理解,就是延时和回调

对于第一种耗时情况,我们采用的是ajax异步请求,待耗时的请求返回结果时,进行回调操作。

对于第二种耗时情况,则可以使用本文即将介绍的方法,setTimeout延时调用,进行数组分块处理

【这才是高潮】

假设我们要处理一个大小为100的数组,对于数组中每个元素,都需要执行大量的处理,每个元素大约需要1s的处理时间;

并且我们认为,程序后面的代码,不会依赖于我们对这个数组的处理结果。

于是就有了下面这段代码,以两种方式来处理这个数组,一种是常规方式,一种是setTImeout的数组分块处理

var processTime = 0;
//常规操作
tcCircle();
//注释上面的代码 放开下面注释 以执行setTimeout数组分块操作
//tcCircleUseSetTimeout();
//time consuming circle
function tcCircle(){
  var arr = new Array(100);
  for(var i=0;i<arr.length;i++){
    process(arr[i]);
  }
  //页面标题栏一直转圈 且下面的语句迟迟无法执行
  console.log("important process");
  console.log("finish!");
}
function tcCircleUseSetTimeout(){
  var arr = new Array(100);
  setTimeout(function(){
    var ele = arr.shift();
    process(ele);
    if(arr.length>0){
      setTimeout(arguments.callee,100);
    }
  },100);
  console.log("important process");
  console.log("finish!");
}
function process(ele){
  console.log("process"+(++processTime));
  //模拟长时间的处理过程
  sleep(1000);
}
function sleep(sleepTime){
  var start=new Date().getTime();
  while(true){
    if(new Date().getTime()-start>sleepTime){
      break;  
    }
  }
}

首先我们执行常规的操作,由于是单线程,可想而知,执行完这段程序,至少要 1*100 = 100s,并且浏览器会出现假死

JavaScript中怎么利用setTimeout防止循环超时

然后我们执行setTimeout方式的方法,setTImeout的方式,我们每次只操作数组里面的一个对象,并且在每次操作之间,设置了100ms的延时,供js引擎执行主干的代码,因此,很明显,执行的效果非常棒!

JavaScript中怎么利用setTimeout防止循环超时

看完上述内容,你们对JavaScript中怎么利用setTimeout防止循环超时有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网JavaScript频道,感谢大家的支持。

--结束END--

本文标题: JavaScript中怎么利用setTimeout防止循环超时

本文链接: https://www.lsjlt.com/news/74588.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中怎么利用setTimeout防止循环超时
    今天就跟大家聊聊有关JavaScript中怎么利用setTimeout防止循环超时,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JS是单线程的,一个...
    99+
    2024-04-02
  • 详解怎么检测和防止JavaScript死循环
    目录前言在 for 语句中修复无限循环在 while 语句中修复无限循环总结前言 Js死循环是怎么造成的呢!其实在我们写代码时一些不注意或漏写,就写出死循环,就如下面代码: 如果i...
    99+
    2024-04-02
  • ogg怎么防止数据死循环同步
    这篇文章主要讲解了“ogg怎么防止数据死循环同步”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ogg怎么防止数据死循环同步”吧!最近在ORACLE 到MYS...
    99+
    2024-04-02
  • JavaScript中for循环怎么用
    这篇文章给大家分享的是有关JavaScript中for循环怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言对于for循环,相信大家再常用不过了。但是这回说下for循环是因...
    99+
    2024-04-02
  • Javascript中怎么利用闭包循环绑定事件
    Javascript中怎么利用闭包循环绑定事件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。例如:一个不确定长度的列表,在鼠标...
    99+
    2024-04-02
  • JavaScript中的for循环怎么用
    这篇文章主要介绍“JavaScript中的for循环怎么用”,在日常操作中,相信很多人在JavaScript中的for循环怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • JavaScript中setInterval()与setTimeout()计时器有什么用
    这篇文章主要为大家展示了“JavaScript中setInterval()与setTimeout()计时器有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“...
    99+
    2024-04-02
  • javascript两个函数相互调用防止死循环的方法是什么
    这篇文章主要介绍“javascript两个函数相互调用防止死循环的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript两个函数相互调用防止死循环的方法是什么”文章能帮助大家解...
    99+
    2023-07-05
  • 怎么用Javascript写div循环
    在Web开发中,使用JavaScript动态生成HTML元素是常见的技术,而其中一种常见的需求就是需要循环生成多个相同类型的HTML标签。本文将介绍使用JavaScript来实现div循环的方法。步骤:创建一个div容器使用JavaScri...
    99+
    2023-05-14
  • JavaScript中forEach怎么退出循环
    小编给大家分享一下JavaScript中forEach怎么退出循环,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript可以做什么1.可以使网页具有交...
    99+
    2023-06-14
  • javascript中循环次数怎么算
    在JavaScript中,循环语句是经常被用到的语句之一。循环语句就是重复执行一段代码块,直到满足某个条件为止,这个条件可以是值等于某个指定的值,或者某个布尔表达式为真等等。在使用循环语句时,我们需要考虑到循环的次数,因为循环次数的多少可能...
    99+
    2023-05-14
  • 怎么在linux中利用shell循环日期
    怎么在linux中利用shell循环日期?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。#!/usr/bin/env bashstart_date=&q...
    99+
    2023-06-09
  • Javascript中怎么防止图片拉伸
    今天就跟大家聊聊有关Javascript中怎么防止图片拉伸,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一步:先画个框框 (这里顺便安利一种自适应...
    99+
    2024-04-02
  • javascript中怎么防止内存泄漏
    小编给大家分享一下javascript中怎么防止内存泄漏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • Android中怎么利用Handler防止内存泄露
    今天就跟大家聊聊有关Android中怎么利用Handler防止内存泄露,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 Handler可能导致的内存泄露及其优化 &...
    99+
    2023-05-30
    android handler
  • Java中怎么利用volatile防止指令重排
    这篇文章将为大家详细讲解有关Java中怎么利用volatile防止指令重排,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是指令重排计算机在执行程序时,为了提高性能,编译器和处理器一般会进...
    99+
    2023-06-20
  • javascript的循环语句怎么用
    这篇文章主要介绍“javascript的循环语句怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript的循环语句怎么用”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • Javascript基础循环怎么使用
    这篇文章主要讲解了“Javascript基础循环怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Javascript基础循环怎么使用”吧!循环for循环是任何一门语言都会有个命令,用于...
    99+
    2023-06-22
  • Android中怎么利用ViewPager实现无限循环
    本篇文章为大家展示了Android中怎么利用ViewPager实现无限循环,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android ViewPager实现无限循环的实例ViewPager自身并不...
    99+
    2023-05-31
    android viewpager
  • 怎么在Linux中利用shell 实现for循环
    本篇文章为大家展示了怎么在Linux中利用shell 实现for循环,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C语言风格for ((i=1; i<=100; ...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作