Node.js 中的时间单调递增

2024-06-24

这个问题已经为浏览器解答了here https://stackoverflow.com/questions/7272395/monotonically-increasing-time-in-javascript, but window.performance.now()显然在 Node.js 中不可用。

一些应用程序需要稳定的时钟,即随时间单调增加的时钟,不受系统时钟漂移的影响。例如,Java 有System.nanoTime() https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#nanoTime--而 C++ 有std::chrono::steady_clock http://en.cppreference.com/w/cpp/chrono/steady_clock。 Node.js 中可以使用这样的时钟吗?


结果 Node.js 中的等价物是process.hrtime() https://nodejs.org/api/process.html#processhrtimebigint。根据文档:

[从 process.hrtime() 返回的时间]相对于过去的任意时间,与一天中的时间无关,因此不受时钟漂移的影响。


Example

假设我们想要每秒定期调用某个 REST 端点,处理其结果并将某些内容打印到日志文件中。考虑端点可能需要一段时间才能响应,例如从数百毫秒到超过一秒。我们不想同时发生两个请求,所以setInterval()并不能完全满足我们的需求。

一个好的方法是第一次调用我们的函数,执行请求,处理它,然后调用setTimeout()并重新安排另一次运行。但考虑到我们提出请求所花费的时间,我们希望每秒执行一次。这是使用我们的稳定时钟来做到这一点的一种方法(这将保证我们不会被系统时钟漂移所愚弄):

function time() {
    const nanos = process.hrtime.bigint();
    return Number(nanos / 1_000_000n);
}

async function run() {
    const startTime = time();

    const response = await doRequest();
    await processResponse(response);

    const endTime = time();
    // wait just the right amount of time so we run once second; 
    // if we took more than one second, run again immediately
    const nextRunInMillis = Math.max(0, 1000 - (endTime - startTime));
    setTimeout(run, nextRunInMillis);
}

run();

我做了这个辅助函数time()它转换返回的值process.hrtime.bigint()毫秒分辨率的时间戳;对于这个应用程序来说,分辨率足够了。

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

