Exécution dynamique de regroupement et d'minifying MVC 4
Je me demandais si quelqu'un peut m'aider avec le regroupement et les minifying à l'aide de la nouvelle fonction d'optimisation de l'espace de noms livré avec MVC 4.
J'ai une Multi-application dans laquelle je veux décider qui, js fichiers doivent être chargés en fonction des paramètres définis par l'utilisateur. Une approche serait de créer tous les groupes à l'avance et de modifier le chemin d'accès virtuel de resolvebundleurl basé sur le réglage de l'utilisateur, mais qui ne se sent pas vraiment la bonne façon.
J'ai également css dynamique dans un cshtml vue basée sur des paramètres utilisateur, qui je voudrais avoir minimisé dans l'exécution.
Des suggestions? Je vois aussi beaucoup de réactions dans d'autres questions pour vérifier Requestreduce, mais ils sont tous de la même utilisateur.
Quelle serait la meilleure approche pour gérer les deux situations?
Merci d'avance!
- Personne? Quand j'ai changer mon code Javascript ou css au cours du développement. Le minimisé (inclus), les fichiers mis à jour sans une reconstruction, de sorte qu'il doit être fait au moment de l'exécution....
- La question du titre devrait être modifié pour souligner la dynamique des faisceaux (ou par utilisateur).
Vous devez vous connecter pour publier un commentaire.
Une approche que vous pouvez prendre est de construire le faisceau de façon dynamique lorsque l'application démarre. Donc, si vos scripts sont situés dans
~/scripts
que vous pouvez faire:Alors votre balisage peut ressembler à ceci
@Scripts.Render("~/Scripts/Libs/js")
Remarque: j'utilise la dernière package nuget pour le système.web.optimisation (maintenant Microsoft.AspNet.Web.Optimisation) situé ici. Scott, Hanselman a une bonne post à ce sujet.
j'ai écrit une fonction d'assistance à la dynamique de rapetisser ma css & js
utilisation
~/views/Home/Test1.cshtml
~/Views/Home/Test1.cshtml.css
~/Views/Home/Test1.cshtml.js
dans Test1.cshtml
mais ofcoz, j'ai mis la plupart de mon sripts,styles dans ~/Scripts/.js, ~/Content/.css
et les enregistrer dans Appp_Start
Nous avons considéré l'appui dynamique des faisceaux dès le début, mais le fond du problème avec cette approche est multi serveur scénarios (c'est à dire le cloud) ne fonctionne pas. Si tous les groupes ne sont pas définis à l'avance, toute regrouper les demandes qui sont envoyés à un serveur autre que celui qui a servi à la demande de page obtiendrez réponse 404(comme le bundle définition n'existe que sur le serveur qui s'occupait de la demande de page). En conséquence, je suggère la création de tous les groupes à l'avant, qui est la principale scénario. Configuration dynamique des faisceaux peuvent aussi travailler, mais qui n'est pas entièrement pris en charge scénario.
<script src="@Url.Content("http://localhost/CardGame/bundles/jquery")" type="text/javascript"></script>
n'a pas fonctionné pour moi. Réponse 500.Mise à jour: je ne sais Pas si c'est important mais je suis en utilisant MVC 5.2.3 et Visual Studio 2015, la question est un peu ancien.
Cependant j'ai fait dynamique de regroupement qui travaille dans _viewStart.cshtml. Ce que j'ai fait j'ai fait une classe helper qui stocke les bundles dans un dictionnaire de faisceaux. Puis à l'application de commencer, j'ai tirer dans le dictionnaire, et les enregistrer. Et j'ai fait une statique boolen "bundlesInitialzed" afin que les paquets seulement ajouter dans le dictionnaire une fois.
Exemple Helper:
Exemple _ViewStart.cshtml
Remarque: il doit être mis à jour pour utiliser filetage de verrouillage pour empêcher les 2 demandes entrant dans le bundle de code avant la première sortie.
La façon dont cela fonctionne est la vue de démarrage s'exécute sur le premier demande au site après une application de la piscine de réinitialisation. Il appelle la RegisterBundle sur l'aide et passe le ScriptBundle ou StyleBundle le dictionnaire dans l'ordre RegisterBundles est appelé.
Quand FinalizeBundles est appelée, vous pouvez spécifier Vrai qui va forcer les optimisations indépendamment de web.config paramètre debug, ou le laisser à null, ou utilisez le constructeur sans paramètre de l'avoir à l'égard du web.paramètre de configuration. Passant false va l'obliger à utiliser sans optimisation, même si le débogage est vrai. FinalizeBundles Enregistre les paquets dans les paquets de la table et du jeu de _BundlesFinalized de vrai.
Une fois finalisé, une tentative de faire appel RegisterBundle de nouveau lever une exception, c'est gelé au point.
Cette configuration vous permet d'ajouter de nouveaux paquets à la vue de début et de réinitialiser l'application de la piscine pour les amener à prendre effet. L'objectif de départ, j'avais écrit que c'était parce que je fais quelque chose que les autres utilisera donc je voulais être en mesure de changer complètement la face avant de l'INTERFACE utilisateur sans avoir à reconstruire la source pour modifier les paquets.