Question

C'est une sorte de question aléatoire, mais je me demandais pourquoi un rappel nommé fonctionnait pire, pour un événement de clic, par rapport à une fonction anonyme.

Voici le lien vers le Jsperf Tests J'ai passé à Firefox et Chrome sur Mac.

Je suppose que mon hypothèse était que les rappels nommés fonctionnaient toujours mieux. Par exemple, lorsque vous utilisez .each Le rappel nommé est légèrement plus rapide.

Merci pour votre temps!

Éditer J'ai édité le .each Test de jsperf parce que (a) je ne testais pas ce que je voulais dire et (b) je suis en essayant pour imiter les événements plus.

Modifier 2 Ma configuration de test était incorrecte dès le début comme le souligne @esailija ci-dessous. Cette question est quelque peu inutile, mais au moins cela pourrait aider quelqu'un avec des tests JSPERF.

Était-ce utile?

La solution

Le JSPERF est cassé car vous accumulez les gestionnaires d'événements à travers les limites de test. Dans d'autres Wrods, quel que soit le test exécuté en premier sera le "plus rapide".

Et toute la prémisse du test est ridicule, il n'y a pas de différence entre une fonction qui a un nom et une fonction qui n'a pas de nom si tout le reste est égal. Vous ne verrez une différence que lorsque vous configurez JSPERF incorrectement. Lorsque vous obtenez constamment des résultats égaux pour eux, vous savez que vous le configurez correctement - mais vous le sauriez déjà de bon sens :)

Autres conseils

La fonction anonyme est adoptée comme un argument, donc pour résoudre sa référence, la chaîne de portée n'atteint pas jusqu'à la fonction parent qui l'a créé - elle existe uniquement comme un argument. D'un autre côté, pour résoudre la référence à la fonction nommée, la chaîne de portée est suivie jusqu'à la fermeture de la fonction parent où la fonction nommée a été créée.

Éditer:J'ai essayé de le prouver, mais il semble que la fonction anonyme ne soit pas réellement résolue - http://jsperf.com/scope-chain-anonymous-ction

Éditer: Si vous appelez a.off(); Pour supprimer tous les gestionnaires d'événements, la fonction nommée sera tout aussi rapide ou plus rapide que de résoudre la fonction anonyme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top