Question

Cette situation est survenue principalement en raison de réponses aux questions SQL. Requêtes UDF et sous sont omis intentionnellement en raison de la performance. Je ne mentionnaient pas la fiabilité pas qu'il devrait être pris pour acquis, mais le code doit travailler.

Est-ce que la performance viennent toujours en premier? Tant de réponses sont fournies avec des performances comme la principale priorité. Mes utilisateurs semblent être plus préoccupés par la rapidité avec laquelle le code peut être modifié. Ainsi, un rapport prend 15 secondes au lieu de 12 à courir. Ils peuvent vivre avec ça tant que je ne suis pas d'excuses pour ne pas fournir des solutions.

Il est évident que si les 15 secondes se transforme en 15 minutes, il y a un problème, mais les utilisateurs veulent la fonctionnalité. Ils veulent l'application d'adapter les changements de règles métier et les demandes d'amélioration. Je veux être en mesure de regarder le code 6 mois à partir de maintenant et être en mesure de faire le changement dans un endroit facilement identifié et non pourchasser tous ces endroits soneone copiés et code collé parce qu'ils pensaient appeler une autre fonction ou sous routine ou UDF nuire à la performance.

Tout ce qui est dit, je commande: maintenabilité (. Le changement est une réalité de la vie), Performance (. Personne n'aime regarder le sablier), réutilisabilité (Difficile de déterminer quel code doit être utilisé à nouveau.).

Était-ce utile?

La solution

1. Maintenabilité: Si le code est lisible par un il est inutile, peu importe comment il est rapide. Et ce ne sera certainement pas être être réutilisé.

2. Réutilisabilité: Pas tout le code est réutilisable, mais beaucoup de c'est. Si vous pouvez, par tous les moyens de rendre votre code plus simple. Le plus simple est diviser pour mieux régner. Par exemple, créer des composants simples que vous utiliserez plus et plus et plus. widgets interface utilisateur sont les plus communs. Mais il est la même chose avec les services publics. De plus, la création d'une structure / cadre à votre code aide. Erreur code de validation, etc.

3. Performance: En général la plupart du code est assez performant. Et sinon, utilisez un profileur de code. Le plus souvent le goulot d'étranglement l'emportent largement sur les petites optimisations de code que vous auriez pu faire au détriment de la lisibilité soit ou re-utilisabilité.

Autres conseils

Je pense que vous avez manqué un dans la liste: la fiabilité;

ma commande est

  • Fiabilité et précision
  • maintenabilité
  • réutilisabilité
  • Performance

Peu importe la façon dont le code est rapide quand il ne convient pas, d'une part le code doit être fiable.

La performance est au bas de la liste. Ne jamais optimiser trop tôt, et seulement d'améliorer les performances lorsque la performance est un problème.

J'ai travaillé sur des systèmes en temps réel, y compris la simulation de vol, et même dans les performances de l'environnement est pris en considération, mais n'est pas une préoccupation majeure primordiale 1 .

Je dirais que, dans mon expérience, je ne l'ai jamais eu pour optimiser moins de 1% du code que j'ai écrit.


1 parfois quelque chose est pas assez rapide, et la performance est bien sûr pris en considération lors de la conception et de codage, il est tout simplement pas en haut de la liste.

La réponse de ventouse est bien sûr, "ça dépend".

Dans le cas des applications de ligne de business le temps de réponse pour l'activité concernés doit être inversement proportionnelle à la fréquence avec laquelle il est exécuté. S'il est une fonction que les utilisateurs ont besoin d'accéder à 4 ou 5 fois par heure il vaut mieux être souplement que de tirer ce rapport de fin de mois.

Je pense que, dans une certaine mesure, vous avez répondu à votre propre question et a fourni quelques raisons très valables pour elle. Le seul que vous avez manqué est la fiabilité - et c'est là tha analogie NASA vient Si vous écrivez du code pour la NASA, ou pour une institution financière, il avait sanguinaire bien mieux d'être robuste et fiable ... et. Je pense que ça serait la première priorité.

Je suis un entrepreneur de la NASA et dresseront des logiciels principalement à des fins d'administration tels que les rapports en cours d'exécution et le suivi des projets.

Je travaille là depuis environ 1,5 ans et je crois que leur principale préoccupation est maintenabilité et comment pouvez-vous obtenir rapidement cette nouvelle fonction ou module déployé.

Comme indiqué dans la Guiness question tant que le logiciel ne prend pas une quantité exceptionnelle de temps, ils ne semblent pas à l'esprit.

L'autre principale préoccupation qu'ils semblent avoir est la facilité d'utilisation. L'application doit être facile et simple à utiliser.

En conclusion, maintenabilité, facilité d'utilisation, la performance semble principales préoccupations de la NASA pour les rapports internes et des outils de suivi.

Vous devez être en mesure de réorganiser ces priorités en fonction du projet, et la chose difficile peut être le comportement changent rapidement lorsque vous passez entre les projets ou même des sections différentes de code. Je travaille sur trois applications avec des profils très différents.

  1. L'un est en temps réel et beaucoup de travail va en se assurant que sa performance est prévisible, (éclaircissant pas nécessairement rapide), mais le changement est pas un problème majeur, il ne change que de manière significative lorsque les modifications / obsoletes IETF le RFC et il y a peu de signes de cela. (Cela dit, je suis assez fier de son niveau de maintenabilité).

    • Une autre application a parfois pris 16hrs pour traiter les données de 1 jour. Inutile de dire que la performance absolue est rapidement devenu la priorité absolue. Mais même dans cette application le soulignent la performance varie considérablement, de « pas important » dans le par lot de code par client par client-code, par tâche code, fichier par fichier-code, par enregistrement de code, par -field-code 'extrêmement important' dans le code par octet.

    • L'application finale contient une grande partie de la logique métier, la performance est jamais un problème, la maintenabilité et l'agilité sont essentielles sont et ce avantages d'applications la plupart de toutes les méthodes à la mode, mais, quand je viens de passer des semaines ou des mois refactoring pour la performance, il est très difficile d'écrire « chaîne1 + chaîne2 + string3 + string4 », même si c'est le plus lisible et la performance est hors de propos.

Edité 2010-03-02 : La question à l'origine a commencé:

  

Est-ce que tout le monde travaille pour la NASA? Est-ce que la performance viennent toujours en premier? Tant de réponses ...

Non-plupart d'entre nous ne fonctionnent pas pour la NASA.

Non: la fiabilité et la maintenabilité sont en avance sur la performance. Réutilisabilité est bon aussi.

Dans de larges limites, la performance n'a pas d'importance.

Ceci est une question intéressante et les réponses sont assez très intéressant. La priorité dépend de la mise en œuvre. Je voudrais présenter un des exemples où les utilisateurs ne seraient pas sacrifier la performance pour la maintenabilité ou réutilisabilité. Oui, il y a un facteur de fiabilité - il devrait y avoir tout bug / erreur. Ainsi, lorsque l'on compare la maintenabilité, la performance et la réutilisabilité.

L'un de nos client dispose d'un site de commerce en ligne. Sous des charges de pointe d'une transaction moyenne prendrait un certain où environ 14 ms pour terminer au niveau du middleware. Quelque temps derniers la performance d'application dégradée (pour certaines raisons) et les transactions du temps moyen a augmenté à 24 ms. Maintenant, en tant que développeur normale nous pensons 10 ms est pas si critique de façon alarmante. Mais si l'on pense du point de vue des affaires, alors il est alarmant. Comment? analysons:

laisse supposer que sous des charges de pointe, les ressources sont pleinement utilisées et 14ms nous avons pu faire 100 transactions. Maintenant, avec la dégradation des performances des transactions prennent 10ms supplémentaire qui est 71,42% du temps supplémentaire. Maintenant, cela signifie que nous ne pourrons servir 28.58 transactions au lieu de 100 transactions. Cela signifie une perte grave pour les entreprises.

Enfait il y a beaucoup de littérature sur l'importance de la performance des applications. Il y a un très beau livre « Approche quantitative à l'architecture informatique » qui explique comment les facteurs de performance, maintability, la fiabilité, avaliability peuvent être quantifiés en termes d'affaires / utilisateur.

Je ne vais pas préciser l'ordre d'importance est la même contexte.

  

ils pensaient appeler une autre fonction ou sous routine ou Udf entraveraient la performance

Ce qui ne va pas penser.

  

Je commande: maintenabilité, performance, réutilisabilité

.

Parfois (habituellement OMI) réutilisabilité est maintenabilité: c'est parce que vous réutilisiez quelque chose que vous êtes « en mesure de faire le changement dans un endroit facilement identifiable et non pourchasser tous ces endroits soneone copiés et code collé ».

doesnt't Performance premier arrivé, même à la NASA! A la NASA, si le code est correct et fiable, les gens meurent.

De plus, dans mon expérience, même si la performance est précieux, il est à un point; il y a généralement un niveau de performance qu'il ya peu ou pas de valeur supplémentaire à dépasser. En revanche, il y a une valeur ajoutée à l'amélioration de la correction, peu importe la façon dont un morceau de code fiable est; un morceau de code ne peut pas vraiment fonctionner comme prévu trop souvent.

Pour moi, l'ordre serait:

  • maintenabilité :. Si ce n'est pas facile de changer, il ne restera pas longtemps correct, même si elle est correcte maintenant
  • réutilisabilité :. Réutilisation améliore la productivité et moins de code est généralement plus fiable que plus de code
  • Performance : parfois les questions de performance, mais vous seriez surpris de voir à quel point beaucoup de code est critique pas les performances, même dans une performance des applications critiques. questions d'optimisation de performance pour les goulots d'étranglement que.

Dans une réponse isolée, les performances sont pratiquement toujours en premier.

Nous ne savons pas si vous allez frapper ce morceau de code d'un million de fois de suite, si la performance est une préoccupation par défaut. Nous ne savons pas si notre précieux extrait de code deviendra le goulot d'étranglement de votre demande, puisque nous ne savons pas comment il interagit. (La même chose se produit lors de l'écriture du code de la bibliothèque:.. Je ne sais pas comment cela est utilisé une raison réutilisation du code de l'OMI n'est pas simplement « en mouvement un code similaire à une entité partagée »)

maintenabilité est encore plus affectée par la façon dont le code interagit avec le code inconnu pour nous. La réponse va résoudre le problème dans le champ vous définissez: Vous pouvez demander ou une étiquette comme SQL ou SQL Server ou MySQL. Le reste, nous ne savons pas: Combien de chemins de code similaire vous? Combien de fois ce morceau de code va changer au cours de la vie du projet? Voulez-vous en tenir à cette version base de données particulière du serveur pendant dix ans, ou allez-vous mettre à jour fréquemment?

Résolution maintenabilité est en grande partie votre travail: La question que vous posez une entité qui devrait être isolé?

Lisibilité est la plupart du temps fait, le reste est votre travail. En répondant à nous sommes généralement intéressés à vous understandign la réponse, il doit être lisible au moins pour vous. Si vous copypaste cet extrait dans votre code et gifler un commentaire // That weird query là-dessus, pas plus mon problème.

Ajoutez à cela le fait que la performance est plus facile comprendre: De deux réponses fonctionnellement équivalentes, vous aurez toujours choisir celui qui dit « comme réponse Joes, mais un peu plus rapide », à moins que cela fait d'énormes erreurs dans le département M + R.


La rédaction de ce maintenant il semble qu'il ya une raison que l'optimisation prématurée est tentante. Cette est une mauvaise priorité pour deux raisons.

La faible priorité pour l'optimisation a deux principales raisons, cependant:

Correctness est plus important que la maintenabilité, réutilisabilité ou performance. Si vous visez l'exactitude, vous êtes susceptible d'obtenir les trois autres dans le marché.

  • Ecrire aucun code plus que nécessaire.
  • Effet de levier bibliothèques standard.
  • Préférez la transparence à l'intelligence.
  • Ecrire petites fonctions testables.

Voici les résultats en fonction Tag Count:

  • Performance - 952
  • (réutilisabilité plusieurs balises connexes) - 43
  • maintenabilité - 14

Qu'est-ce que cela signifie: La performance doit être important? La performance est plus difficile, donc plus de questions sont posées. les questions de performance sont plus spécifiques / approprate demander sur ce site?

travailler de la NASA. Cependant, je ne suis pas (actuellement de toute façon) maintenir ou développer un code en temps réel ou tout ce qui est tout ce que la performance critique. La plupart des logiciels fait à la NASA est probablement pas. Après avoir vu un code horrible dans ma journée, je vais aussi aller avec la réponse de Jonathan de fiabilité et de maintenabilité suivi par leur exécution et réutilisabilité pour la plupart des applications.

Une de mes citations préférées est de SICP ...

« Les programmes informatiques sont conçus pour être lus par les humains et a couru par les ordinateurs Incidently. »

Je considère tous ces ascpects de mon travail; mais la lisibilité (certains utilisent le terme expressivité) de mon code et ceux que je travaille avec en tête ma liste d'importance.

Juste mon 2c, un beau week-end!

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