`
yanghuidang
  • 浏览: 950466 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JavaScript基于计时器的伪线程机制

阅读更多

在之前的那篇浏览器对Javascript代码执行的限制文章中,描述了5个浏览器在javascript代码执行的时间过长的时候怎么办。它不会改变浏览器的行为,也不可能取消掉后端服务器的进程。不过,计时器可以帮助我们实现长期运行的任务而不需要阻塞浏览器。

  什么是计时器

  JavaScript代码中,每一个函数都可以设定在某一个时刻之后执行:

  • setTimeout(function,msec[,arg1...argN]),会在多少毫秒之后运行这个函数。后面的参数会传递给要执行的函数。
  • setInterval(function,msec[,arg1...argN]),与setTimeout类似,只不过是每这么多毫秒执行一次。

  还有两个方法,clearTimeout()和 clearInterval(),可以清除计时器。

var timerID = setTimeout(myfunction, 500 ); clearTimeout(timerID);

  需要注意的是:

  • setTimeout和setInteral会给函数传递一个引用。setTimeout(myfunction(),500)这样的代码会立即执行这个函数。
  • 毫秒数不会那么的精确。他只会在浏览器进程空闲的时候才会比较准确的按时间执行。
  • 不要过于依赖这样的执行顺序:setTimeout(f1,50),setTimeout(f2,50),有可能f2()会先执行。

  基于计时器的执行

  定时的代码不会立即执行,这样浏览器在这期间还能做一些别的事情。因此我们也可以将一个长的任务分成好几个部分来执行。

  举一个简单的饿例子,加入我们想按照顺序执行f1(),f2(),f3():

function ProcessThread(func) { var ms = 20 ; setTimeout( function () { func.shift()(); if (func) { setTimeout(arguments.callee, ms); } }, ms); } ProcessThread([f1, f2, f3]);

  func.shift()()是什么?

  这里需要解释一下:func.shift()会移除数组中的第一个元素然后返回这个元素。这里返回的就是个函数,所以我们再用一个括号来执行它。它跟var f = func.shift(); f()是一样的。

  ProcessThread会依次运行传递进来的所有函数,但是会相隔20ms。无论多少个函数,都会按次序执行,假设没有哪个程序会跑出”unresponsive script”错误。

  当然,这种方法对于处理大型数据的时候会比较有用。

0
0
分享到:
评论

相关推荐

    计时器源码.rar

    - **计时器类型**:计时器可以分为系统级计时器(如操作系统API提供的)和应用程序级计时器(如基于定时器对象的)。常见的计时器有单次触发和周期性触发两种。 - **事件驱动编程**:计时器通常与事件驱动编程模型...

    js计时器 (脚本语言)

    本文将深入探讨JavaScript计时器的使用方法、相关API以及常见应用场景。 一、JavaScript计时器类型 JavaScript提供了两种主要的计时器类型: 1. `setTimeout()`: 这个函数用于在指定的毫秒数后调用一个函数或执行...

    多个计时器 可以单个暂停 开始 重置

    同时,为了确保计时器的线程安全,尤其是在多线程环境中,需要考虑同步和锁机制,防止多个线程同时操作同一计时器导致的数据不一致。在某些编程语言中,如Java和C#,可以利用内置的同步原语(如`synchronized`关键字...

    计时器实现

    4. 基于多线程的计时器:在多线程环境中,可以创建一个专门的线程来处理计时任务,避免阻塞主线程。 5. 实时系统中的硬实时计时器:在对时间精度要求极高的实时系统中,可能需要硬件支持的计时器,如嵌入式系统的...

    JavaScript是否可实现多线程 深入理解JavaScript定时机制

    同时,浏览器还有其他一些线程,例如定时触发线程,它负责管理setTimeout和setInterval等定时操作的计时器。当定时器的计时结束时,定时触发线程会通知JavaScript引擎线程,将对应的回调函数放入事件队列中。 了解...

    一个简单的JSP计时器

    **JSP计时器详解** ...通过学习这个简单的JSP计时器,初学者可以理解JSP与JavaScript的协同工作,以及服务器端和客户端交互的基础概念。这将有助于他们进一步掌握动态Web开发中的核心技术和最佳实践。

    计时器源码,主要用于述职,汇总,演讲计时

    6. **异常处理**:良好的计时器源码应包含异常处理机制,以应对可能的错误情况,如用户在计时过程中关闭应用或者系统突然重启。 7. **跨平台兼容性**:如果计时器应用需要在不同操作系统或设备上运行,那么需要考虑...

    javascript经典特效---准确的计时器.rar

    综上所述,实现一个准确的JavaScript计时器,需要结合`requestAnimationFrame`,合理管理状态,注意处理时间差,并且考虑到性能和UI流畅性。通过这样的方法,我们可以创建出适应各种应用场景的高效计时器。在实际...

    简单计时器

    计时器的工作机制通常是启动一个进程,记录开始时间,然后在预定的时间间隔后触发某个事件或执行特定操作。这个过程可能涉及到线程、回调函数和事件循环等编程概念。例如,你可以设置一个计时器在5分钟后提醒你,...

    JS 系列计时器资料.rar

    "JS系列计时器资料.rar"这个压缩包包含了关于JavaScript计时器的详细文档,名为"5.JS计时器.doc"。以下将深入探讨JavaScript中的计时器机制及其应用。 1. **setTimeout()和setInterval()** - `setTimeout()`: 这个...

    cumulativetimer用于基准JavaScript应用程序的简单累积计时器

    《JavaScript应用程序中的累积计时器:cumulative-timer解析》 在JavaScript开发中,性能测试是优化代码的关键步骤。为了有效地衡量代码执行时间,开发者常常会利用各种计时工具。"cumulative-timer"就是这样一款专...

    djs.rar_DJS哪里的时间_djs_倒计时_倒计时器_倒计时计时器

    在技术实现上,DJS倒计时器通常基于编程语言如JavaScript或Python开发,通过计算当前时间与目标时间之间的差值,动态更新界面的显示。对于Web应用,它可能利用浏览器提供的Date对象和定时器API(如setTimeout或...

    定时计时器

    在IT领域,定时计时器是一种非常常见的工具,尤其在软件开发中,它扮演着至关重要的角色。在各种应用程序中,比如任务调度、自动化流程、提醒服务等,定时计时器都发挥着不可或缺的功能。本篇文章将深入探讨定时计时...

    计时器timer

    计时器在各种编程语言和框架中都有实现,例如JavaScript中的`setTimeout`和`setInterval`,Java中的`java.util.Timer`,或者在iOS和Android开发中的各种定时器API。它们用于在指定的时间间隔后执行一段代码,常用于...

    理解javascript定时器中的单线程

    JavaScript定时器中的单线程是指JavaScript代码的执行机制,它是由一个事件驱动的单线程模型来实现的。这种模型保证了代码的顺序执行,确保了JavaScript操作的同步性。在这个模型中,JavaScript引擎是单线程的,也...

    计算机接口实现倒计时器

    综上所述,实现一个计算机接口的倒计时器涉及了时间管理、编程语言应用、用户交互、事件驱动编程、多线程、错误处理等多个方面的知识。通过理解和掌握这些概念,开发者可以创建出高效且用户友好的倒计时应用程序。

    js计时器-完整源码.rar

    JavaScript计时器是一种常见且重要的前端开发工具,用于在网页上实现定时执行特定任务的功能,如倒计时、动画效果、自动刷新等。本资源"js计时器-完整源码.rar"提供了一套完整的JavaScript计时器源代码,旨在帮助...

    倒计时功能的计时器

    在IT领域,计时器是一种常见且实用的工具,尤其在编程、测试和日常时间管理中发挥着重要作用。"倒计时功能的计时器"指的是一个能够从设定的时间点开始逆向计时的程序,它通常用于提醒用户某个特定事件即将发生。这种...

    jQuery苹果秒表计时器代码.zip

    本篇文章将详细讲解基于jQuery的苹果秒表计时器代码的实现原理和关键点,帮助你深入理解这一实用的前端技术。 首先,我们需要了解jQuery库。jQuery是一个快速、简洁的JavaScript库,它简化了HTML文档遍历、事件处理...

    tamer计时器

    计时器通常基于操作系统提供的时间服务,例如Windows的Kernel32库或Linux的POSIX定时器。它们通过设置一个定时器对象,当达到设定的间隔时,系统会发送一个信号或回调函数来通知程序。这个过程可以是周期性的,也...

Global site tag (gtag.js) - Google Analytics