Chavales, el double-binding está genial, pero LÓGICAMENTE tiene sus cons.
Si se tiene una vista muy grande, con muchos componentes que realizan muchos cambios de estado y/o operaciones costosas, el double binding es algo que debe evitarse a toda costa, y debe cambiarse el change detection para hacerse manual:
@Component({
selector: 'app-place-page',
templateUrl: './place-page.component.html',
styleUrls: ['./place-page.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
(aún así, para la gran mayoría de casos, esto no es necesario).
Por otra parte, creo que es importante dar cierto crédito a que la versión 8 ha mejorado el rendimiento drásticamente (al menos en las apps de Ionic creadas con Angular, se ha notado mogollón). Esto no quita que Angular requiera de cierta comprensión de cómo funciona si queremos conseguir un buen rendimiento, ni que no tengamos que a veces tirar de herramientas externas para mejorarlo (como sería Ngrx cuando se manejen ingentes cantidades de datos que deban controlarse en una store centralizada; algo que no pasa siempre, pero que en muchos casos es necesario).
Yo diría a día de hoy, que si hay que hablar de debilidades de Angular, éstas serían las siguientes:
- Lo sumamente overengineered que está. Hay tantas herramientas, muchas semi-redundantes entre sí, que ceñirse al 100% a la arquitectura propuesta, se vuelve realmente difícil.
- Pobre manejo de los módulos que nos lleva a necesitar, para SPAs, el típico "módulo de componentes" que importamos en los módulos cargados en loadChildren. Lo óptimo sería importar directamente los componentes en los módulos donde son necesarios, sin que nada pete, y que haya un check que evite la recarga de un módulo que se ha cargado anteriormente. Al final, la solución requerida es poco elegante, a mi parecer.
- El change detection por defecto es algo que me parece tremendamente útil, pero que entender y manejar para optimizar una app puede ser más dificultoso de lo que debería, además de que a veces hace checks sin sentido.
- El que en las templates no se pueda usar *ngIf y *ngFor a la vez en el mismo elemento, puede resultar un poco tedioso. Que se soluciona fácil, vale, pero es algo que debería poder hacerse.
- Los cambios nuevos que han implementado al @ViewChild, si bien le dan más dinamismo, creo que lían un poco al personal. Debería seguir habiendo una opción por defecto que no requiriese estipular el parámetro "static" (supongo que poniendo este a "true" por defecto).
- Mucho ojo con abusar de RxJs. Es genial, lo sé, y a mí me gusta mucho, pero sobreutilizarlo puede ser problemático y un puto lío. Si se quiere usar para más que unas pocas cosas, es mejor tirar de Redux.
Por lo demás, a mí el framework me gusta y me facilita mucho la vida. O bien trabajo con Angular, o bien directamente tiro a hacer una web simple sin siquiera Jquery. Quizá algún día dé el salto a React o Vue, pero es que por ahora sencillamente no veo que haga falta.
pd: eso sí, HUID de angularjs y MIGRAD las apps de ng2/3/4 a la actual, que solventa muchas cosas.