创建大量日期对象不好吗?有没有更高效的方法来做到这一点?

问题描述 投票:0回答:1

我在共享实用程序类之一中有一个方法。它只是在调用时记录一个事件:

public static newEvent(message: string): void {
    const t_option = {
        hour: '2-digit',
        minute: '2-digit',
        fractionalSecondDigits: '3',
        hour12: false,
    } as Intl.DateTimeFormatOptions;

    const now = new Date().toLocaleTimeString([], t_option);        
    const formattedMessage = `[${now}] ${message}`;
    
    this.eventService.publish(formattedMessage);
    console.log(formattedMessage);
}

这种类型的日志类似于控制台(并保存在其他地方的文件日志中):

[15:01:13.929] initialising...
[15:01:50.588] connecting to websockets...
[15:02:06.384] websockets connected (3)
[15:04:02.992] fetching weather data...

角度应用程序中的几乎所有服务和组件都调用此日志方法。有很多电话。繁忙的一天大约每秒 10-12 次。 我的问题是我正在为每条记录的消息创建一个

new Date()
。我希望时间戳采用人类可读的格式,但我想知道创建新的日期对象是否是最好的方法?

如果我在方法之外创建一个静态日期,则时间戳不是实时的,就像这样,每次日期/时间都将与创建时相同。如果使用

Date.now()
代替,我会得到 unix 时间戳,但是,它不是人类可读的。

所以我想我的问题是,有没有更好的方法可以在不创建大量新对象的情况下完成我想要的事情?还是这件事足够微不足道,我不必担心?

javascript
1个回答
1
投票

嗯,

new Date()
Date.now()
稍慢,至少根据我在这个基准测试网站上的测试。因此,每秒有数十次调用,这可能会成为一个问题。
当您添加
.toLocaleTimeString()
时,速度尤其慢,如 here 所示,甚至 添加选项时最差

但实际上,在没有测试的情况下,很难说它是否会产生可衡量的影响。

为了获得最佳性能,我建议在软件运行时在日志中打印 Unix 时间戳,然后使用日志阅读器将其解析为可读日期

© www.soinside.com 2019 - 2024. All rights reserved.