解决JavaScript计时器变慢的问题

解决javascript计时器变慢的问题

本文旨在解决JavaScript中使用`setTimeout`实现的计时器逐渐变慢的问题。我们将分析问题的根源,并提供一种基于系统时间的解决方案,确保计时器的准确性和稳定性。通过修改代码,利用`Date`对象获取当前时间,计算时间差,并使用`requestAnimationFrame`优化动画效果,可以创建一个更精确的计时器。

问题分析:setTimeout的局限性

使用setTimeout函数在JavaScript中创建计时器是一种常见的方法。然而,这种方法存在一个固有的问题:setTimeout的回调函数并非在指定的时间间隔后立即执行。它会被放入事件队列,等待主线程空闲时才执行。

这意味着,如果主线程繁忙(例如,执行复杂的计算或渲染),回调函数的执行时间可能会延迟。随着时间的推移,这些延迟会累积,导致计时器逐渐变慢。每次更新HTML元素也会消耗时间,进一步加剧这个问题。

解决方案:基于系统时间的计时器

为了解决setTimeout的局限性,我们可以使用系统时间来计算经过的时间,而不是依赖setTimeout的精确度。这种方法的核心思想是:

立即学习“Java免费学习笔记(深入)”;

AI建筑知识问答 AI建筑知识问答

用人工智能ChatGPT帮你解答所有建筑问题

AI建筑知识问答 22 查看详情 AI建筑知识问答 在计时器启动时,记录一个起始时间。在每次更新计时器显示时,获取当前时间。计算当前时间与起始时间的时间差。根据时间差更新计时器的显示。

以下是修改后的JavaScript代码:

