'Rendu' est le processus de création ou de mise à jour des éléments HTML en le DOM à reflète l'état de l'arbre. Par exemple le dernier nœud d'une branche a un nom de classe spécial, donc en ajoutant un nœud nécessite de supprimer cette classe du précédent 'dernier nœud' et en l'ajoutant au nouveau .
Chaque fois que vous appelez .addChild (données), le rendu est déclenché. Si vous passez 100 nœuds avec un appel, le rendu est effectué une seule fois, alors c'est toujours plus performant que de l'appeler 100 fois avec un seul nœud .
Actuellement (Version 0.5.4) addChild utilise ce modèle:
var prevFlag = tree.enableUpdate(false);
[modify the tree]
tree.enableUpdate(prevFlag);
enableUpdate (true) appelle tree.redraw(), de sorte que l'arbre entier est mis à jour. Cela va changer avec la version 1.0, mais même alors, il sera plus rapide de combiner addChild appels.
Un autre aspect est: lorsque sont les noeuds créés dans le DOM. La création d'éléments HTML à partir de la version 1.0 est différée jusqu'à ce que le noeud devienne visible (développé) pour la première fois. Il est donc possible de charger un très grand nombre de nœuds dans la structure de données Dynatree interne efficace sans gonfler le DOM.
S'il est plus facile de pré-charger l'arbre entier, ou de charger paresseux branches simples sur demande, dépend du serveur, du réseau et du client. C'est donc toujours une question d'analyse comparative des différents scénarios.
Merci pour l'info, juste une précision de plus: quand .addChild (nodesToAdd) est appelé, les nœuds existants sont-ils également redessinés? Je comprends que (évidemment) les nodesToAdd seront rendus, mais qu'en est-il des nœuds existants. Est-ce que cela redessine tout l'arbre? – sarsnake
Je viens de lire votre réponse et je comprends que la réponse est Oui :) Il semble que chaque fois que des nœuds changent, l'arbre est redessiné. Il semble que var prevFlag = tree.enableUpdate (faux); renvoie 'true' si des nœuds ont été modifiés, ce qui signifie que l'arborescence entière sera redessinée. Est-ce que ma compréhension est correcte? merci encore pour votre temps. – sarsnake
enableUpdate (..) renvoie le mode de mise à jour précédent. Ce modèle permet de restaurer l'état précédent (même dans une hiérarchie d'appels récursifs). Comme nous ne gardons aucune trace des modifications, enableUpdate (true) doit toujours mettre à jour l'arbre entier: créer de nouveaux noeuds et mettre à jour les noms de classe pour les existants. Pour v1.0 je pourrais changer l'implémentation de mynode.addChild (childOrChildList) pour redessiner la branche mynode seulement. – mar10