Почему (new Date ()) .toString () так медленно работает в Node.js? - PullRequest
0 голосов
/ 04 февраля 2019

Я немного играю с Node.js.Я только начал писать что-то новое, и меня поразило, что мое простое «консольное» приложение требует довольно много времени для ответа.Это приложение загружает 5-мегабайтный 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 голосов
/ 05 февраля 2019

Я предлагаю вам использовать встроенный модуль node.js 'Performance hooks'.

Вы можете найти документацию здесь: https://nodejs.org/dist/latest-v11.x/docs/api/perf_hooks.html#perf_hooks_performance_mark_name

Пометить каждый процесс сверху вниз, а затем распечататьметрики (в миллисекундах), вы выясните актуальную проблему

0 голосов
/ 04 февраля 2019

Я думаю, что ваша среда разработки выключена или что-то в этом роде.Я не могу сказать вам, почему ваша машина медленно выполняет код.Я не могу воспроизвести проблему, о которой вы говорили.

Я попытался сравнить исходный код с кодом выше.

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

Перейдите сюда и попробуйте нажать кнопку «Выполнить» наtop.

Вот результат, который я вижу

// 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 операций в секунду означает, что операция в среднем занимает 1/332 222 секунды.

...