Entre deux sessions de corrections, la journée a été consacrée aux problèmes de performance :
Application - P3 - Il faut plus de 2 secondes pour charger ~2 Mo de données au démarrage.
- Suite aux conseils de Pascal P., le chargement DOM utilise désormais du Firstchild et NextSibling au lieu de compter les nœuds et de boucler dessus. On est passé de 140 à 130 ms. Avec la lecture du fichier, le chargement prend 180 ms, ce qui semble finalement assez correct pour de l'XML.
- Derrière il faut y rajouter les 820 ms d'extraction des icônes des Raccourcis, qu'il faudra un jour conserver en cache.
- Le chargement prend donc 1 seconde, la seconde supplémentaire était dû à un bug qui déclenchait un enregistrement inutile.
- Là encore le code a été analysé et ce pouvait être optimisé l'est. On est passé de 1260 à 1150 ms.
- Ce temps est pratiquement à 100% dans le module NativeXML qui est pourtant réputé pour être rapide. Il ne sera pas modifié.
- La bonne nouvelle c'est que l'enregistrement asynchrone (via Application.ProcessMessages) a été réactivé et qu'il fonctionne très bien !!! Les crashes qu'il y avait lors de sa première implémentation devant avoir été provoqué par autre chose. Le système de lock a été revu, il interdit les enregistrements concurrents en cas de clics frénétiques sur le bouton Save. Une petite séance de stress-tests a permis de valider la solidité de l'ensemble. L'enregistrement ne provoque plus de lag.
- Comme imaginé depuis longtemps, un système basé sur du Create - Hide - Show a été mis en place pour l'Agenda au lieu des Create - Destroy - Create. La création se fait à la première utilisation et non systématiquement au démarrage de l'application.
- Seul cet outil l'utilise, car la mise au point est un peu délicate. Par exemple il a fallu forcer la mise à jour d'une partie des composants en cas de purge totale des données ou d'import, ces opérations ne se faisant normalement qu'après fermeture de tous les outils ayant des données.
- Mais le résultat est 100% conforme à ce qui était attendu : la première ouverture prend un peu de temps, les suivantes sont instantanées, y compris après réduction/restauration de la Barre.