2011-04-21 4 views
0

Combien de frais généraux existe-t-il lorsque vous utilisez des fonctions qui ont un énorme corps?Quels sont les frais généraux des fonctions humongous?

Par exemple, considérons ce morceau de code:

(function() { 
    // 25k lines 
})(); 

Comment peut-il affecter la vitesse de chargement/consommation de mémoire?

+1

Voulez-vous dire les frais généraux en termes de mémoire ou de temps? – quamrana

+1

J'aurais tendance à dire négligeable, surtout si l'on parle de 1 fonction – BiAiB

+0

Vous devriez probablement créer votre propre test et voir. Vous pouvez essayer: http://jsperf.com/ –

Répondre

2

Eh bien c'est presque impossible de répondre. Si vous voulez vraiment comprendre au sujet de l'utilisation de la mémoire, colection ordures automatique et d'autres Nitty Gritty de fermeture, commencez ici: http://jibbering.com/faq/notes/closures/

3

Pour être honnête, je ne suis pas sûr, la bonne façon d'aider à répondre à votre question est de mesurer.

Vous pouvez utiliser un profileur javascript, comme celui intégré dans Google Chrome, voici un mini intro to the google chrome profiler

2

Tout d'abord, des produits tels que JQuery reposent sur utiliser des fermetures extrêmement fortement. JQuery est considéré comme un morceau de code Javascript très performant. Cela devrait vous en dire beaucoup sur les techniques de codage qu'il utilise. Les performances exactes d'une fonctionnalité donnée vont varier entre les différents navigateurs, car ils ont tous leurs propres moteurs de script, qui sont tous écrits indépendamment et ont des optimisations différentes. Mais une chose qu'ils auront tous fait est d'essayer de donner les meilleures optimisations aux fonctionnalités Javascript les plus utilisées. Compte tenu de la prééminence de JQuery et ses semblables, vous pouvez parier que les fermetures sont très fortement optimisées. En tout cas, avec la dernière série de versions de navigateurs, leurs moteurs de script sont tous suffisamment performants pour que vous puissiez trouver quelque chose dans les constructions de langage de base, ce qui constitue un problème de performance important.

3

La surcharge est négligeable sur une déclaration de fonction statique quelle que soit sa taille. La seule perte de performance provient de ce qui est défini dans la fonction.

Oui, vous aurez de grandes fermetures qui contiennent beaucoup de variables, mais à moins de déclarer plusieurs dizaines de milliers de variables privées dans la fonction, ou d'exécuter cette fonction des dizaines de milliers de fois, vous ne remarquerez aucune différence.

La vraie question ici est, si vous divisez cette fonction en plusieurs fonctions plus petites, remarqueriez-vous une augmentation des performances? La réponse est non, vous devriez réellement voir une légère baisse de avec plus de frais généraux, bien que votre allocation de mémoire devrait au moins être en mesure de collecter des variables inutilisées. De toute façon, javascript est le plus souvent seulement enlisé par des tâches évidemment coûteuses, donc je ne voudrais pas l'optimisation jusqu'à ce que vous voyez un problème.

+2

cette dernière ligne est si clé – Jason

Questions connexes