`
hzxulei
  • 浏览: 8578 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

javascript 设置时延

阅读更多
在JavaScript中,有两种方式可以设置时延(time delay)。第一种方式很简单,这种方法会先等待所设定的时长,然后再运行函数代码。第二种也是一样,只是它会重复运行函数代码。

注意,许多浏览器的最小时延值在25到75毫秒之间,一些极速浏览器的最小时延可达3毫秒。如果设置的时延值小于浏览器的最小值,代码运行的实际时延就是就是浏览器的最小时延值。即便设置时延值高于最小值时,其实际时延效果也绝非完美。多数浏览器实际运行的延时值要稍高于设定值,一般只有几毫秒的误差。一些浏览器会在间隔计时器中(interval timer)修正误差。另外需要注意的,在同一页面上设置过多的计时器导致浏览器速度变慢,甚至无响应。三或四个计时器通常是可接受的上限。

setTimeout

第一种办法使用Window对象的setTimeout方法。这种方法设置特定毫秒值,然后运行指定代码,代码可以是对函数的直接引用,也可以是作为源代码的字符串。

window.setTimeout(referenceToFunction,timeInMilliseconds);window.setTimeout('runMoreCode()',timeInMilliseconds);

如有可能,你应该使用直接的函数引用,这样就更有效。使用字符串的话就要求浏览器创建新的脚本环境,以便能够运行脚本。

如果你创建计时器,计时器后面的代码会照常运行。在延迟设定时间后(旧线程结束),计时器会启动新线程,setTimeout指定的代码代码会在新线程中运行,而其他代码仍运行在原先的线程中。跟其他复杂的语言相比,JavaScript不提供任何方式来控制线程休眠,唤醒,或是生成。 JavaScript引擎会处理一切,新线程会在当前线程结束后执行。尽管在理论上,多线程脚本引擎可以在老线程运行的同时执行新线程,但 JavaScript引擎是一个单线程的引用程序,只允许在一个线程结束后,开启其他线程。这一规则同样适用于事件(Event),它会在自己的线程中运行,并可随时触发。它会等待当前线程结束,然后才会开启新线程。

要给延时计时器传递参数,有两个方式可选。使用字符串,不过需要确保你传递的参数可以用基本的数据类型表示。不要包含任何可以破坏字符串格式的字符(如引号)。如果可以,请避免使用这种方法。不过以防你需要使用这样方法,下面提供了一个例子参考。

window.setTimeout('runMoreCode(''+someString+'','+someNumber+')',10);

直接使用函数要更方便些,因为你可以将变量作为额外的参数传递给setTimeout方法。除了更方便,这种办法也接受任何类型的变量。这一要注意,这种办法在IE中不行。对采用Mozilla Gecko引擎的浏览器要小心(如Firefox和Netscape 6+),因为这些浏览器总是会传输一个额外的参数给函数——毫秒误差值(number of miliseconds error),下面这个例子使用了内联匿名函数,其等效于使用直接的函数引用。

window.setTimeout(function (a,b) { //do something with a and b },10,someString,someObject);

传输给函数的变量将是函数调用时变量所保存的值。比如你有一个名为myVar的变量,其保存的数值为5。如果你调用时延函数,将变量myVar传递给它,然并设置1秒的延时值。然后你立即将myVar保存的数值改为7。那么当时延函数运行时,他会运行所时延函数所引用的函数,并将数字5传递给所引用的函数,因为在调用时延函数时,变量myVar保存的值为数字5。

悲剧的是,IE浏览器不能直接给时延函数传递额外的参数,确保兼容性常见的办法就是保证变量处在当前作用域中,以便时延函数直接引用。

setInterval

setInterval 方法在语法上与setTimeout()一样。区别就是它会以同样的时延间隔重复运行,直至取消。

window.setInterval(function (a,b) { //do something with a and b },10,someString,someObject);

清除timeout和interval计时器

你可以调用相应的clearTimeout和clearInterval方法来取消timeout和interval计时器,计时器中的代码就不会运行。在这个例子中,interval 计时器被设置成每一秒就运行一次。而timeout计时器被设置成在3.5秒后取消interval计时器运行。

var myInterval = window.setInterval(function (a,b) { myNumber++; },1000); window.setTimeout(function (a,b) { clearInterval(myInterval); },3500);

获取timeout对象跟获取inteval对象的方法一样,而且你一样也可以使用clearTimeout取消timeout计时器。
分享到:
评论

相关推荐

    基于Java的高性能、低时延、高可用zbus服务总线设计源码

    该项目是一款基于Java的高性能、低时延、高可用zbus服务总线设计源码,包含198个文件,涵盖152个Java源文件、12个XML配置文件、6个HTML文件、6个JAR包文件、4个Markdown文件、4个属性文件、2个JavaScript文件、2个...

    dns-host:简单,轻量级的DNS服务器,用纯JavaScript编写,没有外部依赖关系

    这是用纯JavaScript编写的简单,轻量级的DNS服务器,没有任何外部依赖关系。 该服务器允许您接收和响应DNS查询。 该服务器支持捕获所有常见DNS记录类型(以及更多)的请求: 一种美国汽车协会NS 文本文件MX CNAME ...

    华为OD机试C卷- 最小传输时延Ⅱ(Java & JS & Python).md-私信看全套OD代码及解析

    ### 华为OD机试C卷 - 最小传输时延Ⅱ #### 题目背景与概述 本题目属于华为OD(Outsourcing Development)系列面试中的算法题,主要考察的是动态规划算法的应用能力。题目涉及到的数据结构是二维矩阵,并且通过模拟...

    JavaScript启动性能瓶颈分析与解决方案.docx

    JavaScript启动性能瓶颈主要体现在语法分析、编译和脚本执行这三个关键步骤,这些过程占据了引擎启动的大部分时间,直接影响用户可交互时延。在V8引擎中,这一问题尤为显著,尤其是在移动端,由于硬件资源限制,解析...

    仿百度,谷歌输入框自动提示功能---JSON版

    根据提供的信息,我们可以深入探讨如何实现仿百度、谷歌输入框自动提示...此外,良好的用户体验也是不可忽视的一环,包括合理的时延设置、友好的视觉反馈等。希望本文能帮助你更好地理解这一功能的实现原理和技术细节。

    关于JS定时器(setTimeout setInterval)定时不准问题1

    1. 动态计算时差:在定时器开始前和运行时动态获取当前时间,在设置下一次定时时长时,在期望值基础上减去当前时延,以获得相对精准的定时运行效果。 setTimeout和setInterval的定时不准问题是由于JavaScript的单...

    html_测试的网页测试部分代码

    使用Canvas需要JavaScript的配合,通过`canvas.getContext('2d')`获取2D渲染上下文,然后调用各种绘图方法,如`drawImage()`来绘制飞机图片。 标签"html"提示我们,这个项目主要关注HTML的基础和应用。HTML是网页...

    25-页面性能:如何系统地优化页面?_For_vip_user_0011

    RTT是衡量网络性能的一个重要指标,表明从发送端发送数据开始,到发送端收到来自接收端的确认,总共经历的时延。 为了系统地优化页面加载速度,我们需要了解影响加载过程中的几个核心因素。首先,我们需要减少关键...

    计算机网络试题,东北师大.pdf

    8. **浏览器结构**:由客户程序、解释程序(如JavaScript解释器)和渲染引擎组成,负责解析和显示网页内容。 9. **曼彻斯特编码**:数据传输速率是波特率的一半,因为每个数据位被编码为两个相位相反的脉冲。 10. ...

    Node.js-基于kue的egg延时队列

    在IT行业中,Node.js是一个非常流行的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程。在本主题中,我们关注的是“Node.js-基于kue的egg延时队列”。Kue是Node.js中一个强大的任务队列系统,主要...

    计算机网络(第 6 版)课件:第8章 因特网上的音频视频服务.ppt

    - **具有元文件的万维网服务器**:通过HTML和JavaScript等技术,服务器可以提供包含流媒体链接的元文件,用户可以直接播放。 - **媒体服务器**:专门用于存储和传输多媒体内容的服务器,能提供更高效的流媒体服务。 ...

    Laravel开发-laravel-toastr

    Laravel 提供了一个配置文件 `config/toastr.php`,在这里可以设置 Toastr 的默认参数,如通知的动画效果、时延、是否自动关闭等。根据项目的需要,你可以自定义这些配置。 **4. 使用 Toastr** 在 Laravel 控制器中...

    基于AJAX和PHP的轻量级博客系统设计与实现.pdf

    AJAX技术的核心对象是XMLHttpRequest对象,正是该对象给前台页面提供异步交互的能力,从而使Web应用具有像传统C/S应用程序一样拥有具有时延的通讯。XMLHttpRequest对象是一个轻量级对象,只有少量的几种属性和方法,...

    基于SVG_AJAX_Internet的电厂运行监视系统.pdf

    AJAX技术是一种基于JavaScript和XML的异步通信机制,它可以在不刷新整个网页的情况下异步更新页面内容,提高了系统的响应速度和用户体验。通过使用AJAX技术,可以实时更新电厂的运行状态,提供给操作人员实时的监视...

    ar-test:AR测试

    这个项目的核心是将JavaScript库Three.js与AR功能相结合,为用户提供一个在真实环境中预览和定制虚拟车辆的交互式体验。下面我们将深入探讨这个领域的相关知识点。 首先,Three.js是一个基于WebGL的3D库,它使得在...

    jquery横向下拉三级菜单效果

    通过设置适当的时延和速度,可以创造出流畅的用户体验。 此外,为了确保菜单在各种屏幕尺寸上都能正常工作,响应式设计也是必不可少的。可以使用媒体查询(Media Queries)来根据设备的视口宽度调整菜单的布局,...

    masuyun.com:马速云是国内领先的企业级云计算服务商。专注于OpenStack公有云技术研发,提供基于OpenStack云服务器的全方位解决方案,为用户提供可信赖的企业级公有云服务

    CDN网络通过在全球范围内设立边缘节点,将静态资源缓存到离用户最近的节点上,从而降低访问时延,增强网站性能。这对于流量大、用户分布广的网站来说尤其重要,它可以提高网页加载速度,降低服务器压力。 标签中的...

    基于Go语言构建的YoMo:支持Geo分布式系统的开源流式服务器端框架设计源码

    该项目为基于Go语言的YoMo开源流式服务器端框架设计源码,包含278个文件,涵盖Go、...YoMo致力于支持Geo分布式系统的构建,已被多个产品应用于Metaverse基础设施,以实现全球分布式系统的低时延接入和实时计算需求。

    web-在线网络测速 最终版

    4. 服务器记录并计算测试过程中的速度、时延等数据。 5. 完成测试后,服务器将结果返回给前端,显示在网络测速结果页面上。 6. 可能还会包含额外的功能,如保存历史记录、分享测试结果、与其他用户的结果对比等。 ...

    Trex

    此外,了解如何阅读和分析网络性能指标,如丢包率、时延和带宽利用率,也是使用Trex进行网络性能优化的关键。 总的来说,Trex是一个强大的网络测试工具,利用JavaScript的力量,为企业和开发者提供了一种高效且灵活...

Global site tag (gtag.js) - Google Analytics