¿Qué significa el seguimiento de dependencia en JavaScript?

El seguimiento de dependencias es una forma elegante de decir: “Cada vez que algo cambia, todo lo que depende de él debe saberlo”. La mayoría de los marcos modernos, donde la vista y el modelo están separados, permiten esto de una forma u otra.

Knockout tiene un objeto rastreador llamado ko.dependencyDetection . Esto es algo así como un intermediario, que actúa entre

  • Una dependencia a la que se quiere acceder.
  • Algo que se suscribe a esa dependencia.

Aquí hay un ejemplo, con el objeto “Apple”, que mostramos en la vista. Digamos, debemos actualizar la vista o hacer otra cosa, siempre que este objeto cambie.

var test1 = ko.observable (“manzana”);

ko.dependencyDetection.begin ({
devolución de llamada: función (suscriptor, uniqueId) {
console.log (“El observable con el id”, id, “fue leído”);
}
});

Ahora, cada vez que se lee la “manzana” observable …

  • Se otorga una identificación única al elemento al que se accede.
  • Se llama a la devolución de llamada, utilizando esa identificación única.

Ahora podemos correr

prueba1 ();

// Salida:
// Se accedió al observable con la identificación 1.

El rastreador de dependencias mantiene una lista de elementos. Cada vez que ocurre un cambio, se notifican sus dependencias.

La alternativa es realizar un seguimiento manual y aplicar el cambio, siempre que ocurra. Esta es más o menos la forma clásica de JS de hacerlo.

Knockout JS permite usar la arquitectura MVVM (Model View View Model). Esto significa que el modelo siempre estará completamente sincronizado con la interfaz de usuario. Por lo tanto, es adecuado para aplicaciones donde se necesita su servidor para estar siempre sincronizado con la interfaz de usuario. Gran parte de la sincronización estará en el extremo del cliente, por lo que evita que el servidor tenga que soportar la peor parte de la manipulación de la interfaz de usuario. Eso significa servidores más rápidos, lo que significa una carga de página más rápida.

Knockout es muy adecuado para casos en los que la interfaz de usuario es suficientemente compleja y necesita ser completamente desacoplada. La desventaja de esto, es quizás que la parte frontal de las cosas, se vuelve bastante complicada a largo plazo.

No se trata de JS, esto es algo de Knockout, aunque en realidad es una técnica general, por ejemplo, WPF lo llama “propiedades de dependencia”.

La idea es que cuando los datos cambian, se necesita ejecutar algún código para actualizar la interfaz de usuario: en MVVM, con enlace de datos, esa es la idea completa; la interfaz de usuario es una capa “tonta” en la parte superior de un modelo de datos.

El seguimiento de dependencias también hace que esto funcione en situaciones en las que algunos datos se calculan en función de otros datos: si estas dependencias se “rastrean”, esto significa que si actualiza los datos de origen, también actualizará los datos de resultados y la interfaz de usuario; todo será recalculado automáticamente.

La alternativa es llamar a algún tipo de método de actualización usted mismo cuando cambia los datos de origen (por ejemplo, en el configurador de la propiedad). Esto significa que debe realizar un seguimiento manual de todo lo que necesita actualizarse, y es bastante horrible (dado que ya no solo está superponiendo cosas encima de otras cosas, ahora las capas inferiores también necesitan saber sobre las capas superiores).