var hr = 0;var min = 0;var sec = 0;var count = 0;var Startbutton = document.getElementById("Start");var timer = false;var start_time;function start() {  Startbutton.disabled = true;  timer = true;  start_time = (new Date()).getTime(); // 记录起始时间  stopwatch();}function stop() {  timer = false;  start_time = null;  Startbutton.disabled = false;}function reset() {  timer = false;  start_time = null;  Startbutton.disabled = false;  min = 0;  hr = 0;  sec = 0;  count = 0;  document.getElementById("hr").innerHTML = "00";  document.getElementById("min").innerHTML = "00";  document.getElementById("sec").innerHTML = "00";  document.getElementById("count").innerHTML = "00";}function stopwatch() {  var now = (new Date()).getTime(); // 获取当前时间  var diff = now - start_time; // 计算时间差  if (timer) {    var str_time = (new Date(diff).toISOString().slice(11, 23)); // 将时间差转换为HH:MM:SS.MS格式    var hrString = "" + str_time.substring(0, 2);    var minString = "" + str_time.substring(3, 5);    var secString = "" + str_time.substring(6, 8);    var countString = "" + str_time.substring(9, 11);    document.getElementById("hr").innerHTML = hrString;    document.getElementById("min").innerHTML = minString;    document.getElementById("sec").innerHTML = secString;    document.getElementById("count").innerHTML = countString;    requestAnimationFrame(stopwatch); // 使用requestAnimationFrame  }}

代码解释:

start_time: 在start()函数中,我们使用 (new Date()).getTime() 获取当前时间戳,并将其存储在 start_time 变量中。now = (new Date()).getTime(): 在 stopwatch() 函数中,我们使用 (new Date()).getTime() 获取当前时间戳。diff = now – start_time: 计算当前时间与起始时间的时间差。new Date(diff).toISOString().slice(11, 23): 将时间差转换为 HH:MM:SS.MS 格式的字符串。toISOString() 方法返回UTC格式的日期字符串,我们使用 slice(11, 23) 截取时间部分。requestAnimationFrame(stopwatch): 使用 requestAnimationFrame 函数来安排下一次 stopwatch() 函数的执行。requestAnimationFrame 的优点在于它会根据浏览器的刷新率进行优化,从而提供更平滑的动画效果,并且避免不必要的CPU占用。

HTML代码(保持不变):

                Stopwatch        
00 Hr 00 Min 00 Sec 00

总结

通过使用系统时间计算时间差,并结合requestAnimationFrame函数,我们可以创建一个更精确、更稳定的JavaScript计时器。这种方法避免了setTimeout的局限性,确保计时器能够准确地反映经过的时间。在实际应用中,可以根据需要调整代码,例如,可以添加暂停功能,或者将计时器显示为不同的格式。

以上就是解决JavaScript计时器变慢的问题的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/582404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 11:30:07
下一篇 2025年11月10日 11:31:35

相关推荐

  • 从零开始了解币安币:交易所代币到底值不值得买?

    币安币(BNB)作为全球知名加密货币交易平台币安发行的原生代币,受到了广泛关注。对于刚接触加密货币的朋友来说,可能会好奇BNB究竟是什么,它有哪些用途,以及最关键的是,作为一种资产,它是否具有投资价值?本文将从零开始,系统地介绍BNB的基本概念、其在币安生态系统中的作用,并分析影响其价值的关键因素,…

    2025年12月8日
    000
  • 波卡币(DOT)是什么 跨链技术为何备受关注?

    区块链技术的快速发展带来了多样化的网络,但这些网络通常相互独立,形成了数据和价值的孤岛。为了解决这一问题,**跨链技术**应运而生,而波卡(Polkadot)正是这一领域的代表性项目之一。本文将深入探讨波卡币(DOT)的本质及其背后的波卡网络,并阐述跨链技术为何在全球范围内受到高度关注。我们将解释这…

    2025年12月8日
    000
  • ​最新虚拟货币交易入口地址

    最新虚拟货币交易入口地址 1. Binance binance(币安)继续以其庞大的生态系统和无可匹敌的交易深度,稳坐全球最大虚拟货币交易平台的宝座。其现货和衍生品市场的交易量长期占据行业领先地位,为用户提供了极佳的流动性,这意味着交易者可以以更小的滑点完成大额订单。binance的成功很大程度上归…

    2025年12月8日 好文分享
    000
  • Ruvi AI:雪崩的明矾有望获得13,500%的ROI?

    ruvi ai通过融合区块链与人工智能技术,打造出具备实用价值的模型,展现出清晰的增长路径与巨大的投资回报潜力,甚至可与avalanche早期的成功相媲美。 Ruvi AI:挑战 Avalanche 的新星,或带来13,500%的投资回报? Avalanche 已成为加密圈热议的话题,而如今,Ruv…

    2025年12月8日
    000
  • Alchemy Pay的全球推动:整合羊群和重新定义可访问性

    alchemy pay正通过与flock.io等战略伙伴的合作掀起波澜,进一步拓展其在ai、web3游戏以及全球金融领域的影响力。探索他们如何突破界限。 Alchemy Pay的全球扩展:联合Flock.io并重塑可访问性 Alchemy Pay致力于让数字资产和全球金融服务更易获取,而他们近期携手…

    2025年12月8日
    000
  • Ruvi Ai vs. Tron:达到1美元及以后的比赛

    ruvi ai能否超越tron?揭秘推动ruvi ai迈向1美元的关键动力,包括其实用性、结构化增长路径以及投资者信心。 Ruvi AI vs. Tron:向1美元进发的角逐 在加密货币不断演变的世界中,新兴项目层出不穷。Ruvi AI(Ruvi)正迅速赢得市场关注,有分析认为其有望超越Tron并实…

    2025年12月8日
    000
  • CESS,TGE和分散的AI:数据主权的新时代

    探索cess的代币生成事件(tge)及其在构建去中心化ai、数据主权与web3基础设施未来中的关键角色。 CESS、TGE与去中心化AI:开启数据自主权的新纪元 去中心化AI与区块链技术的融合正在快速重塑数字世界格局。CESS正逐步成为这一领域的核心力量,连接AI与Web3生态。随着近期代币生成事件…

    2025年12月8日
    100
  • 加密价格预测:解码PI网络和块3嗡嗡声

    通过挖掘pi network的潜力、block3在ai游戏领域的雄心以及关键市场趋势,帮助您在加密货币波动中找到方向。 加密价格预测:揭开PI网络与块3的热议话题 加密市场如同过山车般起伏不定,预测价格波动就像踏上一场未知的冒险。目前,Pi Network和Block3两个项目正引发广泛关注,它们各…

    2025年12月8日
    000
  • 比特币采矿:将数字梦想变成每日美元

    揭示比特币挖矿,特别是通过云平台如何成为颠覆加密货币格局的潜在力量。深入探索! 比特币的热潮再次回归,而这一次,它不仅仅是盲目持有和祈祷。精明的投资者正将目光投向比特币挖矿,令人意外的是,云挖矿平台正在引领这股浪潮,为那些渴望涉足加密世界的人提供了一条便捷通道。 从持有到行动:为何选择比特币挖矿? …

    2025年12月8日
    000
  • Tron vs. Ruvi AI:AI代币可以超过加密退伍军人吗? 50%上升!

    tron在加密货币领域的领先地位正遭遇来自ruvi ai等新兴ai代币的挑战,其中ruvi ai已实现50%的涨幅,正在引发投资者关注。这是否预示着加密投资的新方向? Tron作为加密圈耳熟能详的名字,如今面临AI代币日益激烈的竞争。Ruvi AI(RUVI)近期表现亮眼,价格飙升50%,吸引了大量…

    2025年12月8日
    000
  • Sahara AI,Bitunix和技术巨头:导航分散的AI革命

    探索撒哈拉ai的崛起,其比特尼克斯上市以及对分散的ai格局中科技巨头的挑战。揭示关键见解与价格预测。 Sahara AI、Bitunix与科技巨头:驾驭去中心化的AI浪潮 人工智能领域正以前所未有的速度演进,而撒哈拉AI已成为其中的重要力量。随着其代币在Bitunix平台的成功上线,以及获得主要风投…

    2025年12月8日
    000
  • Aptos Dex火箭:每日音量命中记录高点!

    aptos dexs正迎来爆发式增长!我们深入探讨了创纪录的每日交易量、网络持续上升的tvl,以及推动这股热潮的背后原因。此外,aave也即将登陆aptos! Aptos Dex火箭:每日交易量创下历史新高! Aptos上的去中心化交易所正在火热进行中!基于APTOS的交易平台刚刚迎来了历史性一刻,…

    2025年12月8日
    000
  • 加密模因硬币预售:Troller Cat在2025年领先

    深入探索meme币热潮,聚焦加密预售。了解troller cat等项目如何撼动市场格局,带来前所未有的投资机遇。 模因币已不再只是网络文化产物。它们正在重塑加密货币的成功标准。进入2025年,新一轮模因币借由预售机制强势登场,Troller Cat正是其中的佼佼者。 拖钓猫:搅局市场的模因新秀 尽管…

    2025年12月8日
    000
  • Solana,经审核的令牌和早期投资者:发现下一个大事

    探索solana,审计代币的交汇点以及在不断变化的加密领域中早期投资者的机遇。 Solana、审计代币与早期投资者:寻找下一个大机遇 在快速发展的加密货币世界中,识别真正具备潜力的项目至关重要。让我们深入探讨Solana生态、经过审计的代币,以及它们为早期投资者带来的潜在机会。 Solana生态系统…

    2025年12月8日
    000
  • Ozark AI和加密货币:$ oz在2026年会占主导地位吗?

    ozark ai($oz)是否有望在2026年超越dogecoin和pepe等模因币?通过结合depin技术和ai驱动的分析,它是否能实现这一目标?我们来深入探讨其潜力。 Ozark AI与加密市场:$oz会在2026年成为主导者吗? Ozark AI($oz)正在掀起一股新潮流,将人工智能与区块链…

    2025年12月8日
    000
  • 在美国制造的硬币Q3前景:图表,趋势和潜在价值

    通过我们的第三季度分析,探索“美国制造加密货币”的奇妙世界。揭示关键趋势、潜在价值以及哪些代币正在掀起波澜! 美国制造加密货币Q3展望:图表、趋势与价值潜力 嘿,加密爱好者们。“美国制造”加密项目的热度正持续上升。第三季度的走势充满看点,现在我们一起来看看相关图表、趋势和潜在投资机会。 “美国制造”…

    2025年12月8日
    000
  • AI,链条和比特币价格:在2025年解码加密货币的未来

    探索ai对chainlink(link)的预测,随着比特币价格逼近$200k,以及2025年区块链数据与新兴加密货币机会的展望。 加密市场因AI预测、Chainlink角色演变以及比特币可能飙升而持续热议。让我们深入探讨2025年加密货币的未来趋势。 Chainlink(LINK)价格预测:若比特币…

    2025年12月8日
    000
  • PI Network的PI2DAY:投资者期待和AI嗡嗡声

    pi network的pi2day在潜在ai整合和交易所上市传闻中点燃了投资者期待,但即将到来的代币解锁令市场忐忑。炒作能否真正转化为实际价值? PI Network年度PI2DAY:投资者翘首以盼,AI话题热度飙升 随着6月28日年度PI2DAY活动临近,PI Network再次成为投资者关注焦点…

    2025年12月8日
    000
  • Altcoin季节即将到来?分析师Eyes AI Altcoins用于爆炸性增长

    altcoin季节是否即将到来?随着市场情绪的变化,分析师正在关注以ai为核心的高级山寨币,如griffain、tars和rndr,它们可能迎来潜在的爆发。 整个加密领域正弥漫着一股期待的情绪:Altcoin季节是否会迅速升温?分析师们指出了一些特定的趋势,尤其是围绕人工智能驱动的山寨币,它们有望引…

    2025年12月8日
    000
  • Oppenheimer和Coinbase:在加密波动中的看涨目标目标

    oppenheimer最近上调了对coinbase的目标价格,释放出强烈的积极信号。然而,这一举动与整体分析师的观点存在哪些冲突? 加密货币市场从不停歇,分析师们也一直在努力解读其走势。让我们深入探讨Oppenheimer对Coinbase(COIN)的最新动向以及它对投资者意味着什么。 Oppen…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信