-
Notifications
You must be signed in to change notification settings - Fork 27.4k
docs(guide/Running in Production): ng-strict-di #9908
Changes from 2 commits
e106371
40fbdc9
43877e7
22ba437
22a87b6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -41,3 +41,34 @@ The page should reload and the debug information should now be available. | |
|
||
For more see the docs pages on {@link ng.$compileProvider#debugInfoEnabled `$compileProvider`} | ||
and {@link angular.reloadWithDebugInfo `angular.reloadWithDebugInfo`}. | ||
|
||
## Strict DI Mode | ||
|
||
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 | ||
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 commentThe 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 commentThe 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 commentThe 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 commentThe 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 commentThe 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 commentThe reason will be displayed to describe this comment to others. Learn more. Note added. |
||
[ng-annotate](https://github.com/olov/ng-annotate) when you deploy to production (and enable | ||
strict di mode) | ||
|
||
To enable strict di mode, you have two options: | ||
|
||
```html | ||
<div ng-app="myApp" ng-strict-di> | ||
<!-- your app here --> | ||
</div> | ||
``` | ||
|
||
or | ||
|
||
```js | ||
angular.bootstrap(document, ['myApp'], { | ||
strictDi: true | ||
}); | ||
``` | ||
|
||
For more information, see the | ||
[DI Guide](https://docs.angularjs.org/guide/di#using-strict-dependency-injection). | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
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