11
votes

ASP.NET MVC - Compression + Caching

J'ai vu un certain nombre d'options pour ajouter de la gzip / déflate compression sur la sortie ASP.NET MVC, mais ils semblent tous appliquer la compression à la volée .. Ainsi, ne prenez pas d'avancement de la mise en cache de la teneur compressée.

Toute solution pour permettre la mise en cache de la sortie de la page comprimée? De préférence dans le code, de manière à ce que le code MVC puisse vérifier si la page a changé et expédiez la teneur en cache précompressée, sinon.

Cette question pourrait vraiment s'appliquer à ASP.NET régulièrement.


4 commentaires

Vous voulez dire comme cacher la réponse compressée dans system.web.cache ?


Peut-être ou toute autre solution qui accomplit cela.


Aucune des réponses jusqu'à présent, tout en informant à d'autres égards, semblent aborder la compression de contenu dans le cache vs. I> servi de le cache. Réfléchir à une présentation UG sur la mise en cache ASP.NET, avez-vous envisagé d'écrire un fournisseur de cache personnalisé?


Lier cela comme solution possible, mais je n'ai pas testé le: weblogs.asp.net/rashid/archive/2008/03/28/...


7 Réponses :


5
votes
[Compress]
[OutputCache(Duration = 600, VaryByParam = "*", VaryByContentEncoding="gzip;deflate")]
public ActionResult Index()
{
    return View();
}

3 commentaires

Toute documentation à ce sujet? ressemble exactement à ce que je suis après.


J'aimerais voir plus d'informations à ce sujet, je n'ai pas été en mesure de faire le travail "compresse"


@Bradymoritz Il est possible que l'attribut compresse est référencé à quelque chose comme le suivant Stackoverflow.com/a/3802424/ 459102



0
votes

Vous pouvez créer un attribut cache: xxx


2 commentaires

Comment cette compression de la poignée?


Désolé, mal compris cette partie de la question. Vous pouvez vérifier cela sur weblogs.asp.net/rashid/archive/2008/03/28/... . Cela fait toujours sur la compression de la mouche, mais son attribut vous donne plus d'une option de choix et choisissez une option qu'une solution à l'échelle du serveur.



0
votes

voir Améliorer les performances avec la cache de sortie pour une introduction complète sur le sujet. La recommandation principale est d'utiliser le [ sortieCache ] attribut sur L'action à laquelle la mise en cache devrait sois appliqué.


1 commentaires

Ne vois pas la mention de la compression?



3
votes

Utilisez des options de mise en cache à l'aide des attributs (pour MVC) et ne pensez pas à la compression car IIS / IisExpress compresse automatiquement votre sortie si vous l'activez.

La manière dont cela fonctionne, MVC n'active pas la mise en cache de fragments individuels ou de parties de sortie (mise en cache de contenu partiel). Si vous le souhaitez, envisagez d'utiliser un service comme Cloudflare (y a-t-il d'autres personnes comme cf?). Il met automatiquement en cache votre sortie et cache des fragments de votre sortie et fournit de nombreuses autres améliorations de performance et de sécurité, sans changement de votre code.

Si ce n'est pas une option pour vous, vous pouvez toujours utiliser Iispeed (il s'agit d'un port IIS de Google's Mod_Pagespeed). Il fournit des paramètres intéressants tels que l'élimination des espaces, la CSS en ligne et la compression JS, la fusion de fichiers JS et de nombreux autres.

CF et Iispeed ne craint pas comment votre site est construit, ils fonctionnent sur le niveau http / html. Ils fonctionnent donc sur MVC, Classic ASP.NET, PHP ou même des fichiers HTML bruts.


1 commentaires

Un dernier, soyez prudent lorsque vous utilisez varier car il peut casser le comportement de la mise en cache de certaines anciennes versions.



1
votes

Vous pouvez créer un attribut comme xxx

Ajouter une entrée dans global.asax.cs xxx

Ensuite, vous pouvez utiliser cet attribut comme suit: xxx

Vous pouvez télécharger l'exemple de travail de Github: https://github.com/ctesene/testComppepressionActionAfilter


6 commentaires

Ceci prend en charge Caching la version compressée de la page au lieu de recompresser chaque demande?


Oui, l'attribut est appliqué à la méthode du contrôleur ainsi "Réponse" est compressé du côté serveur. Je n'ai pas reçu ce que tu veux dire par "ré-compressez la demande".


Que la compression se produise sur chaque demande est donc inefficace: "Demande reçue-> récupération de la page Cached page-> Compressez la page mise en cache", versus "Demande reçue-> Récupérez la page Cached (qui est déjà compressée)".


Je ne reçois toujours pas le besoin réel ou l'utilité. Si la demande est mise en cache, le serveur répond avec un code d'état 304 et n'envoie pas l'organisme du document au client, cela signifie qu'aucun serveur n'a été touché pour obtenir une ressource mise en cache jusqu'à ce qu'elle soit modifiée sur le serveur lorsque la demande est effectuée. La compression est faite sur la réponse non sur demande. Quel est le problème réel que vous voulez être résolu ???


Si la page est mise en cache, elle doit être mise en cache sous sa forme comprimée. Il est inutile de recompresser le même contenu sur chaque demande.


Je ne parle pas de la mise en cache du client, je parle de la mise en cache latérale du serveur.



1
votes

Ceci link semble assez proche de ce dont vous avez besoin. Il cache des pages générées dynamiquement compressées. Bien que l'exemple utilise des formulaires Web, il peut être adapté à MVC à l'aide d'un attribut de sortieCache

[OutputCache(Duration = 600, VaryByParam = "*", VaryByContentEncoding="gzip;deflate")]


0 commentaires

0
votes

Utiliser l'espace de noms xxx

Créer la classe.ca dans votre projet principal xxx

--- et ajouter dans global.aSax.cs xxx


0 commentaires