2010-10-21 4 views
2

Je suis en train de créer un mécanisme de génération qui réduira automatiquement et combinera un certain ensemble de JavaScripts.Obtenir par programmation le code JavaScript généré par * .asmx/js

Le problème que je suis confronté est que pour réellement intégrer ces services Web, j'ai besoin d'obtenir ce contenu en quelque sorte.

Je suis conscient qu'il est provisoirement possible en utilisant la classe WebClient et invoquer l'URL, mais qui se sent un peu exagéré et cela ne fonctionne pas lorsque nous le déclenchement de ce mécanisme sur Application_Start en Global.asax.

Tout d'abord, est-ce même possible, et si oui, et indique comment je devrais aborder cela?

+0

En tant que temporaire afin lution, nous enfilons l'outil de combinaison/minifieur sur Application_Start dans Global.asax, et démarrons ce thread lorsque la première requête est terminée, ce qui nous permet de demander les services Web via http: //xxx/ws.asmx/js, puis de réduire + combiner cette sortie. – peol

Répondre

1

Vous avez deux façons:

  1. sur demande combinant & minification (décrite par Sohnee) (vérifier aussi cet article: http://www.codeproject.com/KB/aspnet/CssAndJavaScriptOptimizer.aspx?display=Print)
  2. temps de construction - consulter cet article: http://encosia.com/2009/05/20/automatically-minify-and-combine-javascript-in-visual-studio/

Et voir la question précédente sur SO pour plus d'informations: Concatenate and minify JavaScript on the fly OR at build time - ASP.NET MVC

+0

Merci pour les liens. Je vais les vérifier, mais l'approche que nous utilisons fonctionne très bien, sauf pour les fichiers de services Web, qui semblent créer leur contenu lorsqu'ils sont consultés (par exemple lorsque vous ajoutez/js à l'URL) - et c'est vraiment le seul problème avoir en ce moment. – peol

+0

@peol, votre logique de combinaison/réduction peut être dans une méthode qui est appelée sur Application_Start. Il placerait les fichiers de résultats à l'emplacement configuré dans le système de fichiers. Ensuite, votre gestionnaire actuel (services Web) pourrait être écrit pour regarder dans cet endroit. – VinayC

+0

Je ne suis pas sûr de savoir ce que vous voulez dire, le travail de combiner + minify fonctionne, mais pas sur les fichiers asmx car ils ne génèrent pas de fichiers javascript (vous devez les demander spécifiquement avec ws.asmx/js), je voulais pour obtenir cette sortie sans avoir à demander réellement ce fichier (i.e rend le javascript par programme). – peol

1

Pourquoi ne pas simplement le créer à la volée?

Appelez l'URL de la balise de script et mettre en cache la sortie que vous générez ...

<script src="YourCodePage.aspx" type="text/javascript"></script> 

Vous pouvez ensuite créer la version minified à la volée la première fois qu'il est demandé, mais cache la réponse à rendre les choses plus rapides pour les autres visiteurs de votre site.

+0

Ce serait une approche à coup sûr, mais pourrait être difficile à gérer lorsque vous avez besoin de javascript dynamique (par exemple des versions minifiées pour chaque sous-page), l'approche que nous allons utiliser va créer toutes ces versions minifiées spécifiques à la volée. La valeur est modifiée dans web.config (ce qui nous permet de patcher à chaud des javascripts sans republication). – peol

+0

Vous pouvez ajuster votre stratégie de mise en cache en fonction de la demande, donc un script statique aurait un cache long, et quelque chose de spécifique n'aurait pas de cache. Vous auriez besoin de mettre en cache l'URI dans l'attribut src pour ceux-là aussi si vous voulez que les requêtes suivantes récupèrent le script. – Fenton

+0

Exactement, mais en les combinant tous, nous générons des fichiers combinés uniques (et minifiés) chaque fois que nécessaire. Si nous devons corriger un javascript, nous pourrions simplement télécharger le fichier source et éditer un numéro de cache unique dans le fichier web.config et l'application générerait un nouveau fichier combiné unique (qui fonctionne parfaitement, sauf le fichier dynamique * .asmx/js). – peol

Questions connexes