Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

docs(guide/Running in Production): ng-strict-di #9908

Closed
wants to merge 5 commits into from
Closed
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions docs/content/guide/production.ngdoc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: implicitly

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
Copy link
Contributor

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.

Copy link
Author

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...

Copy link
Contributor

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.

Copy link
Author

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..........

Copy link
Contributor

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

Copy link
Author

Choose a reason for hiding this comment

The 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).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

{@link ... } should be used here too.