为什么(new Date()).toString()在Node.js中这么慢?

时间:2019-02-04 19:24:36

标签: node.js date tostring

我在玩Node.js。我刚刚开始写一些新东西,让我感到困惑的是,我简单的“控制台”应用程序需要很长时间才能做出响应。这个应用程序加载了一个5MB的json文件,将其变成一个对象,但是所有这些都不需要花费大量的时间。我的进一步搜索(使用非常简短的代码)使我得出以下结论:

this.generated_on = ( new Date() ).toString();

大约需要2.5秒才能执行。进一步的调查使我了解得更少。我已将其修改为:

this.generated_on = new Date();
this.generated_on = this.generated_on.toString();

(介于console.timeLogs之间)并与toString()对齐的行花费了2秒钟以上的时间。然后,我再次修改了代码:

this.generated_on = new Date('2019-02-04 20:00:00');
this.generated_on = this.generated_on.toString();

和结果相反。 toString()仅花费2毫秒,而创建Date对象则花费了2秒钟。

为什么这么慢?为什么会有如此不同的结果?有没有更快的方法来获取格式化的当前时间字符串? (我不太在乎这个项目的执行时间,因为它可以脱机工作,但仍然困扰着我)。

2 个答案:

答案 0 :(得分:0)

我认为您的开发环境已关闭。我不能告诉你为什么你的机器运行缓慢的代码。我无法复制您说的问题。

我试图对上面的代码进行基准测试。

https://repl.it/@act/HotpinkFearfulActiveserverpages

转到此处,尝试单击顶部的“运行”按钮。

这是我看到的结果

// Case Togehter: 
// this.generated_on = ( new Date() ).toString();
// Case Separately:
// this.generated_on = new Date();
// this.generated_on = this.generated_on.toString();

Together x 332,222 ops/sec ±7.75% (44 runs sampled)
Separtely x 313,162 ops/sec ±8.48% (43 runs sampled)

332,222 ops / sec意味着操作平均花费了1 / 332,222秒。

答案 1 :(得分:0)

我建议您使用node.js内置模块“ Performance hooks”。

您可以在此处找到文档:https://nodejs.org/dist/latest-v11.x/docs/api/perf_hooks.html#perf_hooks_performance_mark_name

从上至下标记每个进程,然后打印指标(以毫秒为单位),您将找出实际的问题