12
votes

Les projets de site Web ASP.NET sont-ils des projets intrinsèquement lents à la compilation ou pourrais-je avoir des problèmes plus profonds?

Je travaille sur un projet Web Legacy ASP.NET (par rapport à une application Web) chez un client depuis un certain temps et son temps de compilation lente m'a demandé:

sont des projets de site Web connus pour être lent (er) à la compilation (que des projets d'application Web)?

C'est un joli petit site Web, mais toute la solution a des tonnes de fonctionnalités - 19 projets d'une valeur, dont 18 compilent très rapidement (les projets non-web). Le projet de site Web lui-même a ~ 100 pages et ~ 15 contrôles d'utilisateur (celles-ci prennent en réalité environ la moitié de l'heure de la compilation) et compile normalement dans les 30 à 60 secondes. Une re-construction complète se rapproche de ce dernier.

Alors, certaines choses que je crois pourraient le ralentir (vous démystifez-les):

  • (x) Problèmes de validation HTML (le code que nous avons hérité a des milliers d'avertissements de compilateur sur les problèmes de validation).
  • niveaux élevés d'abstraction - car le code des pages du site Web est compilé au moment de l'exécution, je suppose que tout ce que vous faites pour les contrôles d'utilisateur en haut est un processus long, de sorte que la liaison au moment de la compilation peut arriver.
  • la simple taille du site Web? Je sais que ce ne sont pas des projets très efficaces, et croyez-moi, j'ai passé des heures à essayer de l'obtenir converti à une application Web, mais Visual Studio n'a pas pu analyser un seul fichier aspx dans ses composants .aspx / .designer.xx car des problèmes de validation que j'ai mentionnés précédemment.

    supposant que mon client n'approuve pas plus de quelques heures pour résoudre ce problème, existe-t-il des correctifs rapides, des modifications ou des optimisations connues qui pourraient m'aider?

    Je n'ai pas d'ordinateur chétif, son pouvoir de traitement n'est donc pas un problème. J'ai également travaillé sur des projets d'application Web équivalents dans la taille et la complexité qui compilent en quelques secondes seulement.

    Je suis ouvert à peu près n'importe quoi, alors j'aimerais entendre vos pensées! En outre, si vous pensez que cela devrait être un wiki, faites le moi savoir.


6 commentaires

19 projets? Pour un "petit site"?


30 à 60 secondes pour 19 projets? Cela ne semble pas vraiment être un problème.


Je sens votre douleur, mais 30 à 60 secondes pour une compilée ne semble pas déraisonnable pour un projet de cette taille. Avez-vous envisagé d'envelopper vos 18 autres projets dans les DLL et de les référencer à partir du projet Web?


Eh bien, d'accord, mais les autres projets ne sont qu'une poignée de classes simples - d'autres projets qui ont été divisés en raison de problèmes de référence circulaires. Comme je l'ai dit, ces autres projets compilent super vite, il ralentit une fois que cela se rend au projet de 1 site Web dans la solution. Peut-être le nombre de références qui rendent-ils la compilation de site Web ralentissée?


Le commentaire "Références circulaires" a piqué mon intérêt. Dll'ing Les autres projets peuvent aider, car le compilateur n'aura plus à nous familier sur eux.


Il existe une poignée de projets dans la solution qui ne sont plus modifiés ni entretenus par le client, alors les dlling eux est définitivement une option. Je vais essayer d'essayer quand j'ai du temps libre (ha!).


5 Réponses :


3
votes

Lire d'abord ce blog post Conseils pour optimiser le temps de conception Construire des performances pour les sites Web dans Visual Studio 2005

points principaux faits:

  • Ne pas désactiver la compilation par lots
  • Compilation côté serveur de serveur
  • Déplacer app_code des fichiers dans un projet de bibliothèque de classe distinct
  • Vérifiez que les dépendances en conflit
  • désactive Autotoolboxpopulate dans les options de concepteur Windows Forms.
  • Désactiver la validation pour l'édition HTML

    Une autre option qui pourrait vous aider à passer à un disque RAM: Développement de la course à partir d'un disque RAM - Options et produits

    Si cela n'aide pas peut-être peut-être diviser votre gros WAP dans plusieurs personnes pourraient améliorer la compilation. Malheureusement, cette stratégie exige que vous déposez de vous développer sur Cassini. Au lieu de cela, vous devrez utiliser IIS comme hôte: Utilisation de plusieurs projets d'application Web (WAP) dans une solution


0 commentaires

4
votes

Mes observations ont été identiques: les projets de site Web prennent un certain temps à la construction, plus long, puis des projets d'applications Web. Je pense que j'ai trouvé des informations sur pourquoi, consultez ceci: http://msdn.microsoft.com/en-us/library/aa730880(vs.80).aspx

Recherche de "Développement itératif". Il en va de suite sur les projets de site Web, par rapport aux projets d'application Web:

Par défaut, Visual Studio Complètement compiler des projets de site Web chaque fois que vous exécutez ou déboguez n'importe quelle page. C'est fait pour identifier les erreurs de compilation n'importe où sur le site. Cependant, un La construction complète du site peut considérablement ralentir le développement itératif processus, donc c'est généralement recommandé de changer la construction Option de projet pour compiler uniquement la Page actuelle sur la course ou le débogage.


1 commentaires

Lecture supplémentaire: Weblogs .asp.net / Scottgu / ...



1
votes

Un fait que la plupart des développeurs négligent dans un projet Web ASP.NET constitue la quantité de classes dans le dossier APP_CODE .
Plus vous y parvenez de classes, plus ce sera le temps de compilation.

De ASP.NET Compilation Aperçu de la MSDN :

asp.net crée un assemblage pour chaque répertoire d'applications (telle que App_code) et un pour le principal annuaire. (Si des fichiers dans un répertoire sont dans une programmation différente Langues, puis assemblages distincts sera créé pour chaque langue.)

Donc, si vous pouvez réduire fondamentalement la hiérarchie des dossiers et réduire la quantité de classes dedans, il sera réduira probablement le temps de compilation.



Une autre chose que j'ai remarquée de votre message est que vous avez 18 projets non-site Web.
Je pense que c'est un peu trop excessif car pensez-y de cette façon.

Lorsque la compilation de projet Web démarre, le compilateur ASP.NET doit relier les 18 fichiers DLL distincts.
Si ces projets peuvent être combinés pour réduire le nombre de DLL, il pourrait également l'aide.

du point de vue de la main-d'œuvre, avoir 18 projets est un peu excessif à moins qu'il y ait de véritables raisons de le faire.
Je suggérerais d'examiner les projets et de les combiner.

J'espère que ça vous aide.


1 commentaires

La raison de la multitude de projets est que notre tâche était d'intégrer un autre système dans le site Web actuel, mais de maintenir une très faible couplage - en leur donnant essentiellement la possibilité d'échanger notre système d'intégration avec un autre. Notre solution a ajouté 7 projets à la 12. Garnissant, mais c'était une exigence.



0
votes

Cela peut ne pas être idéal, mais vous pouvez diviser vos projets en plusieurs solutions. Par exemple, vous pouvez prendre les contrôles de l'utilisateur et les mettre en solution A et le reste des projets dans la solution B. Puis compilez les commandes de la solution A et la référence de fichier à partir de la solution B qui devrait vous aider à réduire l'heure de la compilation


0 commentaires

0
votes

Site Web ou projet Web, la performance doit être similaire après la phase de compilation. Si la question est une mauvaise performance immédiatement après le déploiement d'un nouvel ensemble de codes, une façon rapide de penser est de pré-publier le site. (Voir référence http://msdn.microsoft.com/ EN-US / Bibliothèque / 1y1404zt (vs.80) .aspx )

Selon les options que vous avez choisie lors de la publication, vous pourrez peut-être manquer de flexibilité pour apporter des modifications à la volée (que vous ne devriez pas quand même pas).


1 commentaires

La performance est bonne après la compilation; J'ai posté la question parce que je suis dans une phase de mise en œuvre de la demande de test / changement de changement et que je pense que probablement une heure de chaque jour est consacrée à la compilation et espérait que je pouvais récupérer un temps perdu.