2010-11-09 7 views
3

J'ai donc beaucoup lu aujourd'hui sur les performances de l'instruction avec, la lisibilité et d'autres choses comme ça mais je ne suis toujours pas sûr si je devrais ou ne devrais pas utiliser l'instruction with dans AS3. L'utilisation de l'instruction with semble identique à la création d'une variable locale qui porterait la référence. Quelqu'un peut-il fournir des informations détaillées sur ce sujet?Utilisez-vous ou non l'instruction with dans AS3?

Répondre

2

Eh bien, d'après mes propres tests, l'instruction with() s'est révélée être un peu plus lente. Ce n'est pas une grosse affaire à moins que vous essayez de presser chaque once de performance de votre film. La même chose pourrait être dite pour faire pour les boucles contre les variables au lieu de constantes, ou en boucles pour les boucles. À moins que vous ne composiez ces boucles dans beaucoup d'itérations, vous n'avez pas vraiment besoin de vous en soucier. En ce qui concerne la lisibilité du code, je pense que cela rend l'aspect plus propre en utilisant with(). Tout se résume au style de codage. La seule fois où j'utilise vraiment l'instruction with(), disons avec une cible connue. Disons que vous avez votre gestionnaire d'événements de la souris en sélectionnant des objets sur le clic, et en le définissant comme currentObject. Vous pouvez alors avoir une fonction qui fait quelque chose comme

with(currentObject) 
{ 
x = 100; 
y = 100; 
alpha = 0.5; 
} 

Bien sûr, vous pouvez le faire d'autres façons, mais comme je l'ai dit. Cela revient au style de codage. Les seules économies que je vois vraiment en utilisant cette méthode sont raccourcies raccourcis clavier vs faire currentObject.x = 100; currentObject.y = 100;

+0

Merci - oui, j'essaie de presser chaque once de performance. Par exemple, j'ai l'écouteur d'événement de clic de souris. Je l'ai vu plus facile à utiliser avec une déclaration pour faire toutes les activités avec le "event.currentTarget". Est-ce que la création de var pour référencer le résultat de event.currentTarget aurait un meilleur effet que l'utilisation de event.currentTarget sur chaque propriété que je veux changer? – Rihards

+0

Mon premier instinct dirait que l'utilisation de event.currentTarget.x = 100 vs var foo = event.currentTarget; foo.x = 100; serait à peu près le même, vous obtiendriez plus de typage détaillé si vous faites var foo: MyObject = event.currentTarget comme MyObject; foo.x = 100; – superfro

+1

Mais la question à portée de main est la météo à utiliser avec() ou pas, et je dirais que si vous allez pour la performance, ne pas l'utiliser. La seule façon de savoir exactement quelles méthodes seront les plus rapides est d'utiliser des benchmarks synthétiques, car il est difficile de prédire ce que le compilateur va faire, et ce résultat peut également changer d'une version à l'autre du plugin flash. – superfro

1

with est un sucre syntactique pur.

En ce qui concerne les performances, il ne s'agit clairement pas d'une optimisation. J'ai exécuté une boucle plusieurs fois et il semble être encore plus lent que l'accès d'attribut habituel.

En termes de lisibilité, je ne suis même pas sûr qu'il y ait un gain. Je préférerais réellement utiliser Grant Skinner proposal. Mais il y a un cas où cela pourrait être utile: with (event.target as MovieClip), car il faudrait sinon une déclaration de variable intermédiaire. Conclusion: Dans la plupart des cas, ne pas l'utiliser.

+0

Merci! De la vue de lisibilité, je trouve qu'il est plus facile de le lire, mais en raison du manque de performance, je n'utiliserai plus la déclaration "avec" à partir de maintenant. – Rihards

2

Je pense, le plus gros problème de with que ce n'est pas vérifié au moment de la compilation. Toutes les erreurs ne seront découvertes qu'à l'exécution. Mais ça aide à nettoyer le code, et ça me plaît un peu. Sache juste ce que tu fais, et ça peut être utile.