J'essaie de choisir la bonne technologie à utiliser pour mettre à jour un projet qui rend essentiellement des milliers de points dans un graphique zoomable et panoramique. L'implémentation actuelle, utilisant Protovis, est sous-performante. Vérifiez le ici:
http://www.planethunters.org/classify
Il y a environ 2000 points lors d'un zoom arrière complet. Essayez d'utiliser les poignées en bas pour zoomer un peu et faites-les glisser pour vous déplacer. Vous verrez qu'il est assez instable et que votre utilisation du processeur va probablement jusqu'à 100% sur un cœur à moins que vous n'ayez un ordinateur très rapide. Chaque modification de la zone de mise au point appelle un redessiner à protovis qui est sacrément lent et est pire avec plus de points dessinés.
Je voudrais apporter quelques mises à jour à l'interface ainsi que changer la technologie de visualisation sous-jacente pour être plus réactive avec l'animation et l'interaction. D'après l'article suivant, il semble que le choix soit entre une autre bibliothèque SVG ou une bibliothèque basée sur un canevas:
http://www.sitepoint.com/how-to-choose-between-canvas-and-svg/
d3.js , issu de Protovis, est basé sur SVG et est censé être meilleur pour le rendu des animations . Cependant, je ne suis pas certain de savoir à quel point il est meilleur et quel est son plafond de performance. Pour cette raison, j'envisage également une refonte plus complète en utilisant une bibliothèque basée sur le canevas comme KineticJS . Cependant, avant d'aller trop loin dans l'utilisation d'une approche ou d'une autre, j'aimerais entendre quelqu'un qui a fait une application Web similaire avec autant de données et avoir son opinion.
Le plus important est la performance, avec un accent secondaire sur la facilité d'ajouter d'autres fonctionnalités d'interaction et de programmer l'animation. Il n'y aura probablement pas plus de 2000 points à la fois, avec ces petites barres d'erreur sur chacun. Le zoom avant, arrière et le panoramique doivent être fluides. Si les bibliothèques SVG les plus récentes sont correctes à cet égard, alors peut-être que la facilité d'utilisation de d3 l'emportera sur la configuration accrue de KineticJS, etc. préférerait certainement aller dans cette direction.
Exemple d'application créée par le NYTimes qui utilise SVG, mais qui s'anime toujours de manière acceptable: http://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html . Si je peux obtenir cette performance et ne pas avoir à écrire mon propre code de dessin sur toile, j'opterais probablement pour SVG.
J'ai remarqué que certains utilisateurs ont utilisé un hybride de manipulation de d3.js combiné avec un rendu sur toile . Cependant, je ne peux pas trouver beaucoup de documentation à ce sujet en ligne ou entrer en contact avec le PO de ce poste. Si quelqu'un a une expérience dans ce genre d' implémentation DOM-to-Canvas ( démo , code ), j'aimerais également avoir de vos nouvelles. Cela semble être un bon hybride de pouvoir manipuler les données et d'avoir un contrôle personnalisé sur la façon de les rendre (et donc les performances), mais je me demande si devoir tout charger dans le DOM va encore ralentir les choses.
Je sais qu'il existe des questions similaires à celle-ci, mais aucune d'entre elles ne pose exactement la même chose. Merci de votre aide.
Suivi : l'implémentation que j'ai fini par utiliser est sur https://github.com/zooniverse/LightCurves