-
Notifications
You must be signed in to change notification settings - Fork 27.4k
docs(guide/Running in Production): ng-strict-di #9908
Conversation
Adding note about Strict DI mode.
|
||
Using strict di mode in your production application will throw errors when a injectable | ||
function is not | ||
[annotated implicitly](https://docs.angularjs.org/guide/di#dependency-annotation#implicit-annotation). |
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.
Can you use the {@link }
helper?
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.
For sure, I'll look at how to do that. Thanks!
This will force you to make sure that your injectable functions are implicitely annotated | ||
which will improve angular's performance when injecting dependencies in your injectable | ||
functions because it doesn't have to dynamically discover a function's dependencies. | ||
It is recommended to automate the implicite annotation via a tool like |
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.
Typo: implicit
I'm sorry, but I wasn't able to verify your Contributor License Agreement (CLA) signature. CLA signature is required for any code contributions to AngularJS. Please sign our CLA and ensure that the CLA signature email address and the email address in this PR's commits match. If you signed the CLA as a corporation, please let us know the company's name. Thanks a bunch! PS: If you signed the CLA in the past then most likely the email addresses don't match. Please sign the CLA again or update the email address in the commit of this PR. |
I think this is how it works :-/ Not sure how to test it though...
Using strict di mode in your production application will throw errors when a injectable | ||
function is not | ||
{@link di#implicit-annotation annotated implicitly}. | ||
This will force you to make sure that your injectable functions are implicitely annotated |
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.
Typo: implicitly
Using @link helper and typeo fix.
Thanks @gkalpak. Hopefully we're good now! |
This will force you to make sure that your injectable functions are implicitly annotated | ||
which will improve angular's performance when injecting dependencies in your injectable | ||
functions because it doesn't have to dynamically discover a function's dependencies. | ||
It is recommended to automate the implicit annotation via a tool like |
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.
this isn't necessarily something we'd recommend, because these tools just don't do a very good job.
Also, I'd be questionable about the "performance benefit", we've never measured a performance benefit and that was never the intent of strict-DI --- it's really a debugging tool, that's about it. The main benefit of using it in production is so that you can be sure your minified scripts won't be broken terribly.
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.
I've built countless apps in angular using ng-annotate. When you say they don't do a very good job, I'm a little lost... It works really well... Especially since the alternative is to either explicitly annotate yourself (just realized I was using the opposite word for what I meant, this should say "automate the explicit annotation" I'll fix that...) or go with implicit annotation which is less performant and not minification safe.
Also, strict-di mode is more than a debugging tool. It encourages (enforces) explicit annotation which does have pretty significant performance gains over implicit (see jsperf) so I think it's good to encourage the use of it in production.
I'm going to make some wording corrections, but I definitely feel like this is something that we should be recommending for use in production...
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.
The reason why they don't work very well, is that they only are able to figure out certain cases where it's clear that stuff can be annotated correctly. They work considerably less well for other constructs people like to use.
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.
Indeed, and I use such constructs in many cases. But it's very easy to work around. Much easier than managing the annotations myself. Plus, on the di guide we're already recommending using ng-annotate..........
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.
alright alright, but you should at least make a reference to the real reasons why we added strictDI --- it's there to help you make sure that your code will work when minified
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.
Note added.
Implicit annotation was the opposite of what we're going for here (explicit)
Adding note about the purpose of strict di mode.
alright, works for me |
Adding note about Strict DI mode.