console.log / warn / error - нативный, ванильный JavaScript более производительная альтернатива? - PullRequest
0 голосов
/ 05 февраля 2019

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

Console.log () - невероятно полезный инструмент, однако я невероятно опасаюсь его вообще низкой производительности (https://jsperf.com/console-log1337/16 или https://jsperf.com/console-log1337/33 (базовый пример), а также плохая репутация.

Если мне нужно оставить сообщения об ошибках в стиле console.log () в производственном приложении / веб-сайте, есть либолее производительная альтернатива, которая является родной для vanilla JS (без фреймворков / библиотек)?

Моя первоначальная мысль заключалась в том, чтобы вместо этого поместить все элементы журнала в массив, который впоследствии можно было бы собрать (если требуется), однако кажется, чтоне очень хорошо работает с Promise.all () - вместо того, чтобы, скажем, 10 элементов в массиве, я вместо этого получаю либо один массив с последним значением, либо 10 отдельных массивов.

Isесть нативная или наиболее рекомендуемая альтернатива (оцените, что это открыто для «мнения» - я не уверен, как еще это выразить!)?

Ps - извинения за отсутствие форматирования ... mobilе!

1 Ответ

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

... низкая производительность

Один из тестовых случаев сравнивает вызов пустой функции с вызовом console.log.Пустая функция, вероятно, будет встроена компилятором JIT, так что вы фактически сравниваете без кода с console.log.Конечно, никакого кода вообще намного быстрее.

Я никогда не испытывал (заметного) запаздывания из-за ведения журнала, за исключением того, что вы регистрируетесь внутри цикла рендеринга или чего-либо, выполняемого очень, очень часто.

... плохая репутация

Серьезно?На мой взгляд, у JS есть отличные способы отладки по сравнению с другими языками (возможно, потому что JS получил самые хорошие ошибки :)), поскольку вы можете просматривать вложенные структуры «вживую», вы можете остановить выполнение в точках останова, вы можете подготовить код для отладки с помощью debugger; заявление, вы можете сбросить всю память, визуализировать поведение GC, горячие функции и многое другое.Да, все эти функции снижают производительность, однако консоль работает достаточно хорошо.

Есть ли более производительная альтернатива, которая присуща vanilla JS (без фреймворков / библиотек)?

Ведение журнала напрямую записывается в движок, выполняющий JavaScript, это означает, что он может получить доступ ко многим вещам, к которым вы не можете получить доступ через JS, также нативный код всегда будет быстрее, чем скомпилированный JavaScript (или такой же быстрый, но никто не может гарантировать, что).

В случае необходимости оставлять сообщения об ошибках в стиле console.log () в производственном приложении / на веб-сайте ...

И кто должен читать эти журналы?Вы хотите попросить своего клиента заглянуть в консоль в случае ошибки?

Вход в систему Production не должен регистрировать все, что вы используете с помощью отладки, но достаточно для того, чтобы вы могли отследить ошибки, поэтому некоторые крошкичтобы выяснить, где произошла ошибка (например, «открыто меню»), и сами ошибки.

Если вы не хотите самостоятельно писать производственные журналы, посмотрите sentry для JS

...