Dans le genre questions inutiles, je me demandais quel était le plus rapide en JS entre la programmation fonctionnelle et l'objet (par prototype), en particulier pour la gestion d'événements (callbacks).
J'ai donc décidé de faire des tests et je me suis rendu compte qu'on avait plusieurs possibilités en objet par prototype pour passer des callbacks gardant le contexte objet (this).
Voilà les différents tests sur jsFiddle avec un commentaire d'explication en haut pour chaque méthode.
Pour chaque test, la partie fonctionnelle est la même, mais la partie objet varie sur la façon de définir les callbacks avec contexte.
1) Utilisation de Function.bind(context) : http://jsfiddle.net/ntYYk/2/
2) Utilisation d'un tableau [context, methodName] qu'une fonction sait interpréter et appeler : http://jsfiddle.net/V67fJ/1/
3) Comme la 2 mais en passant directement la méthode sous forme de fonction plutôt que son nom : http://jsfiddle.net/tQDXg/1/
4) Utilisation d'un objet EventHandler: http://jsfiddle.net/TYaw8/1/
Sur mon PC actuel, sous Chrome, je constate que les deux premiers tests sont à l'avantage de la programmation fonctionnelle (qui est 38% plus rapide pour le premier test, et 6% plus rapide pour le deuxième).
Sur les tests 2, 3 et 4, la programmation fonctionnelle est ralentie puisqu'il faut systématiquement tester s'il s'agit d'une fonction, ou d'un tableau avec contexte (ou pour la 4 d'un EventHandler).
Sur les test 3 et 4, la version objet est aussi rapide que la version fonctionnelle (même des fois plus rapide pour le 4).
J'ai aussi rajouter un dernier test particulier : http://jsfiddle.net/aySSy/3/
Il s'agit en fait de la version 4 sans avoir de condition selon qu'il s'agit d'une fonction native ou d'un EventHandler (les fonctions de benchmark assument qu'il s'agit d'un EventHandler).
En comparant avec le test 1 (qui lui aussi n'a pas de condition pour l'appel des fonctions), la programmation fonctionnelle est dans mon cas 6% plus rapide.
Que pensez-vous de la précision de ces tests ? Quels résultats avez-vous sur votre poste, avec quel navigateur ?
Pensez-vous qu'il est plus intéressant d'utiliser la programmation fonctionnelle pour gagner en rapidité, ou que l'élégance de l'objet (à mon goût) justifie de perdre légèrement en rapidité ?