Node.js 中的时间单调递增 的相关文章

  • 使用 IE 11 和 AngularJS 的 2 路数据绑定问题

    我最近在使用 AngularJS 的 Web 应用程序上构建了一个功能 但在 IE 11 上遇到了一些问题 apply 将数据更改写入 DOM 由于某种原因 这种情况仅有时发生 而当我尝试调试问题时却从未发生 这使得它看起来像是一个计时问题
  • 在 TFS 上构建想要从 Node.js 测试项目复制可执行文件

    我使用 Node js 工具为量角器测试环境创建了一个 Node js 项目 以在 Team Foundation 服务器上测试 Web 应用程序 我可以在本地创建测试项目并使用调试器运行它 但是 TFS 上的构建不起作用 Log
  • Webpack、Sass - 超出最大调用堆栈大小

    我正在为我的 JS 应用程序使用 Webpack 对于样式 我使用 Sass 我的应用程序非常大 所以我使用了很多 mixins 和 includes 在过去的几天里 虽然应用程序的 SASS 数据增长了一些 我多次遇到相同的以下错误 未捕
  • 获取访客的 Optimizely A/B 测试和变化

    当我在网站上运行实验时 我希望能够找出当前访问者看到的测试和变体 我无法找到如何做到这一点优化Javascript API https www optimizely com docs api 您可以获得第一个正在运行的实验的 ID 假设您有
  • $(document).ready 回调何时执行?

    假设我们附加一个 click http api jquery com click 锚点的处理程序 a 中的标签 document ready http api jquery com ready 打回来 该处理程序将取消默认操作 遵循href
  • 如何使用React Native在屏幕上绘图?

    我正在尝试在 React Native 中实现一个 Android 绘图应用程序 我正在使用 PanResponder 但我不知道如何获取用户触摸的部分的坐标 我尝试过使用react native svg但我不知道该放在哪里PanRespo
  • html/js 中从右到左和/或从上到下的文本?

    如何在浏览器中为用户输入创建从右到左和从上到下的文本字段 有没有本地方法可以做到这一点 或者也许有解决方法 从上到下可能像日语或象形文字 对于 RTL 文本字段 您可以使用 HTMLdir属性 如 ime Vidas 已经提到的 或 wit
  • 提交外部有 INPUT 的表单,并修改值后

    我有一个form 有几个
  • 从数组中删除空字符串,同时保持记录而不循环?

    这个问题在这里被问到 从数组中删除空字符串 同时保留非空字符串的索引记录 https stackoverflow com questions 18113243 remove empty strings from array while ke
  • Lighthouse 多个 URL

    我需要对一个网站进行全面审核 但我想知道是否有任何方法可以让 Lighthouse 做到这一点 我知道他们不支持完整的站点审核或多个 URL 但我发现可以使用 bash 脚本来完成 因此 我将不胜感激对此案的任何帮助 或者您可能会推荐任何灯
  • express 和 socket.io - 声明和启动服务器

    我一直不明白下面的代码是如何等效的 Code 1 var app require express var server require http Server app var io require socket io listen serv
  • 如何使用javascript将数据存储在xml文件中?

    我是 javascript 新手 并在我的项目中使用它 因为我需要读取 xml 文件 然后在操作后我想将更新后的值存储回 xml 文件中 我成功从 xml 文件获取值 但无法存储值返回到 xml 文件 这是我尝试过的代码
  • HTML 画布从 getImageData 返回“偏离一些”字节

    我找到getImageDataHTML 画布似乎返回不正确的字节值 我使用以下 Python 代码生成了 1x1 px 图像 from PIL import Image import numpy as np a np array 12 18
  • 如何从 Instagram 的 media_preview 原始数据重新创建预览?

    如果您从 Instagram 的 API 获取 JSON 数据 您会发现media previewkey 其值是一些 Base64 编码的数据 它看起来确实像一些非常小的预览二进制数据 也许是压缩的 Take 这个帖子 https www
  • 如何阻止我的 App Engine 应用程序的“appspot.com”?

    我添加了一个自定义域 并将其添加到 App Engine 例如 假设我的自定义域是 example com 我的应用程序由 Node js 提供服务 当我通过 App Engine 部署我的应用程序时 它会向我提供以下地址来访问它 exam
  • 将json数据从servlet传递到jsp到js文件

    我得到了这个创建 JSON 数据的 servlet 我想将此数据传递到一个 jsp 页面 该页面应该通过 InfoVis 工具包显示数据 servlet java JSONObject json new JSONObject JSONArr
  • 如何拦截javascript中innerHTML的变化?

    我需要拦截网页内单元格内容的任何更改 以下代码显示 addEventListener 不起作用 function modifyText alert var el document getElementById mycell el inner
  • NodeJS 生成用于签名和验证消息的有效 PEM 密钥

    Context 来自关于 Node v10 9 0 的 TLS SSL 的 NodeJS 文档 2018 年 8 月 https nodejs org api tls html tls tls ssl concepts https node
  • 如何从索引文件迭代多个导入的模块

    我有一个名为Polygons我在那里创建了一个index jsfile 以导出目录中的所有文件 它看起来像这样 export default as europe from europe export default as northAmer
  • 如何将国家/地区代码与电话号码分开?

    我的数据库中有很多电话号码 例如 1 123 456 7890 我要做的是将国家 地区拨号代码 在本例中为美国 加拿大的 1 与电话号码分开 我尝试创建所有国家 地区的 JSON 列表 并在加载页面时将电话号码和国家 地区代码分开 它工作正

