Misko a déjà donné une excellente description du fonctionnement des liaisons de données, mais je voudrais ajouter mon point de vue sur le problème de performance de ces liaisons.
Comme l'a dit Misko, c'est autour de 2000 liaisons que l'on commence à rencontrer des problèmes, mais de toute façon, on ne devrait pas avoir plus de 2000 informations sur une page. C'est peut-être vrai, mais toutes les liaisons de données ne sont pas visibles pour l'utilisateur. Dès que vous commencez à construire une sorte de widget ou de grille de données avec des liaisons bidirectionnelles, vous pouvez facilement atteindre 2000 fixations, sans avoir une mauvaise UX.
Prenons l'exemple d'une boîte combo dans laquelle vous pouvez saisir du texte pour filtrer les options disponibles. Ce type de contrôle pourrait comporter ~150 éléments et rester très utilisable. S'il dispose d'une fonctionnalité supplémentaire (par exemple, une classe spécifique sur l'option actuellement sélectionnée), vous commencez à avoir 3 à 5 liaisons par option. Mettez trois de ces widgets sur une page (par exemple, l'un pour sélectionner un pays, l'autre pour sélectionner une ville dans ledit pays, et le troisième pour sélectionner un hôtel) et vous êtes déjà quelque part entre 1000 et 2000 liaisons.
Ou considérez une grille de données dans une application web d'entreprise. Il n'est pas déraisonnable de prévoir 50 lignes par page, chacune d'entre elles pouvant comporter 10 à 20 colonnes. Si vous construisez cette grille avec ng-repeats et/ou si vous avez des informations dans certaines cellules qui utilisent des liaisons, vous pourriez approcher les 2000 liaisons avec cette seule grille.
Je trouve que c'est un énorme La seule solution que j'ai pu trouver jusqu'à présent est de construire des widgets sans utiliser de liaison bidirectionnelle, au lieu d'utiliser ngOnce, de désenregistrer les observateurs et d'autres astuces similaires, ou de construire des directives qui construisent le DOM avec jQuery et la manipulation du DOM. J'ai le sentiment que cela va à l'encontre de l'objectif de l'utilisation d'Angular en premier lieu.
J'aimerais bien entendre des suggestions sur d'autres façons de gérer cette situation, mais je devrais peut-être écrire ma propre question. Je voulais la mettre dans un commentaire, mais elle s'est avérée être bien trop longue pour cela...
TL;DR
La liaison des données peut entraîner des problèmes de performance sur les pages complexes.
10 votes
Sachez que depuis angular 1.0.0rc1, vous devez spécifier ng-model-instant ( docs-next.angularjs.org/api/ ) pour que votre modérateur soit mis à jour en permanence. Sinon, il sera mis à jour lors d'un événement flou.
8 votes
Le lien de Marcello est apparemment cassé, alors le voici à nouveau : github.com/mhevery/angular.js/blob/master/docs/content/guide/
6 votes
@orian, ce lien est mauvais. mis à jour vers (je suppose) est le même - docs.angularjs.org/guide/databinding
11 votes
Pour ceux qui lisent encore cette question, veuillez noter qu'Angular 2.0 a fortement modifié la manière dont il aborde la liaison de données depuis Angular 1.x afin de fonctionner avec les composants Web et de résoudre un grand nombre des problèmes évoqués dans les réponses ci-dessous.