-
Notifications
You must be signed in to change notification settings - Fork 7
Next level! #25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Next level! #25
Conversation
|
Упс... fatal: unable to connect to github.com. |
lib/terror.js
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я правильно понимаю, что единственный смысл этого — иметь именованный конструктор от name?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Функционально - да.
Так же есть небольшой профит в производительности, поскольку нет необходимости рекурсивно вызывать все конструкторы в цепочке наследования. Сейчас вызывается только текущий конструктор и Terror. Этого можно было бы добиться и с замыканием, но я их не люблю.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Так же есть небольшой профит в производительности, поскольку нет необходимости рекурсивно вызывать все конструкторы в цепочке наследования
Ты правда смог это воспроизвести на benchmark'ах? Или это видно по IR? Я конечно не копался очень детально, но разницы вообще никакой не увидел
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это очевидно, поскольку конструкторы неинлайновые и будут вызываться всегда. Профит стремится к нулю, зато префекционизм не страдает.
|
@B-Vladi squash commits, pls. I'll merge PR into temporary |
ed3f4db to
d3ada9c
Compare
|
Done |
|
@an9eldust as I can remember, you was interested in Terror implementation for client-side. This PR provides some support, except IE. Are you still interested in it? |
|
Fixes for old IE |
|
merged manually into branch v1.2 |
Предпосылки для изменений:
Changelog:
Terrorтеперь может принимать вторым аргументом объектerror.originalError. Существуют сторонние обертки над ошибками, использующие значение из этого свойства. Если в нем содержится что-то отличное отerror, возникало исключение при работе сterror.originalError.stack.Terror#messageсодержит только оригинальное сообщение текущего объекта.Terror.stackTraceLimitпозволяет ограничивать глубину формируемого стека ошибки (если поддерживается интерпретатором). Может быть переопределено для любого конструктора, наследуемого отTerror. С помощью данного свойства можно сильно снизить нагрузку на процессор, если устанавить его значение в 0 на высоких уровнях приложения.Terror.isTerrorтеперь не падает, если передатьnullилиundefined.Terror#logтеперь логирует стеки всех обернутых ошибок.Terror#getFullMessageвозвращает полное сообщение об ошибке, включая сообщения обернутых экземпляров. Сообщение каждого объекта ошибки воспринимается как предложение. Формат возвращаемого значения:ERR_CODE Can not create page. Can not instance widget. a is no a function.Terror#getFullStackвозвращает стеки всех обернутых экземпляров. Каждый последующий стек отбивается четыремя пробелами слева (стандартный отступ стека). К каждому сообщению об ошибке добавляется код.Terror#setMessageтеперь не меняет сообщение в сформированном стеке.MyError.name).cd benchmark; npm test.Terrorтеперь не зависит от NodeJS и может выполняться в любом окружении (Issuse #1).Что нужно сделать:
Terror#getFullStack, так как он сейчас жестко зашит в метод. Я бы оставил и так, ничего криминального в этом нет.Terror#logMultilineErrorтоже этим грешит.README.mdи JSDoc. Мой английский не позволяет это сделать грамотно.