随机推荐

  • 如何处理 Android MediaCodec 解码器的第一个输出 ByteBuffer?

    我正在尝试使用 Android 的 MediaCodec 套件编写音频重采样器 我目前正在将 MP3 立体声音频文件输入 MediaExtractor 然后由 MediaCodec 进行解码 源音频的采样率为48000 我不明白的是我从解码
  • Python 的“with”是一元吗?

    像我之前的许多鲁莽的先驱者一样 我正在努力穿越理解单子这片无路可走的荒原 我仍然在蹒跚学步 但我不禁注意到 Python 的某种类似 monad 的品质with陈述 考虑这个片段 with open input filename r as
  • 使用 RavenDB 和 LINQ 查找至少包含子集中一个元素的对象

    我有简单类型Question public class Question public Question string id Id id Tags new List
  • 在java中使用NuSMV作为模型检查器

    我正在尝试使用 NuSMV 作为 java 中的模型检查器 但是 我无法在网上找到相关的 JAR 库 我找到的唯一一个是在here http haschemi blogspot com 2011 03 access nusmv from j
  • Android 如何在启动时启动 Activity

    让我描述一下我想要的东西 我想构建一个 主应用程序 并将其设置为当手机开机时 它立即进入主应用程序 用户永远无法退出此应用程序 这将用于家长控制之类的用途 并且他只能从其中启动其他应用程序 基本上它就像一个 自定义桌面 我必须强调 重要的是
  • SMTP 点填充..何时何地进行?

    我在传输电子邮件时发现了有关点填充的相互矛盾的信息 如果该行包含单个点 则填充一个点 以避免过早终止 在每行中填充一个点 统计数据以点开头 仅将点填充到 1 以及引用可打印消息部分的每一行部分 谁能澄清一下吗 根据 SMTP 标准 RFC
  • 完全限定名称、带导入声明的非限定名称解析不同

    这有效 open System let f Action fun gt Unchecked defaultof lt gt But this let f System Action fun gt Unchecked defaultof lt
  • JSON 到 JavaScript 数组

    我在 JavaScript 中处理 JSON 数据时遇到问题 特别是在将数据用作数组以及访问和迭代各个值方面 JSON 文件的结构如下 head vars place lat long page results bindings place
  • 更新语句错误:子查询返回超过 1 个值

    我正在尝试更新列中的所有记录 以便它们以 CD 开头 例如DCE206 将成为 CDE206 UPDATE table SET column REPLACE column1 DC CD WHERE column1 LIKE DC 我正在使用
  • CSS 中水平 div 之间的自动间距

    我进行了很多搜索 但我并不幸运地找到了我所追求的解决方案 问题是 我创建了一个主 div 宽度 100 其中有几个内部 div 你可以在这里看到它 http jsfiddle net EAkLb 1 http jsfiddle net EA
  • 为什么 JQuery 不公开其 UUID 功能?

    在底层 JQuery 使用 UUID 映射 只是一个计数器 它维护为jQuery uuid 来解决当您从 Javascript 将属性附加到 DOM 中的标记时浏览器存在的众所周知的内存泄漏问题 JQuery 使用以下方法来代替这样做 da
  • 我如何淡入/淡出 TImage?

    我有一个简单的TForm命名为Form1 Image1 是一个TImage加载了一个 PNGImage 和一个 Button1TButton测试事物 成功实现了对图像1的Alpha Blend的方法 代码如下 procedure SetPN
  • 在 php 中验证 XMLHttpRequest

    我使用以下代码将数据发送到 PHP 站点 if window XMLHttpRequest code for IE7 Firefox Chrome Opera Safari xmlhttp new XMLHttpRequest else c
  • 从 TypeInfo 对象获取类型的完全限定名称

    是否有可能以某种方式获取包含在类型中的类型的完全限定名称TypeInfo object 在调试器中 许多这些值很好地显示为System Int32但是当它打印出来时 没有一个包含这个完全限定的名称 我需要这个作为参数Type GetType
  • StartCoroutine 被调用多次 (C# Unity)

    我正在 Unity 中创建一个弹出菜单选项 现在我的问题是我在 void update 中创建的协程被调用了很多次 我的意思是在我的 Unity 控制台上 Debug Logs 正在递增 它不应该正确 因为它已经是协程了 有人可以帮助我了解
  • 在一次操作中更改多个按钮的文本

    我有一个由许多按钮 50 组成的表单 除了后缀号之外 它们都具有相同的名称 btn 0 btn 1 btn 3 etc 我想通过一次操作更改这些按钮的文本 有没有办法像数组一样处理按钮 btn i Text something 也许执行一个
  • iPhone/iPad 应用程序代码混淆 - 有可能吗?值得? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经研究了很多 无论是在 SO 上 还是到处谷歌搜索 但我似乎找不到关于用 Objective C 编写的 iPhone iPad
  • 免费在线网络开发工具列表[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 What free onlineWeb 开发人员有哪些可用且 应该了解 的工具 为了设定列表的精神 这里有一些例子 谷歌代码游乐场 htt
  • 开头和结尾的画廊空间

    我遇到了以下问题 我制作了一个带有画廊的表单 该画廊不包含图像 而是包含我的一个班级中的项目 图库中每个项目内的所有内容都完美显示 我使用以下方法删除了图像之间的空间
  • Node.js 中的时间单调递增

    这个问题已经为浏览器解答了here https stackoverflow com questions 7272395 monotonically increasing time in javascript but window perfo